A set of robots read a book and build a car together.

An Analogy for Software Development

March 7, 2025
1
Sometimes, I have to explain software development to people who are not software developers. Over the years, I have come up with an analogy that explains what software development is like and its processes. I have successfully used it to explain software development to a 9-year-old kid, including advanced concepts like cybersecurity and so forth. I figure others might benefit…

Code Simplicity: The Fundamentals of Software is Now Free

May 16, 2022
7
About a year ago, a Twitter user tagged me and some other programming authors in a thread where they described the barriers to accessing computer programming books in their country. I’ve been made distantly aware of these problems before—there are many countries in the world where the cost of a book in USD could be a person’s entire weekly salary.…
monolith on the beach

What is a Monorepo, Really?

March 11, 2022
I have now worked in developer productivity organizations at a company with a very advanced mono-repo (Google) and a company with a very advanced multi-repo system (LinkedIn), and I have to tell you: most of the valuable properties that people associate with a mono-repo have nothing to do with how many source control repositories you have. In fact, what people…
Reasoning and Choice

Reasoning and Choice

August 7, 2020
3
One of the most important properties about any software system is the ability to understand what it is going to do without having to run it. This concept is usually referred to as the ability to “reason about the system.” Basically, you want to make statements about the structures, actions, and results of the system without having to see them…

The Definition of Simplicity

May 19, 2020
Many years ago, I wrote a blog post explaining what was wrong with computers, and essentially saying the problem was complexity. Several years after that, I published Code Simplicity, which was essentially a thesis describing how and why simplicity was the most important quality of software. Many years after that, I was sitting in a room of some of the…

Fires vs. Strategy

March 15, 2020
3
There’s a point that I’ve been making to engineers recently that I realized would be valuable if shared more widely. When you do engineering work, there are different types of tasks that get given to you. Some tasks are emergencies or short-term work. We sometimes call this “putting out fires,” especially when the work relates to handling something that is…

How to Learn to Program

October 9, 2018
3
One question that people ask me all the time is, “How do I become a programmer?” Or, “How do I learn to program?”…

How to be a Great Programmer: Awareness, Understanding, and Responsibility

December 20, 2017
9
There are three key factors to being or becoming a great programmer: awareness, understanding, and responsibility. I’ve talked a lot about the subject of understanding. Heck, I even named my most recent book Understanding Software. In particular, I’ve pointed out many times that the better you understand something, the better you will do it. However, there are two other factors…

Understanding Software

October 10, 2017
3
Hey everybody. I’ve published a new book! It’s called Understanding Software. The book contains all of the content that I’ve written on software development and working in teams since the publication of Code Simplicity, plus some entirely new content that’s never been published anywhere. In fact, it contains one of my favorite essays that I ever wrote from back in…

Kindness and Code

August 12, 2017
It is very easy to think of software development as being an entirely technical activity, where humans don’t really matter and everything is about the computer. However, the opposite is actually true. Software engineering is fundamentally a human discipline. Many of the mistakes made over the years in trying to fix software development have been made by focusing purely on…
1 2 3 9
Go toTop