On Efficiency

August 24, 2019

As a software development team, we should be relentness in our pursuit of efficiency. Not only in our algorithms, but more importantly in how our team gets work done.


Let's first clarify this concept. What do we mean by 'efficiency' in this context? The simple definition of efficiency is the amount of output for a given amount of input. In the context of a commercial software development team, the input is the amount of time the people in the team give to their jobs, and the output is the amount of value that team delivers to their business.

Output is not story points, lines of code, pull requests, or deployments. It is business value.


Any team activity that is not directly contributing to shipping value is friction in the system. Some frictions are necessary (e.g. the friction of a bearing in an electric motor providing a guiding force to keep the motor spinning precisely on a given axis), and some frictions are unnecessary (e.g. a malfunctioning brake system that engages the brakes of a car all the time, slowing it down).

Be sure that all of your team's activities are bringing value. If half of your team is disengaged and checking email or working during a regular team meeting, then it is time to re-evaluate the purpose or audience of that meeting. Be open to changes.


Sometimes an improvement in efficiency can be made by changing the design of a system. By transitioning from steam power to gasoline power, automobiles became more efficient. By transitioning from gasoline to electric, cars have became even more efficient. Similarly, a team who is at maximum efficiency within the constraints of one system of working may be more or less efficient in a different system of working.

Our jobs as members of a team are to maintain a vigilance of skepticism for how the team operates. What worked yesterday may not work today. Tomorow may bring new learning or innovation that brings us toward better efficiency. It is our job to identify these opportunities to improve efficiency and act on them.

Regular Team Retrospectives

Meet regularly as a team to discuss what is or is not efficient about your current way of working. Identify bottlenecks in the design. Suggest changes and commit to trying them before the next meeting. By dedicating a short time to this kind of healthy self-reflection, you will ensure your team is working in the way that is optimal to them and their environment.

Be courageous, bold, and confident. Don't be afraid to experiment. It is all in the name of maximizing your team's value.