Categories
Software Architect

Start with a Walking Skeleton

One very useful strategy for implementing, verifying, and evolving an application architecture is to start with what Alistair Cockburn calls a Walking Skeleton. A Walking Skeleton is a minimal, end-to-end implementation of the system that links together all the main architectural components. Starting small, with a working system exercising all the communication paths, gives you confidence that you are heading in the right direction.

Once the skeleton is in place, it’s time to put it on a workout program. Bulk it up with full body workouts. This means implement incrementally, adding end-to-end functionality. The goal is to keep the system running, all the while growing the skeleton.

Making changes to an architecture is harder and more expensive the longer it has been around and the bigger it gets. We want to find mistakes early. This approach gives us a short feedback cycle, from which we can more quickly adapt and work iteratively as necessary to meet the business’ prioritized list of runtime-discernable quality attributes. Assumptions about the architecture are validated earlier. The architecture is more easily evolved because problems are found at an earlier stage when less has been invested in its implementation.

The bigger the system, the more important it is to use this strategy. In a small application, one developer can implement a feature from top to bottom relatively quickly, but this becomes impractical with larger systems. It is quite common to have multiple developers on a single team or even on multiple, possibly distributed teams involved in implementing end-to-end. Consequently, more coordination is necessary. And naturally, developers implement at a different pace. Some developers can accomplish a lot and in little time while others can spend a lot of time implementing very little. More difficult and time consuming efforts should be done earlier in the project.

Start with a Walking Skeleton, keep it running, and grow it incrementally.

'Coz sharing is caring
Categories
Software Architect

Prefer principles, axioms and analogies to opinion and taste

When creating your architecture you should explicitly use principles, axioms and analogies to guide the creation. This gives the architecture a number of benefits that are not present if you simply create by implicitly leveraging your experience, opinions and tastes.

Documenting your architecture will be easier. You can start by describing the principles that were followed. This is much easier than trying to communicate your opinions and experience. The principles will then provide a convenient handle for those tasked with understanding and implementing the architecture. It will also be invaluable for subsequent or inexperienced architects who need to work with the architecture.

An architecture with clear principles is an architecture that frees its architect from reviewing everything and being everywhere. It gives architects greater leverage and influence. You will not need to be an omniscient workaholic to ensure that others can consistently:

  • implement and adapt the architecture;
  • extend the architecture into related domains;
  • re-implement the architecture using newer technologies;
  • work out the detailed edge cases.

Disagreements about opinion and taste invariably turn into political arguments in which authority is used to win. However, disagreements where the foundation principles are clear provide a way for more reasoned discussion to occur without issues being personalised. It also allows the disagreements to be resolved without reference to the architect at all.

Principles and axioms also give an architecture consistency throughout its implementation and across time. Consistency is often a problem, especially in large systems that span multiple technologies and will exist for many years. Clear architectural principles allow those unfamiliar with a particular technology or component to reason about and more readily understand the unfamiliar technology.

'Coz sharing is caring