Making “works on my machine” stop being a sentence anyone says
Standardising local development and QA environments with Docker, so that what a developer runs, what QA tests, and what production serves are genuinely the same thing.
- Client
- Applied across multiple engagements
- Sector
- Engineering practice
- Duration
- Ongoing practice
- Role
- Engineering practice — introduced and maintained across teams
- To a running project
- One commandTo a running project
- Environment defined in the repo
- VersionedEnvironment defined in the repo
- Parity by default
- Dev = QA = ProdParity by default
01 — Problem
What was going wrong
On projects with more than one developer, environment drift is a reliable tax. Developers run slightly different language versions, slightly different database versions, slightly different extensions. QA tests something that does not quite match either. Bugs appear that nobody can reproduce, and time goes into diagnosing the environment instead of the software.
New developers feel it worst. A day or more can disappear into getting a project running before any useful work happens.
02 — Investigation
What the evidence showed
The recurring failures were worth tracking honestly: how often a defect turned out to be environmental rather than a real bug, and how long onboarding actually took against how long everyone assumed it took.
The answer is usually that the cost is larger than it looks, because it is distributed across everybody in small pieces rather than showing up as one visible problem.
03 — Solution
What was built
Development and QA environments were containerised with Docker so that language runtime, database and supporting services are defined in the repository rather than in each person's setup instructions.
The environment definition lives alongside the code and is versioned with it, so a change to infrastructure requirements arrives with the change that needs it rather than as a message asking everyone to update.
Deployment pipelines were built against the same definitions, closing the remaining gap between what was tested and what was released.
04 — Result
What changed
Getting a project running becomes a single command rather than a document, which changes what onboarding a developer costs.
Environmental defects largely stop being a category, because there is only one environment. Reproducing a reported bug becomes a normal task rather than an investigation.
It is unglamorous work with a compounding return, which is generally the kind worth doing.
Technologies involved
- Docker
- Docker Compose
- CI/CD
- Linux
- PHP
- PostgreSQL
- MySQL
Related services
Have a software problem, project or idea?
Tell me what you are trying to achieve and where it is currently going wrong. You will get an honest read on it from someone who has built this kind of thing before — including if the answer is that you do not need what you were about to buy.
Prefer not to call? Send me a message
Working with businesses across Australia — Melbourne, Sydney, Brisbane, Adelaide, Perth, Canberra and regional Australia.