Recently I wanted to catch up on technology in software architecture and I watched a couple of presentations, mostly from Goto conference and read some books and other materials. Now I would like to share some key points and references here, grouped by topics.
Continuous Delivery (CD)
Most influence on me was caused by the book «Continuous Delivery: Reliable Software Releases Through Build, Test, and Deployment Automation» by Jes Humble and David Farley.
Must have read: https://trunkbaseddevelopment.com
Sam Newman, Feature Branches and Toggles in a Post-GitHub World
Martin Fowler, Continuous Delivery
Ken Mugrage, It’s Not Continuous Delivery If You Can’t Deploy Right Now
I’ve started also to read: «The DevOPS Handbook: How to Create World-Class Agility, Reliability, and Security in Technology Organizations«.
Martin Fowler, Microservices (goto 2014)
Udi Dahan, Microservices and Rules Engines — a blast from the past
A very non-traditional look a micro-services (and software architecture in general):
Daniel Bryant, The Seven (More) Deadly Sins of Microservices
Martin Fowler, Introduction to NoSQL (gogo 2012)
Book: Next Generation Databases: NoSQL, NewSQL, and Big Data buy Guy Harrison
Introduction by Martin Fowler. When one says «event driven», usually one of the four patterns is meant:
- Event Notification
- Event-carried State Transfer
- Event Sourcing
- CQRS — Command Query Responsibility Segregation
Management & Philosophy
Robert «Uncle Bob» Martin, The Scribe’s Oath
Very interesting view on the state of our profession and a proposal of a Programmer’s Oath (2015-11-18):
In order to defend and preserve the honor of the profession of computer programmers, I Promise that, to the best of my ability and judgement:
- I will not produce harmful code.
- The code that I produce will always be my best work. I will not knowingly allow code that is defective either in behavior or structure to accumulate.
- I will produce, with each release, a quick, sure, and repeatable proof that every element of the code works as it should.
- I will make frequent, small, releases so that I do not impede the progress of others.
- I will fearlessly and relentlessly improve my creations at every opportunity. I will never degrade them.
- I will do all that I can to keep the productivity of myself, and others, as high as possible. I will do nothing that decreases that productivity.
- I will continuously ensure that others can cover for me, and that I can cover for them.
- I will produce estimates that are honest both in magnitude and precision. I will not make promises without certainty.
- I will never stop learning and improving my craft.
Bob Martin, The Future of Programming
In spite of the title, an excellent overview of a history of programming. For the future check the «Scribe’s Oath».
Dan North, How to Break the Rules
How we introduce new technologies and if they will work for you. Based on the ideas of Eli Goltratt, author of the Theory of Constraints and the book The Goal and Beyond the Goal. How to adopt a new technology? Answer these questions:
- What is the power of the technology?
- What limitation does the technology diminish?
- What rules enabled us to manage the limitation?
- What new rules will we need?
Dan North, Patterns of Effective Teams
Fred George, Managing Manager‐less Processes
Bob Martin, The Principles of Clean Architecture
Another bad term. Serverless does not mean «without a server», it just means, the server-side code is executed in a cloud as a function, e.g. AWS Lambda, instead of a server component managed and deployed by developers.
Peter Sbarski, Serverless: The Future of Software Architecture
Kevlin Henney, Code as Risk
Kevlin Henney, Seven Ineffective Code Habits of Many Programmers