Mono Environment

We invest in production.

Introduction

Deploying changes into production stands as the pivotal activity for a SaaS product, as it’s the means through which a company delivers value to its users. However, it also harbors significant trepidation among teams due to its potential to introduce side effects into the latest operational version of the product, i.e., the most recent deployment.

To mitigate the risks associated with this process, various techniques are typically employed, including the replication of production-like environments, reliance on Quality Assurance (QA) and Software Development Engineer in Test (SDET) teams, and the allocation of additional time for design and testing. While these measures help reduce the likelihood of bugs, they simultaneously extend the time required for deployment introducing additional layers between local development and the production environment, and increases significantly the cost of delivering software. This, in turn, poses one of the most significant challenges for a SaaS company: the delay in delivering value to users.

We’ve all encountered scenarios where changes worked flawlessly in the staging environment but faltered in production. We believe staging is a false sense of security.

The concept of Mono Environment addresses a fundamental question: How can we maximise the pace of value delivery while minimising associated risks? It revolves around the practice of channeling all time and effort into the production environment.

Embracing the Mono Environment approach offers numerous benefits but necessitates the implementation of various software delivery practices, which are detailed below.


Benefits

Enhanced Velocity

  • Accelerated time to market.
  • Efficient delivery flow without bottlenecks.

Cost Efficiency

  • Reduced fixed expenses, avoiding the high costs of production replicas.
  • Increased return on investment as teams focus primarily on harnessing the production environment.

Improved Product Quality

  • Fewer production-related issues due to a “production-first” mindset, resulting in built-in quality.
  • Reduced frequency and duration of outages, ensuring quicker recovery.
  • Enhanced collaboration between product and engineering teams

Increased employee engagement and retention.

  • Engineers’ skill development, expanding their business knowledge and technical expertise.
  • Increases people confidence to deploy, understand and fix issue as they have a much better understanding of the overall product.
  • Streamlined recruitment and longer employee tenures in a high-trust environment with regular code deployments, leading to greater job satisfaction.


Software Delivery Practices

  • Production First is about implementing features focusing on live environment runtime.
  • Post Mortems are systematic blameless retrospectives of incidents or outages.
  • Feature Flagging: enables you to control the release of new features or changes.
  • Continuous Deployment automates the release process.
  • Infrastructure as Code to manage and provision infrastructure using development practices.
  • Cloud Native to fully embrace cloud flexibilty and adaptability.
  • Zero Downtime Deployment to update the product without affecting user experience.
  • Observability to understand and monitor your system’s behaviour in real-time.
  • Test Driven Development guarantees code behaviour and prevent regressions.
  • Automated Testing continuously validates your code’s functionality.
  • Code Review is a process where team members review and comment code before releasing.
  • Pair Programming is a collaborative way to engineer code as a group.
  • Evolutionary Architecture emphasises adaptability of your system via incremental changes over time.

Authors