The Software Architecture Chronicles

This post is the first of a series of posts about Software Architecture. In them, I write about what I’ve learned about Software Architecture, how I think of it, and how I use that knowledge.

I am calling these series of posts “The Software Architecture Chronicles”, not because I think of myself as a great writer but because I find the name rather corny in a funny way!😀

In this first post, I am going to talk about why I am writing this series of posts and what’s to come.

The importance of knowing our history

Those who fail to learn History are doomed to repeat it.

George Santayana, The Life of Reason, 1905

I find it important to learn from history, it can teach us a lot. At a personal level, we (eventually & hopefully) learn from our personal mistakes. As a country, history helps model our culture, helps create an idea of a group, an idea of ’us’, a national identity. It also helps us learn from our ancestor mistakes, like trusting people with very weird ideas, think WW2 …

For us, as developers, it helps us build on our predecessor developers knowledge. It helps us learn from their mistakes, from their paths, from their experiences: their knowledge. It helps us achieve higher grounds by “standing on the shoulders of giants“!

In my path to be a better developer, I’ve read a lot of articles, watched a lot of conference talks, and read plenty of books. I do my best to stand on the shoulders of giants!

One thing that puzzles me though, is that there are many opinions based on opinions based on opinions… And this works like the “Chinese whispering game”, where we end up with a distorted idea of what a paper, article or book really states.

So I set out to scavenge the internet for the original papers, articles and books that state the concepts that I find of most importance for my work, and reason about them by myself.

These posts are the result of this reasoning, as I try to understand how these concepts came to be, in a somewhat chronological way.

Writing these posts forced me to read and reason a lot about all these subjects and helped me understand the techniques used today in software development and I hope these posts are helpful to more fellow developers.

Nevertheless, if you read something you don’t understand or disagree with, please let me know, I am perfectly open to discussing these subjects, learn from other people and change my point of view when I’m proven wrong.

Posts in The Software Architecture Chronicles

  1. The Software Architecture Chronicles
  2. Software Architecture Premises
  3. Programming Language evolution
  4. Architectural Styles vs. Architectural Patterns vs. Design Patterns
  5. Monolithic Architecture
  6. Layered Architecture
  7. MVC and its alternatives
    1. 1979 – Model-View-Controller
    2. 1987/2000 – PAC / Hierarchical Model-View-Controller
    3. 1996 – Model-View-Presenter
    4. 1998 –”Model 1″ & “Model 2”
    5. 2005 – Model-View-ViewModel
    6. ???? – Model-View-Presenter-ViewModel
    7. 2008 – Resource-Method-Representation
    8. 2014 – Action-Domain-Responder
  8. EBI Architecture
  9. Packaging & namespacing
  10. Domain-Driven Design
  11. Ports & Adapters Architecture (aka Hexagonal Architecture)
  12. Onion Architecture
  13. Clean Architecture
  14. Event-Driven Architecture
  15. From CQS to CQRS
  16. Service Oriented Architecture (SOA)
  17. Explicit Architecture #01: DDD, Hexagonal, Onion, Clean, CQRS, … How I put it all together
  18. Explicit Architecture #02: More than concentric layers
  19. Explicit Architecture #03: Reflecting architecture and domain in code
  20. Explicit Architecture #04: Documenting the architecture
  21. Evolving a project: from MVP to P
  22. 4 + 1 Architecture view model
  23. Architecture quality attributes

Timeline

This is a rough timeline of software development evolution, as I perceive it after having read articles and books about all these subjects. I added links to where I found the date reference, and I put a “~” wherever I’m not very sure of the date, meaning “approximately”. We can also find a plethora of information about these things through the main Programming Paradigm page in Wikipedia.

I will talk about most of these subjects in this series of posts.

  • 1950s

    •   Non-structured Programming
    • ~1951 – Assembly
  • 1960s

    •   Structured Programming
    •   Layering: 1 tier with the UI, Business Logic and Data Storage
    • ~1958 – Algol
  • 1970s

    •   Procedural / Functional Programming
    • ~1970 – Pascal
    • ~1972 – C
    •   1979Model-View-Controller
  • 1980s

    •  Object Oriented Programming (first thoughts were in the late 1960s, though)
    •   Layering: 2 tier, the 1st tier with the UI, the 2nd tier with Business Logic and Data Storage
    • ~1980 – C++
    •   CORBA – Common Object Request Broker Architecture (though the first stable version was only out in 1991, the first usages were during the 1980s)
    • ~1986 – Erlang
    • ~1987 – Perl
    •   1987 – PAC aka Hierarchical Model-View-Controller
    •   1988LSP (~SOLID)
  • 1990s

    •   Layering: 3 tier, the 1st tier with the UI, the 2nd tier Business Logic (and the UI presentation logic in case of a browser as client), the 3rd tier with the Data Storage
    • ~1991 – Message Bus
    • ~1991 – Python
    •   1992Entity-Boundary-Interactor Architecture aka EBC aka EIC
    • ~1993 – Ruby
    • ~1995 – Delphi, Java, Javascript, PHP
    •   1996Model-View-Presenter
    •   1996OCP, ISP, DIP (~SOLID), REP, CRP, CCP, ADP
    •   1997 – SDP, SAP
    • ~1997 – Aspect Oriented Programming
    • ~1997 – Web Services
    • ~1997 ESB – Enterprise Service Bus (although the book that coined the term was published in 2004, the concept was already used before)
  • 2000s

    • 2002SRP (~SOLID)
    • 2003Domain-Driven Design
    • 2005Model-View-ViewModel
    • 2005Ports & Adapters Architecture aka Hexagonal Architecture
    • 2006? – CQRS & ES (Command Query Responsibility Segregation & Event Sourcing)
    • 2008 – Onion Architecture
    • 2009 Microservices (at Netflix)
  • 2010s

    • 2010Data-Context-Interaction Architecture 
    • 2012Clean Architecture
    • 2014 – C4 Model

Translations

Chinese, by Qinyusuain

63 thoughts on “The Software Architecture Chronicles

  1. Thank you very much for your hard work and for caring about sharing knowledge. I’m getting a lot of useful data from the software architecture chronicles

    Liked by 1 person

  2. Hey Herberto!
    A massive thank you for this incredible work. It has provided immense value to me and im inspired to give a talk in my company wrt your topics (ofcourse I will give credit to you) 🙂
    It appears you have stopped adding to the chronicles series since mid 2019 and post #20 onwards is pending.
    Do you intend on continuing this or have closed this chapter?

    Like

    1. You are most welcome.
      I would like to add more posts but I don’t have any time.
      In any case I think the most important things I wanted to write somewhere are in the last few posts.
      I learned a lot researching all this and I’m glad it has helped others. 🙂

      Like

  3. I’m currently at the 8º article, but I’m really enjoying everything that I read so far (including the comments).

    Hope that the next ones come soon.

    I’m reading this from Brazil btw.

    Like

  4. No joke, but when can I get this in dead tree form? This is a great series of articles that is love on my book shelf.

    A specific thanks to the references, as they are leading me to semi-replicate the research you’ve done.

    Like

  5. This is one of the best architectural blog posts I ever read. Solid gold for junior / medior AND senior developers! Congratulations!

    Like

  6. Ola Herberto
    I’m Fernando, Java Architect from Brazil. I really liked this post series on architecture, congratulations! I look forward to reading everyone and seeing the new posts. I would like to translate to portugues in my blog. Do you authorize me to republish them?
    Best Regards

    Like

  7. Thank you for such a great posts!

    Are there any changes to get “Explicit Architecture #03: Reflecting architecture and domain, in code” part finished?

    Like

  8. Hi Herberto, thank you for this awesome series of articles. Would you mind if I translate these articles into Chinese and introduce them to Chinese developers?

    Like

      1. Hi Herberto,
        First of all, please let me give an apology (later than never, haha!! ) you for re-pulishing and translating your posts to Vietnamese without your permission. But your series are owesome and I would like to ask is there any problem if I continue sharing your post (in Vietnamese) in my site? [😄]

        Like

    1. I’m currently working on part 18. I expected to have it finished by now, but life gets in the way of our plans… 🙂
      I think I will publish it somewhere in March, but it also depends on how far I want to go with the code. For example, Fadil (and others) made very interesting questions on post 17 (DDD, Hexagonal, Onion, Clean, CQRS, … How I put it all together), and I would love to give code examples for those questions.

      However, part 19 also has a big chunk done already, so that one will be a lot faster, after I finish part 18. 🙂

      Liked by 1 person

  9. I’m very excited about your posts. They give me the big picture about architecture cultural and are also the best series I’ve seen so far. Looking forward for your next post. ^^

    Like

Leave a comment