Sunday, December 28, 2008

2008-12-29 Sunday - Recommended Books for Enterprise Architecture

An email arrived today from someone in Australia, asking for recommendations on Enterprise Architecture books.

The topic is so broad that I am almost hesitant on where to begin. It seems likely that this is a person who is beginning their journey toward architect from the perspective of a software developer background - and wishes to develop a foundation of knowledge and expertise with a broader architectural perspective.

Security is itself such a deep and specialized topic that I will defer touching upon recommendations for that area of enteprise architecture [for now].

To be sure, this list is incomplete - but please recognize it is a first draft - and is subject to change as I have more time to reflect...

The first book that comes to mind, Martin Fowler's Patterns of Enterprise Application Architecture:

The practice of enterprise application development has benefited from the emergence of many new enabling technologies. Multi-tiered object-oriented platforms, such as Java and .NET, have become commonplace. These new tools and technologies are capable of building powerful applications, but they are not easily implemented. Common failures in enterprise applications often occur because their developers do not understand the architectural lessons that experienced object developers have learned.

Patterns of Enterprise Application Architecture is written in direct response to the stiff challenges that face enterprise application developers. The author, noted object-oriented designer Martin Fowler, noticed that despite changes in technology--from Smalltalk to CORBA to Java to .NET--the same basic design ideas can be adapted and applied to solve common problems. With the help of an expert group of contributors, Martin distills over forty recurring solutions into patterns. The result is an indispensable handbook of solutions that are applicable to any enterprise application platform.

This book is actually two books in one. The first section is a short tutorial on developing enterprise applications, which you can read from start to finish to understand the scope of the book's lessons. The next section, the bulk of the book, is a detailed reference to the patterns themselves. Each pattern provides usage and implementation information, as well as detailed code examples in Java or C#. The entire book is also richly illustrated with UML diagrams to further explain the concepts.

Armed with this book, you will have the knowledge necessary to make important architectural decisions about building an enterprise application and the proven patterns for use when building them.

The topics covered include:

  • Dividing an enterprise application into layers

  • The major approaches to organizing business logic

  • An in-depth treatment of mapping between objects and relational databases

  • Using Model-View-Controller to organize a Web presentation

  • Handling concurrency for data that spans multiple transactions

  • Designing distributed object interfaces

  • The second book, Thomas Erl's Service-Oriented Architecture, Concepts, Technology, and Design:

    This is a comprehensive tutorial that teaches fundamental and advanced SOA design principles, supplemented with detailed case studies and technologies used to implement SOAs in the real world.

    Erl uses more than 125 case study examples and over 300 diagrams to illuminate the most important facets of building SOA platforms: goals, obstacles, concepts, technologies, standards, delivery strategies, and processes for analysis and design.

    My third recommended book, although a bite dated (2003) is Enterprise Integration Patterns, by Gregor Hohpe and Bobby Woolf:

    Utilizing years of practical experience, seasoned experts Gregor Hohpe and Bobby Woolf show how asynchronous messaging has proven to be the best strategy for enterprise integration success. However, building and deploying messaging solutions presents a number of problems for developers. Enterprise Integration Patterns provides an invaluable catalog of sixty-five patterns, with real-world solutions that demonstrate the formidable of messaging and help you to design effective messaging solutions for your enterprise.

    The Coad Series book, A Practical Guide to Enterprise Architecture, by James McGovern, Scott W. Ambler, Michael E. Stevens, James Linn, Vikas Sharan, Elias K. Jo, provides a nice concise general overview of many enterprise architecture topics:

    In my experience, many people that move into an architect role often let their technical skills lapse. Theory and strategy all too often consume the majority of the architect's time and attention. To maintain that technical edge, you need to keep your hands in the code and continue to maintain hands-on practical implementation knowledge.

    One practical book for this might be Mark D. Hansen's SOA Using Java Web Services:

    Or, the more recent, Service Oriented Architecture with Java: Using SOA and web services to build powerful Java applications, by Binildas A. Christudas:

    (not that I'm specifically suggesting Java as the only language - there are plenty of books on other programming languages that are just as applicable)

    To balance the above recommendations, I would throw in three additional must-reads:

    Scaling Software Agility: Best Practices for Large Enterprises, by Dean Leffingwell:

    Although the next recommended book may not appear to be relevant to the writer's inquiry - the concepts that are covered in Large-Scale C++ Software Design, by John Lakos, are so important to developing maintainable systems that I consider it an essential text.

    What architect can call their bookshelf complete without a solid book on algorithms?

    Introduction to Algorithms, by Thomas H. Cormen, is my preferred text:

    My final book recommendation for this list, although it has only recently been released (December 22, 2008), is Thomas Erl's newest book, SOA Design Patterns, which is also high on my own list of books to read next.

    The above is what I consider essential for the beginning of a solid foundation for an entperise architect. Beyond these initial stepping stones on the journey, there is the need to add a solid foundation in the areas of security, performance, and testing.

    Additional research topics for further study would include spending time developing expertise with the design of applications using:

    I've also assembled a short list of Cloud/Grid computing resources that may be of some interest.

    Update: 2008-12-30 Tuesday
    Martin Cooke and Vimal Bana contributed suggestions on a LinkedIn discussion of this topic that I thought were noteworthy.

    Martin noted the distinction between Enterprise Architecture and Solution Architecture:
    "Of course depends on what one means by 'enterprise architecture'. If it ('enterprise architecture') is the set of models required to support the development of IT Strategy in support of business strategy (as opposed to 'solution architecture' - the set of models needed to support the development of working solutions - in which case SOA, EAI, Data etc books are relevant) then I would recommend starting with an understanding of 'strategy' as understanding this ('strategy') gives purpose / defined outcomes / requirements to the 'enterprise architecture' activity."

    He also suggested a book, Strategy Maps: Converting Intangible Assets into Tangible Outcomes, by Robert S. Kaplan and David P. Norton:

    Vimal suggested Enterprise Architecture as Strategy, by
    Jeanne W. Ross, Peter weill, David C. Robertson