As developers, we have a tension that we almost always deal with, the tension between writing the best possible solution and the fastest possible solution. Usually we end up somewhere between them, sacrificing a bit of quality for speed. I’ve yet to hear of a developer that would say they sacrificed a bit of speed for quality–but isn’t that what we want to do?
For myself, I’ve always struggled with this balance. What we want is to continually improve quality and deliver features quickly and readily. Can we do both?
I think we can, but it still requires discipline. How many times have you been able to begin a project, full of hope in it’s future quality, only to find yourself skipping tests and throwing around bad naming practices just to get something out on time? I know that’s happend countless times for me.
So what discipline does it require? I think we can learn a bit from the construction industry. We often throw about the metaphor of a “foundation” to build upon. Usually we’re refering to the framework or other technologies–our app is the bricks and mortar, wood and drywall. But what you see with each step of building a house is that the “foundation” that is currently in place is allowed time to firm up and be solid before building on top if it. The slab exists and is completely hardened before you add your frame. Your frame is complete before you add drywall or a roof. Your drywall is complete before you paint. There’s plumbing and electric that has to be thrown in all along the way, and then there are finishing touches that need the entire structure to be “complete.”
For us, that means building up and firming up a data model before you allow it to be built on top of. As you build, it still may require small changes, but what we must recognize is that a small change threatens everything built on top of it. The more stable your foundation the more confident you’ll be in building on top of it.
So my idea here is that when you are heading toward quality, focus on firming. When you’re focused on delivering, build on top of what’s firm – if it’s not firm, push back and say “guys, this isn’t firm enough for us to be building features on yet. Let’s spend time letting it firm up.”