A Programmer's Dream

A Surprise for a Lead Software Engineer

Posted by Stephen Wrighton on 03 May 2007

The wife is sick this week - so I missed work Tuesday which postponed a meeting until this morning (well, technically, it was yesterday morning now, as it's well after midnight when I'm posting this). I was hoping that it would be a quick thing and she'd be back on her feet after having a day's rest - but she wasn't. So I had went down to the office for a quick meeting and after that took her to the hospital. Apparently she has a rather nasty kidney infection. She's on an antibiotic now, so hopefully she'll be feeling better real soon.

Anyways, my main project at work is now over. The deliverable was a number of requirement and design documents, with any coding we accomplished basically icing on the cake. What this means is that I get to spend a few more hours cleaning up my SDD and then it's off to another project.

Or a group of them at least.

One of my co-workers who's wife is about to have a child is lead Software Engineer for three ASP.Net projects. And I'm getting shoved over onto those projects. Which means that while he's out on 'maternity leave' that I get to do that lead Software Engineer stuff for those projects.

Yeah, go me.

Anyhow, the first of those projects has been running for a few years now, and has gone through three iterations on the underlying processing engine and two iterations on how it generates the end product. I was highly involved in the design and development of that processing engine - with the current thing being a series of dynamically created controls which query the user for information to generate the output, and all of this is happening on a single ASPX page.

It's a beautiful design and I'm quite fond of it.

Yet, there were certain requirements which made that solution viable for that product. First it was a Web Application not a Website. Secondly, it had a linear flow of data collection. Third, the user should always enter the application in the same way. And finally, the data is loosely coupled to the database.

What that last means is that there are no distinct data structures in the database that relate to a given page of the Web Application. All data is stored in the same data table, with the system not caring which page it came from.

Once the design was implemented, such a thought wasn't nearly as complicated as it sounds.

Anyways, the latest project's prototype (BlackBelt) is being built in a similar manner. More or less, a stripped down version of the first project's design.

Of course, while I was being briefed on BlackBelt, I pointed out the flaw in his thinking. Namely that the new project doesn't meet all the needs of a site which that design would be useful for. BlackBelt is not a linear data collection tool, it collects a certain set of data on a single page. That page would have no relation to any other page. Then the data structures in the database are tightly coupled to the pages (i.e. every page has a table or view which it directly reads/populates). Finally, the user may wish to enter directly to a single, specific page.

For example, if User A only uses Page 3, and that's the only page he ever uses, then he would want to create a link to Page 3. With the current engine, that is just not possible. There's only 1 page - and it requires PostBack information (the user selecting which page to view) for the application to know what controls to display. Basically, what that means is that for User A to get to Page 3 requires the user to hit two different pages of the application. That's not a good usability point right there.

Anyways, the point of my story is that as I was telling him that we shouldn't use my design for this application, his face kind of got that confused, deer-in-the-headlights look. Apparently, it kind of shocked him that I was telling him that it was a bad idea to use my design for this site, especially since I pushed him into using it's forerunners in the first two iterations of that first project.

Oh well, BlackBelt is just a prototype anyways. Created solely to derive requirements so we can build the real product.

Tweet me @kidananubix if you like this post.