Overview
Wasya Co consulted for Sturfee in 2016.
Sturfee is an engineering-heavy small startup team developing products in AI space. As data scientists and scientists, the team was is knowledgable about AI and ML, however they lack experience in software development, and knowledge of best practices. Sturfee reached out to me to setup process for building their software, managing environments, codebases and versions, and implement an agile development cycle.
The Problem
- Multiple environments, multiple versions, multiple branches of multiple codebases
- Microservice architecture necessitates a higher degree of infrastructure management than monolithic applications
- Junior team members not following naming conventions
- Hard-coded environmental variable in the codebase
The Stack
- Angular Frontend
- Go microservices
- Node microservices
- Python microservices
- All hosted on AWS
The Solution
It was critical to separate configuration from the codebase. I saw that some variables, such as database names and port numbers, were actually hard-coded into production code, sometimes with if-then statements that got clumsy and unmaintainable extremely rapidly. I modularized the configuration, moved it to separate data containers (json files files), removed these files from code repositories, and started managing these config files with infra orchestration tool (chef).
I introduced naming conventions and semantic versioning. Version number of every codebase became semantic and readable: just by looking at the branch name (correlated to the version), one is able to see what branch is the latest, and belongs to which proposed release. My methodology is losely based on git flow and semver, however see <this-article> for the complete description of git versioning that I recommend.
- Opscode Chef
- Jenkins
- Semantic Versioning
- Custom build scripts that allow push-button, repeatable & accountable deploy process
- Branching strategy that involved a stable master branch and rolling release branches, plus feature braches that get merged into release branches (that are tracked by the master branch, which is presumably the latest stable).
See the Sturfee Build Pipeline whitepaper for additional information on this project.