As we think about audacious goals for next year and how to organize teams for success, we’re thinking about the skills required for team flow. If you’re familiar with Shape Up, you’re also familiar with the Hill Chart analogy of progress. You begin with a large space of optionality; you start by figuring things out, discovering unknowns, and feeling around the edges. Then the work transitions into getting things done, putting the pieces into place, and getting everything to work together.
These patterns are present in almost all creative work. Figuring things out phase requires the skills to tame the optionality beast. It’s a skill we struggle with most and have to select for on a team.
Many companies make the mistake of thinking that having someone senior on the team would aid this. In my decades of experience interviewing engineers, I found that seniority rarely directly correlates with the ability to operate in a large space of optionality. People with 10+ years of experience, who can deeply discuss various complex algorithms, time and space complexity, have deep experience with the technology we’re using, and have developed very sophisticated software in the past, got stuck at trivial tasks with too many possibilities. Asking them to create a simple reverse proxy server using a language of their choice and without using an existing library, forced them into rabbit holes, unable to evaluate tradeoffs and make rapid decisions. They didn’t get stuck during algorithm implementation; it was much earlier, during the uphill discovery phase.
Many engineers, regardless of seniority, spend most of their careers operating within narrow guardrails. This is especially prevalent in large companies, where engineers rarely build the muscle required to produce in environments with little or no constraints. But to run productive autonomous product teams, you have to select and train for this skill. You’ll need at least one person on each team who can help the team go uphill and operate in a large space of optionality.
Can you share anything you've learned with regards to how to train people up on this skill or spot those who have it so that you can add them to the team? I agree with what you've written here - this isn't taught in school and dedicating years of your life to building software (becoming 'senior') doesn't automatically teach you these skills.