When I started at my previous job, we were small-time. Sites were ASP or (horrors) ColdFusion talking to an Access database, and even that was only for fancy clients who wanted a record of the Contact Us form submissions from their site. We got a little bigger and a little better and we started rolling out small tools to manage pieces of sites (typically press releases or job postings). Again, ASP talking to Access. Like Mike Mulligan and his steam shovel, the more we worked, the better we got and then, like Mike, we dug ourselves into trouble. We built a site for a client with enough web traffic that Access couldn't keep up (hard to imagine, I know).

Enter SQL Server. We tried to keep up the pretense this expensive piece of software was a one-time thing, but success here bred more work and attracted more clients who could justify the expense of a machine and a SQL Server web connector license or whatever the hell it's called. This left reusable bits of code all over, but we didn't have that many clients who needed their own server. We sucked it up and added a shared SQL Server for mid-sized clients so we could keep using the same code. At this point, some of the most inventive work being done in development was justifying why a new site wouldn't work with Access. It wasn't long before that second shared SQL Server came on line. Our codebase was driving our hardware and platform decisions.

This ossifies a company: if you can't take on jobs smaller than six figures because you can't hide the software licensing costs, you lose out on smaller jobs. That doesn't look like a problem to a company in this state because they've developed a mindset that says, "We only work on projects that are worthy of our time and platform" (at The Daily WTF, this would be called "enterprise-y"). There was no reason we couldn't have put MySQL or Postgres on Windows and gotten 90-100% of the same performance for free.  Small projects don't add a lot to cash flow, but they can be portfolio pieces, they can turn into bigger jobs, they can create connections that lead to bigger jobs. If they do none of those things, they do wonders for development teams. They're calisthenics. Clients with small budgets don't have small plans; they want everything the guy at the next table is having, they just don't want to pay his tab. "Do more with less" was the derisive slogan of the final season of The Wire; when it comes down from management, it is worthless. But when it's baked into a (well-managed) project, it can force developers to step back and figure out how they can recreate the code they've been cutting and pasting in a smaller space. That's the kind of challenge that not only keeps developers learning, but keeps them interested and in fighting trim.