Home - Programming - Priorities

A very smart man that I really respect and look up to is Art von Waldburg. He was my boss and the company owner of Panoramic Software in Larkspur. He made running a software company look easy, but I believe it's because he tended to attract rock star analysts and programmers that worked well together. He's wicked smart and has a personality you can't help but like.

Art had an interesting saying that sums up a lot of what happens when you are dealing with feature requests. It went something like this, while holding up three fingers: "You can have it fast, you can have it cheap, you can have it good. Pick one." He would also say, "You want it bad, you get it bad, and the worse you want it, the worse you'll get it." Now, those are the oversimplified versions. In actuality, what he was really saying was, good software takes time and costs money. You can still make good software quickly but unless you want the effort to cost you a lot of money, you probably have to scale back on features. It's a balancing act.

But if you're running a software development company, there are a couple more things to consider. One is the availability of resources when choosing a platform. Even if you're already a Delphi shop, for instance, it would be insane, in the current industry state, to start a new major project with Delphi. I'm not talking about the ease of development, quality of the tools, or feature set; I'm referring to the problem of finding quality Delphi programmers. Anyone with any real skills left Delphi a long time ago for .NET, Java, Javascript, or any of the dozen or so other languages with far more market share than Delphi. Go, Haskell, and F are way cool, and yet they have very little market share, so qualified resources are few and typically expensive.

Along with market share, development environments should also be selected based on testing and automation support. By that I mean test driven design and unit testing frameworks, build automation, and test automation. Javascript had a really weird start and it's still shedding the warts that cropped up early on, but it has a fantastic array of libraries, development tools, and even test automation tools. Java has been around for a long time and likewise has an amazing array of test automation tools. Going back to Delphi, it has DUnit and some mocking tools, but nothing like what you find if you go open source.

You need to find testers that understand test automation and either know how to work with tools like Protractor or are at least unafraid to learn. Nowadays testers rarely do manual testing, except to find edge cases. They write scripts and use tools that can do more testing in seconds than an entire team could do all day.

And lastly, for large teams, you need a core group that serve as the principles on the project. The rock stars. The people that can lead by example. The people that set up the continuous integration stack, that define the programming best practices, that set down the rules for the in-house proprietary framework and police them, that create and populate the documentation repository, etc. The ones that other developers will attempt to match. How do you get that core group if it's a new organization? By hiring and firing until you have 3 or 4 people that are those core individuals.

Now it probably sounds like I got off track, but stay with me. Quality people are key to implementing quality procedures, and those are key to building a quality product rapidly and with minimal costs. My point being this: by focusing on quality in all areas outside the software, you make it less expensive in time and money to create quality software. Therefore, your top priority should be production quality. The rest will work itself out.

Todd Grigsby