Colin Mitchell

Qualifications

Professional Experience

Developer/CTO, Bandzoogle

Montreal, QC. July 2006 - Present

Member of team maintaining and developing a custom website builder which powers websites for musicians. We host over 60,000 websites and our servers handle millions of hits per day. The system is written in Ruby on Rails. Our team is distributed over multiple timezones, and we all work remotely.

When hired, I was the second developer on the team, and we had under 1,000 websites running on a very simple ColdFusion CMS running on a Windows server infrastructure. My early projects involved improving our asset generate system to run asynchronously, moving from Windows/IIS to Apache on Linux, moving user assets to S3, and implementing a number of services on EC2. I also worked a lot of performance improvements in our code and in slow MySQL queries.

I was largely responsible for a rewrite of our codebase in Rails. The original code was very brittle and moving allowed us to make a lot of improvements and build a stable foundation for the future. Moving to Rails allowed us to write a testable, stable codebase. We also changed server providers as part of this process, so my work involved moving user data and assets, writing a migration system, and implementing chef to build a collection of new servers.

As we've grown, I have implemented application caching, improved our site performance, ensured site uptime and server stability, built out our reporting tools, worked on fraud issues, and help continue developing our product.

Projects:

  • Orchestrated several data migrations: from our ColdFusion application to a new Rails application based in a new datacenter, then from that datacenter into a new instance of the application running on kubernetes at AWS.
  • Implemented a system to generate, maintain, and serve SSL certificates for 60,000 domains using Lets Encrypt.
  • Implemented a web-based image resizing/manipulation system to handle thumbnail generation, image rotation, cropping, format conversion, etc, all dynamically on the fly.
  • Built a custom web analytics tool for our users, using Rails and D3.js
  • Built a background job service initially using RabbitMQ and Sneakers, and eventually switching to Sidekiq, which runs millions of jobs a day.
  • Built a system to encode MP3s and build zipfiles of albums. We encode thousands of files a day.
  • Implemented Paypal and Stripe integration for user stores and for recurring subscriptions.
  • Implemented webmail for our users to multiple email services via API interfaces with Rackspace Email and enom.
  • Built integrations with 3rd party services such as Paypal, Stripe, Soundcloud, Twitter and Facebook.
  • Server/infrastructure provisioning using chef, ansible, and terraform and ongoing maintenance.
  • Built and maintained our current DNS system running PowerDNS.
  • Implemented many features for user websites, including our music player and store features.
  • Implemented a mailing list tool for our users, originally starting with a postfix server and eventually moving to Sendgrid.
  • Built an accounting system to accept recurring payments from users, generate reports, and monitor trends.

Technologies used:

  • Ruby on Rails
  • Javascript and CSS
  • Docker
  • kubernetes
  • chef, terraform, ansible
  • Apache, nginx and openresty
  • Linux
  • MySQL and postgres
  • Postfix
  • AWS services including EC2, S3, Lambda, Elasticache and EKS

Programmer, Participatory Culture Foundation

Worcester, MA. April 2005 - June 2006

Programmed several websites and open source tools enabling video producers to publish, promote, and distribute their content.

VideoBomb: Main programmer for a community site to bring people together and share popular videos on the web. I did the majority of object modeling and database design for the site and wrote the bulk of the code, using Ruby on Rails as the framework and MySQL as the database. I wrote code to generate RSS feeds, designed and developed an algorithm to determine how videos reach the front page of the site, wrote the tagging system, and built a large amount of the rest of the site. I also implemented an interface with the Democracy channel guide, and wrote code to allow videos to be added from the Democracy video player.

Broadcast Machine: Developed an open source software package for videocasting, creating video channels, and distributing content. I took over the project from another developer that wasn't able to proceed beyond the early stages of development and implemented a large amount of the functionality. Wrote code to automatically generate RSS feeds which contain publishing information, licensing rights, length of the video, etc. I worked to ensure that Broadcast Machine worked on as many platforms as possible while being very simple to install and manage. I communicated with users of the software to resolve bugs, implement requested features, and help with installation questions. Broadcast Machine is written in PHP and can use MySQL or a flat-file system as a database. My code for this project runs on as many different webservers/platforms as possible, and is designed to be very easy for the user. My work also involved:

  • Implementing transparent MySQL/flat-file support
  • Writing support for custom, user-generated themes
  • Writing unit tests to ensure high code quality
  • Developing an XML-RPC interface for 3rd party applications

Conversate: Built an online discussion tool in PHP and MySQL. I took over the project from its initial developer and continued adding/refining features before it was launched. I implemented RSS feeds, 'bookmarklets' allowing users to start conversations about an interesting URL, a system for starting conversations via email, improved buddy list management, etc. I also tuned database queries, wrote user interface code using DHTML and JavaScript, and optimized code to make the site as efficient as possible.

Programmer, SoftPower

Old Saybrook, CT. 2003 - 2005

Softpower writes business management software for the outdoor power equipment industry. I was the lead programmer on a project to completely rewrite the flagship software product, which handles point-of-sale, inventory management, purchasing, work orders/repairs, etc. I designed all aspects of the system, including a SQL Server database, an object model in C#, and a Windows user interface. I met with dealers and users of the old software to determine a list of requirements, get input on design, and get feedback on beta versions of the software. I implemented a web service interface between dealers and manufacturers to handle registration of new hardware, warranty claim submission, parts inquiries, and purchase orders. Other work included:

  • Barcode support - reading in UPC labels, custom manufacturer labels, etc, to speed data entry for users. Also implemented support for label printers so that dealers could print their own barcodes and use them to sell/manage equipment.
  • Reporting system using Access and Crystal Reports, which allowed for creation of custom reports by dealers
  • Designed and implemented the database, object model, user interface
  • Wrote a patch system to make it easy for dealers to manage periodic database updates
  • Wrote a basic installer which would check for prerequisites, install them, manage the database installation, etc.

Programmer, FleetMobility

Worcester, MA. January - December 2002

I designed and implemented a C++ application for the Palm OS used by drivers at trucking companies, which provides real-time GPS location data sent via SMS messaging. I wrote code to allow drivers to track time spent driving according to federal requirements, track trip data, starting/ending odometers, manifests, tolls/expenses, etc. I also wrote a more general tractor/trailer logistics system for a GPS/SMS unit called the Trim Trac. This system is written is C# and uses SQL Server, and integrates with a Java application which processes incoming/outgoing SMS messages. Other aspects of my work included:

  • Report generation/Data processing using MS Access and Crystal Reports
  • Synchronization of data from Palms to SQL Server
  • Integration of all data in SQL Server
  • Website using C#/ASP.NET for real-time tracking and configuration of units
  • A C#/MapPoint desktop application for tracking vehicles

Senior Technologist, WGBH Local Online

Boston, MA. April 2000 - January 2002

Technical lead for https://www.wgbh.org/ during two complete rebuilds of the website. I helped to determine needs, communicated with people throughout the organization to define goals for the website, served as liaison to the programming firm that built the site, and participated in the coding of individual elements of the site. Helped to specify a design for a content management system used to generate content for the website, and developed several portions of the CMS. Built a search engine which indexes content from the site to return results to users, as well as allowing the editorial staff to rank some results higher when needed. I integrated the website with several external sources of data, including TV schedules, the pledge system/member database, and external news sites. I also supported the editorial and design staff that produces all of the content for the site, as well as building special websites on a regular basis, such as a database of local candidates and voting districts for Massachusetts during the 2000 election, which was the only database of its sort at the time.

Personal Projects

I've worked on a lot of side projects over the years, here's a partial list.

You can see more on my projects page or on github.

Other Experience

Vice-Chairman, International Model United Nations Association

March 1999 - March 2003

IMUNA is a non-profit corporation that oversees two Model UN Conferences along with several other educational projects. My role was to improve our Internet presence and to work on the Classroom To Conference project. The position also involved choosing the leadership of both conferences each year, approving their budgets, and participating in the long-term decision making process for IMUNA.

Game Programming

Ongoing

Assorted small game development. Completed projects include:

Education