Gene Kim, Author, Researcher, and Founder of IT Revolution, has been studying technology organizations since 1999. His research and ideas around development practices, operational stability and reliability, and security and compliance are solid.
In the article, Five Ways Leaders Can Improve Developer Productivity, I shared my view of the five ideals from Gene Kim’s Unicorn Project and the steps software development leaders can take to achieve them within their teams. Now let’s examine some engineering and architectural changes you can make to continue improving developer productivity.
Locality and Simplicity
To encourage locality and simplicity, strive for loose coupling between system components. An uncoupled architecture allows code changes to a single component without impacting multiple locations or teams. Furthermore, if one component encounters an issue or fails, the other components will continue to work at near full capacity.
Another way to accomplish this ideal is to break work into small batches, which decreases the amount of complexity that the people working on the batch must deal with at any one time. This change reduces risk and improves visibility and control.
Focus and Flow
You can create a focused environment for your teams by utilizing domain driven-design, where microservices are built around lines of responsibility; one for sales orders, one for customers, and so on. This approach allows each team to become an expert in a single domain.
It can also be useful to have a team dedicated to complex portions of the overall internal system. A team focused on complicated subsystems and architectural components can help achieve focus and flow by taking on work that requires deep specific sets of technical skills and knowledge, freeing up the rest of the development teams to focus on their business domains.
Improvement of Daily Work
Improving processes around code reviews, CI/CD, and source control will enhance daily work and help deliver value faster. These areas are where most of the work comes together and can make or break team friction.
- Keep pull requests small, fast, and rapid as digestible pieces of code.
- Use source control tools (such as GitHub Flow) to create separate workflows around branching and source control, shifting these processes left and allowing your team to iterate quicker.
- Ideally, do multiple deployments a day. One-click deployments will enable this by creating a simple and reliable deployment process.
- Automate your testing, so that you can deploy changes rapidly with the minimum number of people involved in approvals.
- Lastly, automate your schema change management process so that you can reliably and repeatedly deploy database changes to all environments.
Psychological Safety
Using a wide range of manual and automated testing offers developers a sense of safety, enabling them to be brave and innovative. Incorporate unit tests, integration tests, and automated UI testing into your applications to create psychological safety. We aim for 80% unit test coverage, although reasonable exclusions for things like generated code do apply. You can also continuously run static testing tools like Sonarqube to guarantee a universal standard of code quality throughout the organization.
Customer Focus
Lastly, keep in mind that the architecture is there to serve the customer. A comprehensive understanding of how the product will fulfill your customer’s needs is key before building or designing the product. Continuing to work with customers throughout the development process is crucial to making wise development decisions.
Gene Kim’s five ideals can help guide your engineering practices and architecture design to better support DevOps and improve developer productivity. Contact DragonSpears if you need help getting started.