This is a story of a crane (the endangered kind that live in marshes) named Masha. Masha liked programming, and figured she could make a living slinging code from the marsh. She worked at a couple of gigs and picked up C#, and was going to make it big by creating the next MyBeakSpace (or something like it ‘but better’.) Masha had a friend – a duck that went by the name of Dan. They met while working on some projects together at Noisy Reeds Software, where Dan was a project manager. Dan the Duck used to program, but was drawn more to the idea and business side of software development – so lately he’s been freelancing and looking to strike it big with one of his endeavors.
Masha remembered chatting with Dan about a web site proposal he had during happy hour one time, and seemed to recollect that it was actually pretty decent – worth trying out as trial project. So Masha met Dan, they agreed to some terms, started a small LLC, and figured they could have an Alpha version of their web client deployed in about a week.
Dan saw that the marsh residents needed a system where users can post questions and be notified when someone answers them. Then they can mark one answer as the answer, while other users vote answers up/down.
While listening to Dan and nursing a pint, Masha was thinking how this already entailed some things. The easy thing for them to do would be to create a drag and dropped UI with a designer and just add all the code to the ‘code behind’. Dan was launching into registration (“all the standard features: login, forgotten password, email verification”,) while Masha considered the alternative to the “disposable prototype” architecture, she preferred – a little framework that she cobbled together out of approaches and practices she read in books and pieced together from blogs.
Masha was sure that any useful application grew in functionality over time and figured that meant constant change in requirements. Masha believed that if the design couldn’t be re-factored safely to accommodate the new features, she’d be forced to ‘hack’ – write code without consideration for future needs, write code without good tests. Remembered having to do this, Masha quickly pulsed (and having to work with the product later!) with a ice cold hatred (she was a White crane.)
While Dan was winding down his quacking about how it’d be nice to ‘edit’ questions that you posted, Masha started framing his vision in terms of requirements -
“So Dan – I can register and start posting questions, then I can edit them and people can answer them. Everyone (registered, right?) can vote, but I can also ‘mark as answer’. That sound good for the first iteration?”
Dan quacked agreement and waddled off after another pitcher, Masha cracked open her laptop and started adding a Visual Studio solution. Visual Studio was her dev environment of choice, and she used TFS for the application life-cycle, source control and issue tracking. It was expensive, but usually worked as advertised.
Masha had built up a library of code she liked to bring from project to project, but this probably wouldn’t require much in the way of that, at least not initially. First she had to write some tests – they made her feel confident she was building the right thing, and the effort would pay off later in numerous ways.