All designs consist of components. They can be broken down into smaller and smaller components/elements to the point at which they can be classified in two key aspects (all measures are relative to the overall project cost):
- Straightforward (Small number of hours to implement and test)
- Complex (A significant number of hours to implement and test)
Additionally design components and elements can be either:
- Independent (Element is essentially standalone and does not impact/affect other design components)
- Interdependent (Impacts one or more other design components)
Think of it like a matrix:
1st Quadrant Straightforward & Independent
This is where we the developer/design want to be: The “Yes” Quadrant. It won’t take long to implement it and it won’t really affect anything else we’re trying to achieve on the project.
2nd Quadrant Straightforward & Interdependent
It’s great these features are straight-forward to implement however we need to be mindful of the interactions with other system components before we jump in and start implementing otherwise the implementation could cause a ripple effect of additional retesting and modifications to other design aspects.
3rd Quadrant Complex & Independent
In this Quadrant it comes back to schedule, cost and prioritization issues. Ultimately if there’s enough time and money to implement these sorts of features at least they’re independent enough to not affect other aspects of the product.
4th Quadrant Complex & Interdependent
No matter how you slice it, the answer to these should be either A) we need more time and money to implement this or B) No. No - no - NO!
Key Points
- Be clear who exactly your customer is
- Be clear in your feature classifications
- Be honest about how much effort is required to implement a feature
- Be Brutal in saying no to the 4th quadrant activities
I also talk about this on Episode 45 of Pragmatic.