To understand is to perceive patterns.
-Isaiah Berlin
Architecting a good software solution is in many ways very much like the art of cooking a great meal. Just like a chef needs to have a broad knowledge of various ingredients that go into a meal, an architect needs to have a broad understanding of potential technologies and tools that he would need for a software solution. Just like a good chef masters the techniques of combining his raw ingredients into a delicious course, a good architect should know when and how to use and blend various software components to come up with elegant and efficient solutions. Just like a chef's work is confined by physical conditions and customer requirements, so is the work of a software architect. Both need the right kind of discipline and structure to cope with external constraints. So knowledge, experience, discipline, and structure are critical, but as any good chef or architect will tell you, the art of cooking or architecting requires something extra, and that is creativity. To put it simply in the words of the author John Updike:
Any activity becomes creative when the doer cares about doing it right, or better.
The book you are holding is a good example of the outcome of such creativity. I personally know the authors to be very experienced and knowledgeable on the topics they write—yet, it is a way they have chosen to distill their experience and know-how that make this book a very valuable resource for any software architect. Artfully transforming use-cases and requirements into recognizable patterns while discussing alternative architectures for implementing these patterns, this book provides you with an effective framework to handle the complexities of modern distributed applications.
Unlike cooking, where the basic raw ingredients do not change as much or as often over time, dealing with software architecture involves constant and frequent changes. New paradigms and methodologies for developing and delivering software solutions are constantly evolving. Innovative new technologies, some with overlapping capabilities, are introduced at an increasing pace into an already crowded marketplace. Making sense out of this dynamic and sometimes confusing domain, even when focusing only on Microsoft technologies, is quite a challenge. A great team of contributors was assembled to tackle the job. Together, they have produced an appealing guide by discussing a collection of common architectural patterns in software development and their implementation using Microsoft technologies.
This may seem like a book of "recipes" devised by a team of highly qualified "software chefs", but this is where again the analogy falls short: in the world of software, things are a more complex. In many cases, you'll find that you need to treat these recipes as the basis to build on. You will need to step into the role of the "chef" and start "cooking" your own solution by combining patterns or adjusting the suggested solutions to fit into your project's specific needs. Happy "software cooking"!
Ofer Ashkenazi
Senior Technical Product Manager
Microsoft