@0xlelouch_: Top 10 system design resources I still point working devs to: 1) Designing Data-Intensive Applications (Kleppmann) — re…
Summary
A Twitter thread listing the top 10 system design resources, including books, blogs, and frameworks, with a link to Martin Fowler's website for further reading.
View Cached Full Text
Cached at: 06/28/26, 10:05 AM
Top 10 system design resources I still point working devs to:
- Designing Data-Intensive Applications (Kleppmann) — real tradeoffs: logs vs DBs, consistency, stream processing.
- Software Architecture: The Hard Parts (Ford/Richards) — how to choose, not just patterns; good on modularity and coupling.
- Site Reliability Engineering (Google) — SLIs/SLOs, error budgets, incident response, capacity planning.
- System Design Interview (Alex Xu) — fast reps; good for sketching APIs, storage, caching, sharding under time pressure.
- Designing Distributed Systems (Brendan Burns) — Kubernetes patterns explained as general distributed system building blocks.
- AWS Well-Architected Framework — concrete checklists for reliability, security, cost; useful even if you run on-prem.
- Martin Fowler’s architecture articles (http://martinfowler.com) — bounded context, evolutionary architecture, integration patterns.
- High Scalability blog (http://highscalability.com) — teardown posts; learn why teams picked queues, caches, and DBs in prod.
- Jepsen analyses (http://jepsen.io) — teaches failure modes you only find at 3am: split brain, stale reads, bad retries.
- Practice project: build a mini SaaS and run it — REST+DB, add Redis cache, background jobs, metrics/tracing, load test, then break it with chaos/fault injection
martinfowler.com
Source: https://martinfowler.com/ Software development is a young profession, and we are still learning the techniques and building the tools to do it effectively. I’ve been involved in this activity for over three decades and in the last two I’ve been writing on this website about patterns and practices that make it easier to build useful software. The site began as a place to put my own writing, but I also use it to publish articles by my colleagues.
In 2000, I joinedThoughtworks, where my role is to learn about the techniques that we’ve learned to deliver software for our clients, and pass these techniques on to the wider software industry. As this site has developed into a respected platform on software development, I’ve edited and published articles by my colleagues, both Thoughtworkers and others, to help useful writing reach a wider audience.

photo: Christopher Ferguson
Martin Fowler
A website on building software effectively
If there’s a theme that runs through my work and writing on this site, it’s the interplay between the shift towards agile thinking and the technical patterns and practices that make agile software development practical. While specifics of technology change rapidly in our profession, fundamental practices and patterns are more stable. So writing about these allows me to have articles on this site that are several years old but still as relevant as when they were written.
As software becomes more critical to modern business, software needs to be able to react quickly to changes, allowing new features to be conceived, developed and put into production rapidly. The techniques ofagile software developmentbegan in the 1990s and became steadily more popular in the last decade. They focus on a flexible approach to planning, which allows software products to change direction as the users’ needs change and as product managers learn more about how to make their users effective. While widely accepted now, agile approaches are not easy, requiring significant skills for a team, but more importantly a culture of open collaboration both within the team and with a team’s partners.
This need to respond fluently to changes has an important impact upon thearchitectureof a software system. The software needs to be built in such a way that it is able to adapt to unexpected changes in features. One of the most important ways to do this is to write clear code, making it easy to understand what the program is supposed to do. This code should be divided into modules which allow developers to understand only the parts of the system they need to make a change. This production code should be supported with automated tests that can detect any errors made when making a change while providing examples of how internal structures are used. Large and complex software efforts may find themicroservicesarchitectural style helps teams deploy software with less entangling dependencies.
Creating software that has a good architecture isn’t something that can be done first time. Like good prose, it needs regular revisions as programmers learn more about what the product needs to do and how best to design the product to achieve its goals.Refactoringis an essential technique to allow a program to be changed safely. It consists of making small changes that don’t alter the observable behavior of the software. By combining lots of small changes, developers can revise the software’s structure supporting significant modifications that weren’t planned when the system was first conceived.
Software that runs only on a developer’s machine isn’t providing value to the customers of the software. Traditionally releasing software has been a long and complicated process, one that hinders the need to evolve software quickly.Continuous Deliveryuses automation and collaborative workflows to remove this bottleneck, allowing teams to release software as often as the customers demand. For Continuous Delivery to be possible, we need to build in a solid foundation ofTesting, with a range of automated tests that can give us confidence that our changes haven’t introduced any bugs. This leads us to integrate testing into programming, which can act to improve our architecture.
Photostream
San Francisco
Data Management
There are many kinds of software out there, the kind I’m primarily engaged is Enterprise Applications. One of the enduring problems we need to tackle in this world isdata management. The aspects of data managment I’ve focused on here are how to migrate data stores as their applications respond to changing needs, coping with different contexts across a large enterprise, the role of NoSQL databases, and the broader issues of coping with data that is both Big and Messy.
Domain-Specific Languages
A common problem in complex software systems is how to capture complicated domain logic in a way that programmers can both easily manipulate and also easily communicate to domain experts.Domain-Specific Languages(DSLs) create a custom language for a particular problem, either with custom parsers or by conventions within a host language.
Books
I’ve written seven books on software development, including Refactoring, Patterns of Enterprise Application Architecture, and UML Distilled. I’m also the editor of a signature series for Addison-Wesley that includes five jolt award winners.
Conference Talks

I’m often asked to give talks at conferences, from which I’ve inferred that I’m a pretty good speaker - which is ironic since I really hate giving talks. You can form your own opinion of my talks by watching videos of some my conference talks.
Board Games

I’ve long been a fan of board games, I enjoy a game that fully occupies my mind, clearing out all the serious thoughts for a bit, while enjoying the company of good friends. Modern board games saw dramatic improvement in the 1990’s with the rise of Eurogames, and I expect many people would be surprised if they haven’t tried any of this new generation. I also appear regularly onHeavy Cardboard.
Tags
API design·agile·agile adoption·analysis patterns·application architecture·application integration·bad things·board games·build scripting·certification·collaboration·computer history·conference panels·conferences·continuous delivery·covid-19·data analytics·data mesh·database·design·dictionary·distributed computing magazine·diversions·diversity·documentation·domain driven design·domain specific language·domestic·encapsulation·enterprise architecture·estimation·event architectures·evolutionary design·experience reports·expositional architectures·extreme programming·front-end·gadgets·generative AI·ieeeSoftware·infodecks·internet culture·interviews·language feature·language workbench·lean·legacy modernization·legal·metrics·microservices·mobile·noSQL·object collaboration design·parser generators·photography·platforms·podcast·presentation technique·privacy·process theory·productivity·programming environments·programming style·project planning·recruiting·refactoring·refactoring boundary·requirements analysis·ruby·security·talk videos·team environment·team organization·technical debt·technical leadership·test categories·testing·thoughtworks·tools·travel·uml·version control·web development·web services·website·writing
2026·2025·2024·2023·2022·2021·2020·2019·2018·2017·2016·2015·2014·2013·2012·2011·2010·2009·2008·2007·2006·2005·2004·2003·2002·2001·2000·1999·1998·1997·1996
Recent Changes
If you’d like to be notified when I post new material, subscribe to myRSSfeed. I also post announcements of new material toFediverse (Mastodon),Bluesky,LinkedIn, andX (Twitter). I also have a page dedicated torecent changes.
Building Reliable Agentic AI Systems
Tue 16 Jun 2026 13:11 BST
One of the most interesting projects my colleagues have done with LLMs has been building a system with Bayer to allow pharmaceutical researchers to query decades of information about studies buried in PDF reports. describes its evolution from keyword-based search to an intelligent research assistant capable of answering complex questions and drafting regulatory documents.
Fragments: June 16
Tue 16 Jun 2026 08:44
enjoying programming with LLMs, four types of LLM conversation, the crevasse between AI enthusiasts and skeptics, AI companies get product/market fit, the need for decentralization
Fragments: June 2
Tue 02 Jun 2026 11:21
Dodgy metrics for AI usage, history of tech removing jobs, benchmarking closed and open models, LLMs multiply existing cruft, AI slop driving us crazy, I am the Global Interpreter Lock for agents
The VibeSec Reckoning
Wed 27 May 2026 10:03
Vibe coding has significantly accelerated software prototyping but AI agents frequently recommend insecure configurations, creating security problems.Gautam Koul, Lucian Moss, Neil Drew-Lopez, and Daberechi Ruth Edeokohshare their experience while building applications for Thoughtworks’s global marketing. They learned that to combat this we need to write a security context file to guide the AI, be cautious with AI permission requests, create a daily security intelligence feed, and provide builders with a secure-by-default harness and templates.
Bliki: Vibe Coding
Thu 21 May 2026 07:49
Vibe coding is building a software application by prompting an LLM, telling it what to build, trying it out, prompting for changes - but without looking at any of the code that the LLM generates. This technique can be used by people without any knowledge of programming. However the resulting software often shows problems with maintainability, correctness, and security - so is best used for disposable software written for a limited audience.
Maintainability sensors for coding agents
Tue 19 May 2026 12:38
In her recent article about harness engineering for coding agent users,Birgitta Böckelerlaid out a mental model for expanding a coding agent harness: a system of guides and sensors that increase the probability of good agent outputs and enable self-correction before issues reach human eyes. Birgitta has now started publishing an article where she walks thoughher experiences using sensorsto keep a codebase maintainable. This part looks at static analysis with basic code linting.
Similar Articles
@0xlelouch_: Top 10 resources to learn Kafka + event-driven systems (practical, for people shipping code): 1) Apache Kafka docs (htt…
A Twitter thread listing the top 10 practical resources for learning Apache Kafka and event-driven systems, including official documentation, books, courses, blogs, and hands-on projects.
@NikkiSiapno: 35 system design concepts developers should know: 1. Event-driven architecture ↳ https://lucode.co/event-driven-archite…
A Twitter thread listing 35 essential system design concepts with links to detailed explanations, aimed at helping developers learn and review key topics.
@Franc0Fernand0: If I had to learn system design fundamentals from scratch, I would read the following 16 curated articles (links below)…
A curated list of 16 articles recommended for learning system design fundamentals from scratch.
@tom_doerr: System design interview notes based on bestselling guides https://github.com/liquidslr/system-design-notes…
A GitHub repository containing comprehensive system design interview notes based on Alex Xu's bestselling books, covering topics like scaling, consistent hashing, and distributed systems.
@adxtyahq: Good list. I'd add: - Dataset Engineering - https://huyenchip.com/machine-learning-systems-design/toc.html… - Product E…
A tweet thread compiling essential resources for AI engineering, covering dataset engineering, evaluations, context engineering, agent memory, MCP, observability, inference optimization, and security.


