When I was getting my feet wet in software development, I remember a recurring debate that happened between myself and my mentor. At the time, we were in the business of custom software for small businesses (for those reading - you couldn’t see it, but my neck just twitched and my eyes rolled into the back of my head). We were trying to use these small projects to build a core of reusable software that would allow us to increase profits until we could turn it into a resellable product. Yes, we were smoking crack more or less. The problem we were constantly running into was:
- If you want code to be reusable, you have to take the time to plan and code it right.
- Nobody (and especially small businesses) wants to pay you to do that.
My mentor’s argument was that I was rushing the projects and in turn creating dreaded “spaghetti code”.
My argument was that he was taking waaay to long to “do it right” and we were losing money because clients wouldn’t pay for the work.
Under these circumstances, I was the one who found success. It wasn’t because I was the better programmer, though. In fact, he had much more sophistication in his design than I did. But when it came right down to it, I was the one who could deliver a product that worked, was on time, and within budget.
We had a mantra in the early days: Customers want their software good, fast, and cheap. They can pick two of the three, but can’t have all three. And naturally, almost every small business chose fast and cheap.
Now our company is in a much different position. We have a product and our customers don’t dictate HOW we develop. We get to do that now. And preparing for the long haul, we are definitely bringing the “good” back. Now we just have to decide if we want fast or cheap to go along with our “good”.

