Simplicity is a Gift
Complexity
Complexity describes something that is intricate or complicated, or something that is made up of many parts and hard to understand or solve. It is something engineering teams have to deal with, sprint after sprint, and it can lead to bugs, burnout, and missed deadlines. To put it simply, complexity creates problems. Those problems can be software bugs and outages or missed deadlines, but at its core, complexity creates problems. When the complexity of an issue increases, the likelihood of the team not fully understanding it also increases, the chances of unseen minefields increase, and the cognitive load on the team increases, which in turn increases the probability of bugs. Complexity is one of the worst problems to deal with, whether in tech debt or new features; it is where bugs and burnout live. Reducing complexity is the fastest way to increase performance in engineering teams. So how do you reduce complexity?
Keeping it Simple
The first place this starts is in tasks and features. Breaking work down into smaller, actionable items and keeping them simple reduces cognitive load, increases understanding, and cuts out the room for scope creep and costly unknowns. Tasks should be small enough to be rapidly developed and not costly to adapt to feedback. Decisions and changes should be able to be made quickly without a large rewrite. When you break problems down this small, into the most simple parts of the project, complexity begins to vanish, and the probability of bugs or missed deadlines starts to decrease. When you are working on a small, very explicit task, the expectations are clearly set, the problem and goals are well defined, and ownership is explicit. These are all things that get lost in the complexity of large, complicated tickets with vague requirements. It doesn’t matter if you have five projects or hundreds; keep it simple.
Define clear Goals
Along with keeping it simple, define clear, simple goals that the entire team understands and owns. They should all know and understand the why and what they are working for. Communication, trust, and mutual respect are critical for teams to perform at high levels, and they start with understanding what you are all doing and why. Keep goals simple and relevant, and make sure everyone understands them; they will be able to operate toward those goals more effectively and help simplify complex tasks into smaller, actionable items. Set clear expectations from the start so everyone knows what they are involved in and what is expected of them.
Owners
Tasks should have clear owners; there should be no question about who is responsible or who has the answers. If you can reduce the amount of searching and back-and-forth any team member has to do to get answers, get unblocked, or communicate issues, you are simplifying processes that slow teams down. It should be incredibly simple for team members to get unblocked and get answers to problems. If they are spending days trying to get answers or have to go through multiple managers, the complexity is stealing time and performance. Simplify, define goals, and let teams own decisions that get them to those goals.
Guiding Metrics
Similar to clearly defined goals, there should be clearly defined stages or check-ins that signal the project is on track, off track, or should be shelved. This removes ego and uncertainty and provides clearly defined stepping stones towards the goal. These are both a bridge to the goal and an escape hatch. Sometimes, complexity is just keeping a project alive long after it should be dropped. Simple guiding metrics can help remove decision fatigue and complexity through each stage. It’s easier to say, “ok, we missed this target, we have an issue,” than to figure that out after it’s too late.
Cut the fluff
If it isn’t critical to what you are doing, get rid of it. Oftentimes, engineering projects get ballooned with nice-to-haves, wish-list items, or barely related updates. These add complexity to the project and shift the focus away from your goals. If an item is not directly supporting or blocking you from reaching a goal, get rid of it or move it to a post-launch phase. Focus on the goals you have set and evaluate what will get you there and what is fluff.
Conclusion
Complexity sneaks into projects in more ways than this short post could possibly cover. Hopefully, these ideas help you find complexity in your projects and give your engineers the gift of simplicity by keeping it simple, defining goals, setting owners, guiding metrics, and cutting the fluff.