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.