CustomMade, a startup backed by Google Ventures, was experiencing monthly 30% growth on their web platform. They needed to scale up, but lacked developer resources.
CustomMade, a website designed to help individuals buy and sell custom goods, had originally built their website for speed, not for scale. They currently have more than 12,000 makers, 100,000 buyers, and 50,000 projects listed on the site. With 30% monthly growth, the Google Venture start-up needed to scale their site.
The speed of site development, though it had allowed them to launch quickly, led to challenges including thirty distinct applications built using a variety of methods, slow page load times, and error messages that hindered customer experience. The original team that built the code was no longer with CustomMade while the current team was capacity-constrained. CustomMade wanted to contract a team of Django developers that could both integrate well with the team and also handle their technology stack including MySQL, Mongo, ElasticSearch, Celery, Nginx, Green Unicorn, and Redis.
A Caktus team joined CustomMade to enable scaling by implementing new developer workflows that improved page load times and enhanced platform architecture.
Caktus deployed three developers to augment the existing CustomMade team. To ensure smooth integration, the team worked on-site with the client in their Cambridge, MA offices before working remotely. They participated in daily scrums and used CustomMade’s preferred project management and messaging applications.
As we worked with CustomMade, we identified developer workflow challenges that made faster page load times and scaling problematic. Challenges included significant amounts of dead code, a need for unit testing, and subsequently, a need for local testing environments and a best practice Django project settings inheritance structure.
We began by adding unit tests as we reviewed each Django app in the project for unused or duplicated business logic. Unit testing ensures that developers would catch potential errors before they were pushed to production. Though this seemed like a slower process up front, it saved invaluable time by avoiding errors of unknown origin on the live site. We ultimately deleted more than 100,000 lines of dead and/or duplicated code.
We ultimately deleted more than 100,000 lines of dead and/or duplicated code.
When the unit test suite grew to well over 1000 tests, it became clear that CustomMade developers needed a fast, easy way to run tests for new features and small code changes locally. To accomplish this, we updated code so that SQLite could be used for local testing, resulting in dramatic speedup for testing changes before pushing code to the CI server for testing with MySQL.
We also refactored their Django project settings. CustomMade used a non-standard project settings structure that made it difficult to share settings between environments, requiring settings to be defined in multiple places and causing delays when on-boarding new developers. We refactored these settings to use an inheritance structure that minimizes the differences between development environments and production, and to make them more DRY (non-repeated settings).
CustomMade could now scale with 90% faster page loads and ramp up new developers quickly.
Improving CustomMade’s platform with cleaner, more efficient code opens the door for scaling. Dead code and defunct application removal resulted in more than 90% improvement in page load speeds on several key pages. The creation of a testing process, configuration for local development and testing, and refactored project settings also meant that CustomMade could quickly ramp up new developers. CustomMade frequently needs to augment their team so having established, intuitive processes is vital to quick development with new staff.