Of the three legged stool that defines the controllable outputs of development of a software system
- Features
- Performance
- Stability
it's self evident that everything comes at a cost; you have to employ prioritization to determine what gets the most focus.
More time spent on features equals less time spent on performance and stability, and vice-versa.
Imagine having a development team that has 1,000 hours of capacity. How do you split the time? 333 1/3 hours per output? Are you feature driven: 600 hours spent on features, 350 on performance and 50 on stability?
Everything is a choice.
Note, I'm specifically avoiding what might be called Engineering as a controlled output. Mostly, customers don't directly notice Engineering - they can't tell if my interfaces are clean, if I'm employing a single responsibility principle, or my code is a spaghetti mess of variables named x1, x2, x3, ... x999 looking like it was produced by a poorly written minifier.
Certainly Engineering is indirectly noticed, as poorly Engineered software requires more resources to add Features, is less likely to be Stable, etc. That frequently manifests over the software system's lifetime.
So, we have our software system, and we've made our choices about who is working on what, and for how much time.
Easy peasy, right?
Maybe. Maybe not. There are other inputs to this problem.
Regardless of the time allocation, how have you segmented your development teams?
If your teams are aligned around a Feature, they're going to have a Feature mindset. They will communicate with other teammates about Feature implmentation. Regardless of direction around resource allocation, Features will be artifically weighted.
I'm being delibarately provocotive here. Many of us, myself included, are used to teams with Feature segmentation. For developing a software system of any complexity, it just makes sense - separate into feature based bounded contexts, and throw a team on each context.
I challenge myself to not default to that muscle memory way of team creation, and to be considerate to organizational structure when laying out goals.