Nothing screams sexy like an ad for a C# developer job at a well-funded start-up. In fact, when Frank's recruiter presented the opportunity to him, Frank knew it would be a long shot. After all, he had no commercial software experience and had only limited Web development experience. But he did know .NET pretty well, so he figured it'd be worth a try. Maybe his skills could translate to a Web-based software company.

His first interview went surprisingly well. They asked a lot of "aptitude" questions, as they were firm believers that "experience can be gained and skills can be learned, but attitude never changes." Apparently, Frank showed good aptitude and was asked back for a second interview.

When Frank came back for round two, he was given the grand tour. It was everything start-up dreams were made of: posh decor, shiny new Macbooks everywhere, an air-hockey table, free catered meals and Aeron chairs as far as the eye could see. After the interview, his future boss Derrick made Frank an offer he couldn't refuse.

Frank's first day consisted mostly of introductions. When he finally made it back to his desk, he couldn't help but wonder about some things. Things like, why would a Web-based software company with 20 employees have only three developers on staff? And why would two of those developers be part-time interns?

The more he thought about it, the more he worried. Frank counted four different program managers. What tasks at the small company could possibly keep the New Product Introduction Manager or Geospatial Systems Program Manager busy all day?

"Did the company really need 10 'manager' level positions?" Frank asked himself. "Shouldn't some of these people have software backgrounds?" But Frank shrugged his concerns off, reasoning that this was the type of team needed to build a successful start-up.

Wait … What?

Once Frank finally settled into his comfy Aeron chair and fired up his dual-monitor workstation, he was ready to learn the code. This, he figured, is where it would all come together and make sense. He heeded his fellow developers' warning that things "were a little beta-ish" and dove right in. After all of two minutes, he wanted to jump back out.

The pages were riddled with race conditions and generally only supported one request at a time. The developers didn't seem to know the difference between Cache, ViewState and Session objects, so they just used all three simultaneously to "make things work." As for the"helper functions" -- they were perhaps the most unique take on .NET coding Frank had ever seen. In one baffling case, the developers created their own areValuesDifferent method to act as a wrapper for object.Equals():

public static bool areValuesDifferent(object val1, object val2)
{
    bool diff = false;

    if (val1 == null)
    {
	if (val2 != null) diff = true;
    }
    else
    {
	if (val2 == null)
	    diff = true;
	else
	{
	    if (val1.GetType().FullName.CompareTo("System.String") == 0)
	    {
		if (((string)val1).CompareTo((string)val2) != 0)
		    diff = true;
	    }

	    if (val1.GetType().FullName.CompareTo("System.DateTime") == 0)
	    {
		if (((DateTime)val1).CompareTo((DateTime)val2) != 0)
		    diff = true;
	    }

	    if (val1.GetType().FullName.CompareTo("System.Int64") == 0)
	    {
		if (((long)val1).CompareTo((long)val2) != 0)
		    diff = true;
	    }


	    if (val1.GetType().FullName.CompareTo("System.Double") == 0)
	    {
		if (((double)val1).CompareTo((double)val2) != 0)
		    diff = true;
	    }
	}
    }

    return diff;
}

As the lead developer later told Frank,"Well, this way, it only checks the value."

Frank took a few minutes to explain the whole concept of "virtual" methods and how Equals() does exactly the same thing. His colleague shrugged his shoulders and replied, "Hmm, I guess that would work, too."

The really good news came later that day, when Frank learned that the company would be hiring some new intern developers. Well, not just any interns, only the "most aptitudinal" that money could buy.


A Winning Aptitude was originally published in Alex's DevDisasters column in the April, 2009 issue of Visual Studio Magazine. VSM is a free magazine for software architects, senior developers and development managers that includes practical, proven, unbiased how-to articles readers can put to use immediately.

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