The Enemy of the Great

March 16, 2011

They say that perfection is the enemy of the great and this is very true in software development. I used to believe that there was no such thing as the perfect design but now, after years of studying design, I think in many situations there is such a thing as a perfect design. The problem [...]

Read the full article →

You Are Awesome (Whatever You Call Yourself)!

February 17, 2011

I teach software design at some of the largest and most well-funded companies on the planet. My classes cover concepts and practices that most developers are not aware of. I do draw on other people’s work—lots of other people—but I synthesize it in new ways and give practical examples from my own experience as a [...]

Read the full article →

The TDD Zealot

January 12, 2011

On December 22, 2010 Mark Seemann published a blog post The TDD Apostate. Since then several friends and associates have sent me links to his post as if to say, “See, TDD is not all it is cracked up to be.” It is an excellent post and I agree with much of what the author [...]

Read the full article →

Under-Design and Over-Design

December 15, 2010

One of the biggest challenges I’ve had in my career as a developer was over-design. I used to just dive in and code on projects but soon afterwords I would end up stuck. To compensate I would spend a lot of time in the design phase only to discover later that most of my concerns [...]

Read the full article →

Aggregation verses Composition

November 10, 2010

When teaching software design skills I often get asked what the difference is between aggregation and composition. My answer: parking lots. Parking lots aggregate cars. A parking is still a parking lot even if there are no cars on it. It is a zero-to-many relationship and what is being aggregated is optional. A car is [...]

Read the full article →

First Seek to Understand

November 2, 2010

Sometimes I like to start a project by doing a few hours of design and then spend the rest of an iteration building a proof of concept. Oftentimes I can get a tremendous amount of functionality roughed out in a system very quickly and then spend the next several iterations making it supportable and maintainable. [...]

Read the full article →

Why Short Iterations Work

October 27, 2010

Software developers are infamous for not being good estimators. They say programmers have three timelines they work with: “done”, “not started” and “nearly finished”. It is easy to get caught up in the implementation details and not know exactly how long it will take to wrap up the task. Time boxing can be very helpful [...]

Read the full article →

Don’t Forget to Wash Your Hands

October 20, 2010

Although his life came to a tragic end I have a great admiration for Ignaz Semmelweis. You’ve probably never heard of him but most of us owe our lives to him. He was the Australian physician who helped popularize sterilization practices that surgeons use today. I can’t even imagine how he must have been ridiculed [...]

Read the full article →

Agile Prototyping on a Napkin

October 13, 2010

As an agile developer I still prototype but I tend to do it differently than in the past. I now make a distinction between a prototype and a proof-of-concept. A proof-of-concept is code that verifies an approach to solving a problem. I use a proof-of-concept as a sanity check to make sure I am taking [...]

Read the full article →

Prototyping Caveat

October 6, 2010

I am a big believer in prototyping. The quicker I can get functionality to my users the better. I often find that it helps my users visualize how to use the system I am building and often this will lead to useful feedback. However, I do have a caveat when building prototypes for customers—make sure [...]

Read the full article →