march-2011-whateverShawn's company needed a critical piece of software developed ASAP. The development team estimated six weeks of time to build it from scratch, but those in charge felt that was far too excessive. The devs had a track record of missing features--"Management NEVER told us we needed that feature!", botched rollouts--"What?! You told $newClient their site would go live on Monday? The product won't be ready until August and it's only February!", and going over-budget--"We developed it for SQL Server Express, I don't know why $phb bought us an enterprise Oracle instance."

Against the objections of everyone who did the actual work within the company, management partnered with the local University to have graduate students, most of whom had zero experience outside of academia, develop the new system for internship credit. Unpaid, of course. The plan then was that Shawn would spend "an hour or two" to polish the code up a bit and get it going in production.

After a full two semesters of development, Shawn finally received the code from the intern team and began preparing it for production. While attempting to get index.php to load without blowing up, he found this representative line that perfectly describes the overall code quality:

$closeDate = date( 'Y-m-d', strtotime(date("Y-m-d", strtotime($currentDate)) ));

After a week of analysis in which Shawn, unsurprisingly, found horrible coding standards, SQL injection vulnerabilities with every page, and features which were only vaguely similar to those outlined in the product requirements, he sent his estimate up the chain of command. It would take four to six weeks to fix the student-quality code enough to be production-worthy and deploy it.

The next day, he learned in a meeting that the company wouldn't afford the time to fix it. Instead, they would partner with the local University and hire a new team of unpaid interns to fix the system up.

[Advertisement] BuildMaster allows you to create a self-service release management platform that allows different teams to manage their applications. Explore how!