The Third Law of Software Design
So now we know that there is more future time than present time and that software will change as time goes on. Our next law is, once again, axiomatic, and needs no derivation: It is impossible to...
View ArticleThe Fourth Law of Software Design: Complexity vs. Ease of Maintenance
Okay, so if we never change our software, we can entirely avoid defects. But change is inevitable! Particularly if we’re going to add new features. And after all, one of our goals was to make software...
View ArticleIf It Ain’t Broken…
Okay, so remember our third law? (You can’t break things if you don’t change them.) Well, that has a very important related rule, that every engineer on Earth knows, but sometimes forgets: Never “fix”...
View ArticleInstant Gratification = Instant Failure
The broadest problem that I see in the software industry is that companies are unwilling to engage in strategies that only show results in the long term. Or, more specifically, that organizations are...
View ArticleTruncated Posts in RSS?
Hey everybody. So, some of my posts are rather long, and so I truncate them with a (Read More…) link that takes you to the full post. That link also shows up in the RSS, as a (more…) link. For the...
View ArticleComplexity and the Wrong Solution
Often, if something is getting very complex, that means that there is an error somewhere far below the level that things are getting complex on. For example, it’s very difficult to make a car move if...
View ArticleSpecific Solutions
So, I’m a huge Kyle XY fan, and I was entertaining myself this morning by watching the various “behind the scenes” clips that they have on the website. Of course, before each clip was an ad–the same...
View ArticleThe Never-Shipping Product
When you work as a professional programmer, you almost always know somebody (or are somebody) who’s going through one of the most common development horror stories in the book: “We started working on...
View ArticleFOSSCoach 2008
If you’re going to be in Portland, Oregon or attending OSCON and you want to hear me talk, I’ve proposed a session for FOSSCoach called Code Simplicity: Software Design In Open Source Projects....
View ArticleUnforseeable Consequences: Why We Have Principles
One of the most important things to know about any kind of engineering is: There are some things about the future that you do not know. Obviously it’d be ideal if we were all-knowing and could...
View ArticleCreating Complexity: Lock-In To Bad Technologies
In The Never-Shipping Product, I mentioned seven ways to add complexity, and one of them was “Lock-In To Bad Technologies.” But what’s a “bad” technology? Is it all just based on opinion? Should we...
View ArticleWhat Is A Bug?
Okay, most programmers know the story—way back when, somebody found an actual insect inside a computer that was causing a problem. (Actually, apparently engineers have been calling problems “bugs”...
View ArticleThe Source of Bugs
Bugs most commonly come from somebody’s failure to reduce complexity. Less commonly, they come from the programmer’s misunderstanding of something that was actually simple. Other than typos, I’m...
View ArticleTalking at OSCON
I’m going to be talking at FOSSCoach, a free series of lectures at OSCON. You don’t need a session pass to attend, but you do need to register (for free). I’ll be talking on Thursday, July 24, at...
View ArticleSlides From My Talk
So, I just had my talk, Code Simplicity: Software Design In Open Source Projects at OSCON 2008. It went really well! Here’s the slides from my talk (also available in PDF Format). -Max Comments: 0Code...
View ArticleSane Software Design
I have come up with an analogy that should make the basic principles of software design understandable to everybody. The great thing about this analogy is that it covers basically everything there is...
View ArticleDesign From The Start
I don’t know if this has become clear to everybody yet, but you really need to design from the start. You need to be working on simplicity and the other Laws of Software Design from the very beginning...
View ArticleDesigning for Performance, and the Future of Computing
So, you might have heard that Google released a web browser. One of the features of this web browser is its JavaScript engine, called v8, which is designed for performance. Designing for performance is...
View ArticleSuccess Comes From Execution, not Innovation
There’s a strange sort of social disease going around in technology circles today, and it all centers around this word “innovation.” Everybody wants to “innovate.” The news talks about “who’s being the...
View ArticleTop 10 Reasons To Work On Open Source (In a California Accent)
So, as a little digression from our normal content, I felt like writing a list of the top 10 reasons to work on open-source software…but being a born Californian, I felt I had to pay a little respect...
View Article