Feature freeze

Some of us took the time last week to create something new. I chose to challenge myself by designing a system I had not built before and that I am not ready to share… quite yet. :) But I do want to share something about the design process in very general terms.

The lesson I learned: Feature freeze is a good thing. Know when to stop fixing.

Now early in the project, I had a pretty good idea of what pieces needed to go together but I did not have a very good idea of how to get there. I put down a quick design and while I was doing that I started to see problems..

Pieces did not fit together.

Some things were missing.

This was not going to work.

Time to start learning. I love learning.

So this is the good part. This is the fun part. This is where things go click. More on that in a moment.

I strive to make every day a boring day on my production servers. That doesn’t mean that they don’t do cool stuff. That doesn’t mean I don’t like my job or that I find it dull. I don’t. I just like to be beyond the point of being surprised, pleasantly or otherwise, when I am doing something for a client. That’s the goal.

Now technology moves too fast to be expert in everything. There will always be opportunities to learn something new, but my goal is to make the systems I run not scratch that itch for new learning. All that is to say that I have a craving for learning new stuff that is not and should not be filled by the day-to-day work I fit my learning projects around.

So there I am in the middle of doing a general something new. I have a general idea of how it goes, but there is a part missing or a process that I don’t know how to do. I know the next step, but not quite how to get there. Then I learn how, or I learn it is not going to work and I find a new way. My favorite learning is when I learn something new that brings two formerly unrelated pieces together in my mind and they fit together. That click is one of my favorite experiences in life.

After a while of this, things started to make a lot more sense. I had something that would mostly work. There were still some things to optimize, and some things to work out. More of the fun part. Here’s the problem: It gets addicting to learn stuff. If you’ve ever gone to Wikipedia and seen hours magically vanish, you know what I am talking about.

At some point though, it is time to stop fixing for a while. Freeze the design and commit to finish the thing, even though it is broken. Make version 1.0. There are a lot of things you can learn from seeing the finished system even with its flaws that you can’t see by looking at the parts.

I’m not saying leave it broken. Make version 2, and version 3, if you want but at some early point, freeze the specification, stop making changes, stop making fixes, go finish. Exercising the discipline to stop following new opportunities to improve my project, stop fixing, and stop learning (for a moment) meant the difference between having an imperfect but completed project and having a whole ton of good ideas.

So I stopped and did the drudge work. I finished. I made something imperfect. My reward? In addition to the problems I deliberately ignored, I see lots of little details that need fixing, which I would never have seen without finishing.