Staying Focused and Understanding Trade-offs
In software development and in life
While many of the analogies I use relate to software development, I’ve found the concepts outlined here to be useful in other contexts. I feel that it is helpful to acknowledge that though the concepts are applicable in a software context, I have developed these perspectives primarily outside of the realm of software.
Every project comes with a unique set of challenges and obstacles. To ensure success, it’s important that you approach any given project with a clearly defined purpose.
Separate Signal from the Noise
Often people talk about goals in general terms: “I want to build something that changes the way we _______.” However, when it comes to execution, we have some pretty bad blind spots:
- Struggling to outline steps for efficient execution
- Inability to accept sub-optimal, yet necessary, solutions
- Difficulty redirecting when the target has moved
I find people consistently getting stuck on seemingly important issues. Identity is often wrapped up in specific implementation or execution. It can be incredibly distracting when you care deeply about how the problem is solved.
Often, deliverables that are no longer necessary or relevant can dominate and derail the overall project. When teams hyper-index on details which are no longer relevant, valuable time and resources are wasted. Recognize when ‘important’ steps have become ‘distracting’ steps.
Distractions are not neutral.
Prioritization, and understanding what is signal vs. what is noise go hand in hand— effective prioritization relies on a clearly defined objective.
Difficulties with prioritization often stem from a lack of understanding of the overall project objective. An example of poor prioritization: building out a web framework to meet the exact needs of an your application, before you’ve validated a market. Unless your the product you’re delivering is literally web frameworks, it would be a waste of energy — there is no need to for infinite scalablity when you have four daily active users.
Task prioritization should be ordered by value generated over effort necessary to deliver on the task. Varying weight will also need to be placed on short term vs. long term implementation.
For a brand new startup, prioritizing longevity is important and writing bad code is never a good idea, but spending weeks polishing and refactoring code that already works, while your UX is suffering, is not an effective use of time. On the other end, large companies failing to address scalability, and accommodate heightened site traffic, due to emphasis on minor UI changes, is again, misdirected effort.
The majority of priority decisions boil down to trade-offs. Remaining intentional — understanding the overarching goal — is fundamental to sustainable growth.