Aug 4, 2023
Unraveling the 'It works on my machine' mystery.

Mastering the Art of Development-Production Parity for Smoother Deployments

Biju Chandran

Lately, we've been facing hurdles while encouraging our project partners to maintain distinct environments for Development, QA, UAT, and Production. The goal isn't just to keep them separate but also to mirror the production conditions across all platforms. Much like the upstream problem-solving approach in Dan Heath's 'Upstream', we aim to anticipate and fix issues before they occur, creating a smooth and efficient development process.It was amidst this challenge that Yogesh Jadhav, our Director of Engineering, shed light on the principle of '𝐃𝐞𝐯𝐞𝐥𝐨𝐩𝐦𝐞𝐧𝐭-𝐏𝐫𝐨𝐝𝐮𝐜𝐭𝐢𝐨𝐧 𝐏𝐚𝐫𝐢𝐭𝐲'.

Picture this - you've spent countless hours perfecting a feature. It's working flawlessly in your local environment. Then, you push it to production, and everything breaks. Sound familiar? It's the classic "but it works on my machine" problem and it's a symptom of lacking development-production parity.Development-production parity is the concept of keeping your development, staging, and production environments as similar as possible. This reduces unexpected behaviors when deploying your application, making the development process smoother, less error-prone, and more efficient.But the lack of it can have serious repercussions. It can lead to unanticipated bugs, increased time and effort in debugging, deployment failures, not to mention the potential impact on the end-users of your product.

So how do we handle it? Here are a few strategies:

1. Use the same backing services across all your environments.

2. Keep your environments updated with the same version of the operating system and application dependencies.

3. Implement Infrastructure as Code (IaC) to automate your environment setups.

4. Containerisation can be your best friend. It helps package up your application with all the parts it needs, such as libraries and dependencies, and ship it all out as one package.

5. Use continuous integration and continuous deployment (CI/CD) pipelines to automate your testing and deployment processes.

Remember, the goal is to make your code more predictable and your life as a developer easier. The more closely our development environment mirrors our production environment, the smoother our journey is from code to deployment.

Indeed, setting up additional environments comes with an upfront cost. However, this expense is offset by the substantial cost savings achieved through reduced troubleshooting time in production, courtesy of 'Development-Production Parity'.