Skip to main content

Reading List

Reading List

Platform Strategy - Gregor Hohpe

Building a second brain - Tiago Forte



Everybody matters - Bob Chapman, Raj Sisodia



Skunk Work - Ben R. Rich




Facilitating Software Architecture: Empowering Teams to Make Architectural Decisions - Andrew Harmel-Law



Arc42 by example - Gernot Starke & Ralf D. Müller




Residues - Barry O'Reilly



Strategic Monoliths and Microservices - Vaughn Vernon



User Story Mapping - Jef Patton



Value Stream Mapping - Karen Martin & Mike Osterling



Developer Hegemony - Erik Dietrich



Dare to Lead - Brene Brown



Building Medaillion Architectures - Piethein Strengholt


The Unicorn Project: A Novel about Developers, Digital Disruption, and Thriving in the Age of Data - Gene Kim

Thinking Fast and Slow - Daniel Kahneman



Leadership is Language - L. David Marquet



The DevOps Handbook - Gene Kim, Jez Humble, Patrick Debois, John Willis


The Phoenix Project - Gene Kim, Kevin Behr, George Spafford


Noise : A Flaw in Human Judgment - Daniel KahnemanOlivier Sibony, Cass R. Sunstein



Algorithms to live by - Brian Christian, Tom Griffiths 


Turn the ship around! - L. David Marquet

 



Beyond Software Architecture: Creating and Sustaining Winning Solutions - Luke Hohmann


Software architecture for Developers  - Simon Brown


Software architecture for busy developers - Stéphane Eyskens

Originals - Adam Grant



Design It! From Programmer to Software Architect - Michael Keeling



Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations - Nicole Forsgren, Jez Humble, Gene Kim


Tidy First - Kent Beck


The new one minute manager -  Ken Blanchard



Writing for busy readers -  Todd Rogers and Jessica Lasky-Fink



Just Enough Software Architecture: A Risk-Driven Approach - George Fairbanks



How to begin - Michael Stanier



Verbaal meesterschap - Remco Claassen



Cloud strategy - Gregor Hophe



A Philosophy of Software Design - John Ousterhout



Leaders eat last - Simon Sinek



Back to basics in leiderschap - Michel De Coster



Software Architecture Metrics - Christian Ciceri, Dave Farley, Neal Ford, Andrew Harmel-Law, Michael Keeling, Carola Lilienthal, João Rosa, Alexander von Zitzewitz, Rene Weiss, Eoin Woods



37 things One Architect Knows About IT Transformation - Gregor Hophe




The Infinite Game - Simon Sinek



The Advantage - Patrick Lencioni



Team Topologies

The Software Architect Elevator - Gregor Hohpe



Kubernetes Patterns



Software Engineering at Google




The 6 Types of Working Genius: A Better Way to Understand Your Gifts, Your Frustrations, and Your Team - Patrick Lencioni


Hit refresh - Satya Nadella



From monolith to microservices - Sam Newman




The Art of Agile Development - James Shore




The Motive - Patrick Lencioni


Creative Acts of Curious people - Sarah Stein Greenberg




Software Architecture - The hard parts


Five dysfunctions of a team - Patrick Lencioni




The ideal teamplayer - Patrick Lencioni



Think Again -  Adam Grant


Shape Up


Patterns of software -  Richard P. Gabriel

https://www.dreamsongs.com/Files/PatternsOfSoftware.pdf

De bijenherder - Rini Van Solingen



Tiny Habits - BJ Fogg



Hiring Engineers -  Marianne Belotti



Fundamentals of Software Architecture: An Engineering Approach 1st Edition - Mark Richards & Neal Ford



A seat at the table - Mark Schwarz



Getting naked - Patrick Lencioni



Righting Software - Juval Lowy

Handson domain driven design with .NET Core - Alexey Zimarov



Radical Candor -  Kim Scott



The Coaching Habit - Michael Bungay Stanier



Mindset - Carol Dweck




Clean Architecture



Clean Coder



Clean Code



Software Engineers on their way to Pluto





Designing Reactive Systems - Hugh McKee




Data Structures Succintly Part 1 - Robert Horvick



From good to great





Release it! - Michael T. Nygard


Implementing Domain Driven Design - Vaughn Vernon




Domain Driven Design - Tackling complexity in the Heart of Software - Eric Evans


Designing Autonomous Teams and Services - Nick Tune & Scott Millett




Scrum and XP from the trenches - Henrik Kniberg




Project to Product - Mik Kersten


Enterprise Integration Patterns - Gregor Hohpe & Bobby Woolf


Popular posts from this blog

Podman– Command execution failed with exit code 125

After updating WSL on one of the developer machines, Podman failed to work. When we took a look through Podman Desktop, we noticed that Podman had stopped running and returned the following error message: Error: Command execution failed with exit code 125 Here are the steps we tried to fix the issue: We started by running podman info to get some extra details on what could be wrong: >podman info OS: windows/amd64 provider: wsl version: 5.3.1 Cannot connect to Podman. Please verify your connection to the Linux system using `podman system connection list`, or try `podman machine init` and `podman machine start` to manage a new Linux VM Error: unable to connect to Podman socket: failed to connect: dial tcp 127.0.0.1:2655: connectex: No connection could be made because the target machine actively refused it. That makes sense as the podman VM was not running. Let’s check the VM: >podman machine list NAME         ...

Cache stampede: when our cache turned against us

While investigating some performance issues, we ran into an ASP.NET Core API that cached a fairly expensive aggregation query for 60 seconds. Under normal load, that was fine: one request rebuilds the cache, everyone else reads from it. Under peak load, dozens of requests would arrive in that same expiry window, all see a cache miss, and all fire the same expensive query in parallel. The database didn't like that. That was the moment when our caching layer stopped helping and started hurting. A burst of requests comes in at the same time, all miss the cache, and all go hammer the database or the downstream API at once. That's a cache stampede . The cache was supposed to protect our backend, and for a few hundred milliseconds it did the opposite. Why this happens IMemoryCache.GetOrCreate (and its async sibling) looks like it protects you, but it doesn't add any locking on its own. Look at the naive version: public async Task<Report> GetReportAsync(string key) ...

A complex system designed from scratch never works

A few years ago, I worked as an architect on a big mainframe rewrite. I still count it as one of my failures. Not because the technology was wrong, but because I couldn't convince the management team to simplify the approach. Years later, the organization is still struggling to get the new system up and running. I left the project at the time, because I couldn't put my name behind an approach that would take very long and cost a lot of money without a working system to show for it along the way. Gall’s Law That memory keeps coming back to me, because it's a textbook case of Gall's Law playing out in real life. Gall's Law , from John Gall's Systemantics , states it plainly: A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works, and it cannot be patched to make it work. You have to start over with a simple system that works. What does that mean in practice,...