Friday, August 14, 2009

ZPlanner!

I've been using variants of Scrum for a number of years now. Now, the topic of what does or doesn't qualify as Scrum is worthy of a blog itself (and it'll get one, trust me), but this blog is about something else, namely toolsets.

I've tried the notecard things a few times, but I always end up coming back to software solutions to manage stories and tasks. And in most cases the companies I've worked for have not been willing to put up the coin to buy an 'enterprise' solution, such as VersionOne or ScrumWorks. Those look like nice, though in the case of VersionOne overly complex, products. Mostly I've just used XPlanner XPlanner as it's free, open source, and relatively easy to set up and use.

But XPlanner seems to be dead at this point. There doesn't seem to be an active development and the last release was almost two years ago. I honestly think it's works fairly well, but I do think it has a number of shortcomings

  • A story can't be turned into a task and a task can't be turned into a story. It's often the case that you initially defined something as a task, but you realize it's actually a story (or vice versa). You have to delete the original item and recreate it as the other type, you can't just *move* it.
  • Moving tasks amongst stories and stories amongst iterations uses a huge dropdown of all items within your product
  • There is no backlog. You can get around this by creating a fake iteration, but it's kind of kludgy
  • The way in which estimates/burndowns are tracked over time is confusing


There are a number of other things I dislike, but primiarly they all stem around the klutzy interface. Something that mimics more closely the ease with which one can move around notecards would be great.

A few months back my company was going through a re-org. I found out that there no long was a position for me and being a bit nervous about my future, decided I better start brushing up on my programming skills. After all I've been a manager now for a few years and after trying ot think of something useful to motivate me to start doing a bit of programming again, I decided I'd try writing my own version of XPlanner, fixing all the things I thought wrong in the original.

Since it was mainly started as a project to refresh my programming skills, I decided to try a few new technologies just to get familiar. At the same time I didn't want to just use a technology for the sake of using it. In the end, the stack I ended up with was:

  • Stripes
  • DisplayTag
  • JQuery/Ajax
  • Maven2
  • Hibernate Annotations
  • Mercurial
  • Cobertura
  • HSQL (for unit tests)

My goal at all times was to keep the code as simple as possible. To this end I did most of my work using TDD, even "breaking" sacred rules of coding if it seemed like the simplest solution. For example, both Stripe Actions and Hibernate domain objects use annotations. Since in my first case the action and the Hibernate object has the same field, why not have a single file with BOTH sets of annotations? My Stripes action and Hibernate file the same code? What?!? You can't do that!

Well, I did.

When my design started to get kludgy, only then did I split them out. Similarly, I didn't abstract much of anything to start with. I didn't think out my class design in the beginning. I just coded the simplest possible thing I could.

Using this appraoch, I actually had a working application in which I could enter stories and tasks (even with ramping up on 5-6 new technologies) in about 40 hours. Of course, I've subsequently spent quite a bit of time refactoring, rewriting tests, adding more functionality, and most of all futzing around rather hopelessly in Ajax (I suck at front-end development).

Still, I've probably put in a total of 150-200 hours of work and have learned quite a bit. And I actually have a "kind of" working application. It still needs a ton of work, but it's getting there.

Screen shot of app and Ajax-based drag-n-drop inteface:



See how few files there are. Very few config files either:



Cool dependency graph courtesy of Maven2 and Eclipse plugin:


Cobertura test coverage report:

7 comments:

Unknown said...

Cool where can I get the source!

Adam said...

You need unit tests for your spelling and grammar in these blog posts ;)

*hides*

On a serious note, that's pretty sweet. My employer has an internally-developed SCRUM web app that works fairly well. It mostly does everything we want, but it suffers from the usual "Frontend designed by SDEs" issues.

You should do a blog about that. Every single one of our UIs is different, there is no standard, and everything was designed by developers. You know that that means.

Funny thing, though... the one UI we had designed by a professional UI developer actually sucks. Bad. It reminds me of Windows XP with all the stupid-ass bells and whistles turned on. Horrible. Takes about 10 clicks to do anything useful.

Code Monkey said...

I can try cloning the Mercurial repository and shooting you a copy. Keep in mind at this point I'm still hoping to polish it up enough to make it into a commercial product--though it'll be very cheap. If I stop working on it actively though or it doesn't look like there's any market I'll toss it up on Sourceforge. I'm quite a ways off from either of those. It's still a long way from complete.

Code Monkey said...

@Silent Observer-
Fair point. In real life I'm a stickler for grammar and spelling. When it comes to online stuff though (blogs, comments, etc) I've almost ceased to care. I usually write each of the blogs in an hour, quickly skim, then post just to 'get shit out' rather than rewriting and rewriting until perfect. Maybe I'll revisit that decision though as you've embarassed me now. Happy?!?

Adam said...

@Code Monkey

I didn't mean to embarrass you, but I was secretly hoping for one of your rage-filled threats on my puny, foreign life. Those are always fun ;)

Unknown said...

Will be neat once it gets to the point where you can generate burndown charts for the ongoing ZPlanner development, using ZPlanner itself :) For someone who's been following ZPlanner dev status since day one, I'm still amazed at how feature-rich it already is, given the relatively-low number of man-hours that you've spent on it so far. Let us know when alpha-tester signup begins :)

Code Monkey said...

I don't know if I'd agree that I have a *ton* of functionality given the time I've now invested.

I would have agreed with you after the first 40-50 hours, where I actually had something working that allowed iterations, projects, and tasks be entered.

Progress substantially slowed once I started worrying about efactoring, abstracting some stuff, and trying to add more nuanced functionality. The biggest chunk of time I've "wasted" has been on Ajax/front-end stuff, which prior to this I'd never messed around with. In fact, prior this project my last encounter with updating a JSP was back in 2002. I've avoided front-end stuff for most of my career...and it definitely shows.

I still think ZPlanner is relatively decent given the amount of time I've invested (again, my guess is 150-200 hrs), particularly in that it has a relatively decent set of unit tests and the core "architecture" (though that's a bit of a grand word in this case) is there.