Go wide, then refine

Focus on the big picture from the beginning and then refine the detail once you have a grasp of the high-level conceptually. Keeping iterating to build a wider picture as necessary.

When creating something, it is better to understand the picture - at a high level - instead of focusing on the thing you need to create immediately.

Suppose a species evolves in a limited environment, such as a cold pool of water. The species will naturally adapt and optimize to that environment. That species when exposed to more varied environments (e.g. jungles, forests, etc.) would take many more generations to adapt to the new environment, than if it had access to those environments from the beginning.

The analogy applies to designing any system. If you focus on a small part of it from the beginning, not noticing upcoming direction, then change is significantly harder.

Why

  • Software designed with the known future in mind will be adaptable to future change, it allows a team to see the overall picture and to design a system that can anticipate future change.
  • Lightly designing a system from the beginning allows you to peer into the future and see what you're going to need and what you known unknowns you will need to understand.
  • It allows other parts of the team or organisation to figure out conceptually what you need to iterate on before it is built.
  • The team will make better decisions because they know where they are going.