Brian Cottingham
brian@bcottingham.com | github.com/spiffytech

Summary

Versatile software engineer focused on building systems and web apps that solve business problems. Has a track record of bridging technical gaps to deliver solutions.

Highlighted Achievements

Built platform to run millions of web scraping jobs each week

Employer needed to scrape massive amounts of data from 3rd party websites, and keep it fresh. I designed & built the distributed task runner platform to deploy millions of compute-intensive automated browsers. This was powered by a custom job queue, due to unique requirements around job scheduling and retries.

Implementation had to pivot several times as I learned that e.g., Azure Functions hosts develop unrecoverable faults when under heavy load, or that Durable Functions code cannot be updated without erasing the persistent job state.

Tech: JavaScript (Node.js, TypeScript), PostgreSQL, Puppeteer, Docker, Azure (Batch, Functions, Table Storage, Queue Storage, Blob Storage)

Built Slack bot to automate fragile business processes and let other teams self-service

Employer faced two issues: 1) Critical data imports failed frequently & silently. Customers were angry, and account reps didn't have answers. 2) Software deploys required extensive cross-team planning and coordination, filled with error-prone manual steps.

I built a Slack chatbot which orchestrated and unified disparate internal systems, exposing a self-service interface to external teams. This returned their ownership and autonomy, and made the status of business processes immediately visible to all stakeholders.

This was a night-and-day difference for everyone involved. It eliminated a frequent source of urgent blockers for the external teams, and saved hours each week for the devops team.

Tech: JavaScript (Node.js), AWS (EKS / Kubernetes), Jenkins, Linux

Built the provider-side video chat tool to power a client services marketplace

Employer wanted providers to take video calls with their clients. I built a video chat feature and integrated it into the existing provider user interface. Providers would receive a notification of an inbound call and answer it.

The software allowed the user to mute, select & switch audio / video devices, and displayed the presence of other users on the call. The user interface was designed for 1:1 calls, and the underlying code supported group calls as the company expected to expand into those.

Tech: JavaScript (React / React Native, TypeScript), AWS (Lambda, DynamoDB), Twilio, WebRTC, web browser media APIs

Turned around a failing product with an observability initiative

When employer rolled out a new app which had showstopper performance and correctness issues, my team took initiative to troubleshoot. We implemented observability from the ground up, which proved key to turning the project around.

As the primary individual contributor, I instrumented every service and system we could find. We gradually correlated a complex web of user & system activity against performance drops and error rate spikes, sending that info upstream to the teams who could resolve it.

Tech: Linux, Windows Server, Docker, Grafana, Logstash, Ansible

Converted manual, brittle infrastructure into reliable automation

At several jobs I was tasked with taking services deployed on legacy manual infrastructure nobody fully understood, and automating anything from installing a new system service, up to fully-automated configuration of new servers. I collaborated with ops and dev staff to get the answers I could, then dove in and reverse-engineered the existing systems.

I automated things that weren't designed to be automated, devised testing criteria to minimize regressions, and supervised the transition to the new servers. Projects ranged from automating VMs, to containerizing legacy software, to migrating container platforms.

Fleet sizes range from full automation of dozens of servers, to partial automation of hundreds.

Tech: Amazon AWS (EC2, EKS, Lambda, S3, RDS, ECR, Route 53, CloudFormation, DynamoDB), Docker, Kubernetes, Linux, Ansible, Chef, Xen, DB2, Apache, Nginx

Other experience

Nearly all previous roles were either software-focused, or had a software development component, including backend, frontend, and full-stack. I've focused on TypeScript recently, but also have experience in other languages, and with traditional server-rendered web apps. I've worked on a 300kLOC web app that received high traffic, whose biggest features were driven by compute-intensive background jobs with horizontal sharding via single-tenant customer databases. My devops roles frequently included building tools for colleagues on our team and neighboring teams.

Outside of work, I enjoy building software and growing my dev skills. I've built a number of personal software projects, some of which I use every day. I've participated in coding challenges like Advent of Code or the Facebook Cup, and I was President of the Linux Users Group in college. I also was briefly the maintainer of a niche SPA framework.

I'm accustomed to diving into unfamiliar technologies and problem domains and figuring things out.

Tech: Vue, Svelte, Solid.js, PHP, Python, Rust, Go, Clojure, Elixir, F#, MySQL, SQLite, Redis, CouchDB, Django, AI/LLM (Claude & ChatGPT APIs)

Professional Experience

Education

NC State University, BSc Computer Science (2011)