Move fast without breaking things06 Jan 2016
Building a product is hard. Building a product that scales with the team and the constantly evolving business needs is even harder. As your product grows, you will need to scale up your team and introduce some processes in order to make developing, testing, releasing and maintaining your product fast, efficient, and more enjoyable.
Release early, release often
Product release cycle is moving towards continuity. Facebook releases major features every Tuesday and bug fixes every day. HubSpot deploys 300 times per day. Even desktop applications like Google Chrome releases new updates automatically, without any user interaction, ensuring an always up to date product. As an early stage startup, you may not have the capacity to release so often, but you need to setup the processes to automatically release a feature or a bug fix as soon as it’s ready, without having to wait for a major ‘release bundle’.
Being able to quickly experiment and evaluate your assumptions not only reduces your customer feedback loops but also introduces an “always shipping” culture, enabling everyone to continuously provide value to the customers.
Thankfully, there are lots of commercial and open source products to help you setup a continuous delivery process. You can use PaaS solutions like Heroku to easily deploy your application directly from your command line, or setup a fine-grained release pipeline process using tools like Jenkins, Travis, CodeShip, AWS CodeDeploy etc.
Create a culture of testing
Writing tests is a integral part of software development that allows development teams to deliver high quality, predictable and maintainable products.
To someone who isn’t a software developer, the idea of writing code to test code may seem rather silly, but the benefits are easy to see: 1. Running tests automatically before each release, ensures the product works as expected and you’re not introducing new regressions. 2. Tests serve as documentation for how your code is meant to behave. Good tests are like a reference implementation, and other developers can look at them to see how to integrate their code with yours. 3. Tests make it easier to change software because you have confidence that changes do not break existing functionality. Poorly-tested software becomes increasingly expensive to change as time goes on. Risk increases dramatically as the system becomes more complex because it becomes more and more likely that changes inadvertently break things that used to work.
Writing tests is an easy to overlook process in the very early stages of a product but it’s important to remember that “Going Lean” doesn’t mean go fast regardless of quality. Going Lean is avoiding waste. Bad quality software generates a lot of waste. So, if you avoid writing tests, you are really generating a lot of waste. If not now, then certainly later, when the cost of change would by significantly higher.
Automate the boring tasks
Setting up a development environment for a new hire is almost always a frustrating experience. Ensuring your development environment closely replicates your production environment is necessary to avoid compatibility issues. Configuring services for a production environment is a repeatable and error prone procedure.
Automating those procedures is necessary in order to move fast but also to ensure the development experience is always consistent.
* This article was originally posted at The Path Forward