Monday, February 21, 2005

Project postmortem

As my project reached 1.0 milestone I decided to run a postmortem. This blog post contains some parts of the lengthy postmortem document I actually wrote. I excluded project details/conclusions to protect my IP (so to say ;-)) from potential competitors but kept sections which casual reader may find useful.

Btw, if you're interested in postmortems in general, here are some links I found myself useful:
And a couple of seemingly interesting books (haven't had a chance to read them
I'm still not sure whether I should have published this, but I'm driven mainly by curiosity - we'll see if this will lead to anything.

So, let's end with the foreword, here it goes.



List of known problems

Overall, there were a few bugs discovered during and after the deployment. Partly this is because the system is new, small, freshly developed and thus completely understood. Partly (hope so) because I adhered to test-heavy development process.
  • Database connection stuck. This was most severe one: site was dysfunctional for several days before I noticed the problem. Luckily, quick fix was trivial - just have to restart an AppServer. The problem was with SQLObject's handling of db connections - if the db was restarted any further attempts to call a db operation lead to OperationalError exception. Unfortunately, I didn't (yet) find a solution to fix the root cause.
  • HTML mangling in XSL transformations. Another problem (kind of annoyance, really) is related to two-step XSL transformation algorithm employed while rendering web pages. Second step was folding a pair of empty tags into single empty one, e.g. <p> <p> was folded into <p/>. This turned to be a big problem for some HTML tags as it caused the page to rendered incorrectly. The problematic tags I had to "fix" were TEXTAREA, TABLE, TD. I failed to fix the
    root cause again, and ended with inserting non-breakable space symbol to prevent XSL for doing the fold.
That's it for a list of known problems.

What went right

Here is a list of thing that I think I done right or had the luck to have it right:
  • Development platform/tools. I was already a rather experienced Python programmer and had used Apache/WebKit in several projects before. It didn't reveal any bad surprises during development and I feel this was a solid choice. The only new library I used for this project was SQLObject to handle object's persistence task. While I had some minor problems and one major one with it certainly was a net win for me and saved considerable amount of time.
  • Software quality. There were very few bugs discovered during and after the deployment. I attribute this (partly) to a test-heavy development process: the unit-test ratio coverage was at constantly at about 95%.
  • Good architecture. The system is organized in a simple, solid and straightforward way, providing a good starting point for further evolution. All major interfaces with third-party code, such as db persistence, web application server, XML toolkits
    are properly abstracted. Of course, there are some skeletons buried here and there but overall I'm quite satisfied with it.
  • Project management tool. Following Joel advice, I decided on Excel as my project management tool. It worked out nice. Not that it went without any friction, but good enough and with minimal overhead. I explored some other alternatives, such as: Microsoft Project, plain-text file with outline mode (in Vim) or some Palm-based project tool. But in retrospection, Excel seems like a right choice.
  • Project management process. Being a business head / programming team in a single person meant I could judge very accurately what should be done next. In previous projects, lacking some important details from business context, we (a development team) often found ourselves spent a lot of time and efforts on things that were not,
    strictly speaking, very important or sometimes even needed at all. The ability to guide development from the business perspective was very satisfying. I didn't understood this at first but in the end really appreciated it. The trick is to not getting charmed by technical problems but to concentrate on users and their needs.
  • Hosting provider. Being a web-project newbie, I had to figure out things like hosting, domain name registrations, etc. Luckily, my choice of hosting provider was solid and I have no problems with it.
  • Credit card processing. Certainly it made little sense to shot for a full card-processing routing on-site so I had to select a third-party vendor that would do this for me. I selected 2CheckOut and it was OK for me. At least, it had successfully processed a number of sales for me with relatively easy setup.

What went wrong

  • Business opportunity evaluation. It's quite possible that I shouldn't blame my lack of marketing skills for too much. There is a valid chance that the potential market is so small that no amount of marketing efforts would lead to a meaningful results. I had to think on project's feasibility harder.
  • Grossly overengineered solution. An awful lot of time (initially) was spent on things I didn't really need (yes, that YAGNI again). A remarkable example been a sophisticated, XSL-based, multilingual site generator, which produced all site's static pages in all supported languages. I ended up with a fully dynamic site and moreover, uni-language. Hence the effort was an (almost) complete waste of time. In a retrospect, I could have reduced dev time in about 5 times and still deliver a functional solution.
  • Marketing strategy. Well, I probably should say it was absent. Mind you, I have an idea but after it failed to bring expected results I
    felt short.
  • Site design. Being a one-man project and lacking good design skills I ended up with a poorly-designed (even for my taste) site. Moreover, without proficiency in web frontpage technologies (like CSS) countless number of times I found myself in a situation where I knew what I'd like the page to look like but don't know how to implement this.
  • Credit card processing. I did mention this in a what went right section and now I mention it here. While 2CheckOut worked OK for me it is not that great choice for several reasons, esp. compared with another one, like iKobo (which I didn't know about at the time). The weak points of 2CheckOut for me were: up-front setup fee, relatively big per-transaction fee and very cumbersome and expensive way to transfer money from 2CheckOut account if you're outside USA/Canada (like me).
That's it.

While I intended to list at least ten things I don't know what else should I mention. The above items were a real problems and other difficulties I had are minor in comparison.

3 Comments:

Blogger Dream Builder said...

Great blog here! I'm definitely going to bookmark you! I have a email leads site. It pretty much covers email leads related stuff.

Come and check it out if you get time :-)

2:06 AM  
Blogger Serg said...

I like your blog about design free site web, make sure to check design free site web web site out as well!

9:10 AM  
Blogger Lavfresh said...

Looking forward to reading more great info on your blog, I added you to my favorites and will be checking back often.

My site is about web hosting web space

If you have an interest in web hosting web space I would love to hear what you think of my site.

8:27 PM  

Post a Comment

<< Home