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
- The Software Architecture Chronicles
- Software Architecture Premises
- Programming Language evolution
- Architectural Styles vs. Architectural Patterns vs. Design Patterns
- Monolithic Architecture
- Layered Architecture
- MVC and its alternatives
- EBI Architecture
- Packaging & namespacing
- Domain-Driven Design
- Ports & Adapters Architecture (aka Hexagonal Architecture)
- Onion Architecture
- Clean Architecture
- Event-Driven Architecture
- From CQS to CQRS
- Service Oriented Architecture (SOA)
- Explicit Architecture #01: DDD, Hexagonal, Onion, Clean, CQRS, … How I put it all together
- Explicit Architecture #02: More than concentric layers
- Explicit Architecture #03: Reflecting architecture and domain in code
- Explicit Architecture #04: Documenting the architecture
- Evolving a project: from MVP to P
- 4 + 1 Architecture view model
- Architecture quality attributes
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.
- Non-structured Programming
- ~1951 – Assembly
- Structured Programming
- Layering: 1 tier with the UI, Business Logic and Data Storage
- ~1958 – Algol
- Procedural / Functional Programming
- ~1970 – Pascal
- ~1972 – C
- 1979 – Model-View-Controller
- 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
- 1988 – LSP (~SOLID)
- 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
- 1992 – Entity-Boundary-Interactor Architecture aka EBC aka EIC
- ~1993 – Ruby
- 1996 – Model-View-Presenter
- 1996 – OCP, 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)
Chinese, by Qinyusuain
63 thoughts on “The Software Architecture Chronicles”
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
LikeLiked by 1 person
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?
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. 🙂
https://en.wikipedia.org/wiki/George_Santayana Santayana is popularly known for aphorisms, such as “Those who cannot remember the past are condemned to repeat it”.
Yes, Santayana created that aphorism, but Churchill was the one to make that aphorism famous.
I think the internet is doomed to repeatedly misquoting people forever. Ironically, don’t think Churchill ever said what he is quoted as saying in this article. https://www.nationalchurchillmuseum.org/blog.html
Nice! Good find! I will fix the article.
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.
this is great , what i have looked for
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.
Linked to this awesome project from my post titled “The rise of the NRG stack: Node.js, React, GraphQL”
View at Medium.com
This is one of the best architectural blog posts I ever read. Solid gold for junior / medior AND senior developers! Congratulations!
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?
Sure, let me know when u publish them and i will link to them on my posts.
Looking forward to part 19, any idea on a timeline?
Thank you for such a great posts!
Are there any changes to get “Explicit Architecture #03: Reflecting architecture and domain, in code” part finished?
Hi, yes I have done a POC, I picked up the Symfony Demo and refactored it to fit my needs.
However, I didn’t have the time to write about what I did, why, etc.
Anyway, you can take a look here: https://github.com/hgraca/explicit-architecture-php
I’m not sure you will like it without any explanation, but anyway… 🙂
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?
Not at all, I feel flattered!
Let me know when you publish them and I will add a link on my posts. 🙂
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? [😄]
No worries man! It’s nice to see that ppl appreciate my writings. 🙂
I was in Vietnam 2y ago btw. Beautiful country, great food, super nice people! 🙂
LikeLiked by 1 person
Ahah! Thank you! Hope to see more interesting posts from you! We need improve a lot of things to catch up the world, btw 🙂
Your blog is a great place to embrace with architectural patterns and explore in details having a general understanding and implications from previous posts (up to 16). Thank you a lot for your effort and time.
Your welcome 🙂
What is the timeline for parts 18-21?
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. 🙂
LikeLiked by 1 person
Thanks for the hard work. I’m looking forward to the rest of the series.
LikeLiked by 1 person
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. ^^