Experience has taught us that creating an architecture for a system with a big design up-front is a bad idea as, usually, we don’t have all the necessary information to design the system at the very start. Even in moderate-sized systems, requirements tend to change significantly, often making the initial design unfit for purpose.
On the other hand, no up-front design can be just as bad. The code tends to become unmaintainable pretty quickly, and system qualities like performances, scalability, security, latency, etc. can be very difficult or impossible to retrofit.
In this talk Giovanni shows a different way to create a software architecture with just the right amount of design, which can be evolved (or changed) incrementally as the system grows and changes - by taking care of some important qualities of the system early in the design, and delaying the design of other aspects to the last responsible moment.