Wednesday, July 15, 2009

FogBugz 7 In-Depth Review From the Trenches

We've been running FogBugz 7 Beta for a while now, and with the official release today, can finally blog the experience. 

First, the bad. Our company bills by the hour, so tracking time is pretty important.  To avoid duplicating effort, we track time in FogBugz and bill using a report run directly from the database.  When keeping up with time using the 'Working On' menu, this works well, but if developers wait to put in time, or if it's not practical (ie when working on site), going back and adding time can be a real hassle.  FogBugz 7 has improved this somewhat by allowing you to search for a case when adding time - you used to have to remember the case number or go search.  Still, the whole UI for this just feels tacked on and not as well polished as the rest of the app.  A weekly timesheet would help, as would the ability to add cases in the timesheet UI.  Not a show-stopper, but something that still needs improvement IMO.


Where FogBugz really shines though is in managing the workflow of dealing with project management and bug tracking.  Built initially around Joel Spolsky's well thought out software project management philosophies, this app is well suited for Scrum, Lean, or other Agile methodologies.  Scrum in particular is made even easier with the addition of Milestones and true burn-down charts - in version 6, you had to re-purpose Areas for this.  But all of this is flexible enough that it should adapt to just about any methodology.  Below is my standard filter on a project - All cases, sorted by Milestone.  In this case, closed cases are shown, but you get the idea.  For larger projects, I filter down to a single sprint.


One small new feature I like is the 'case type' option when adding new cases.  These quick-entry cases used to default  to bugs (hence all the bugs in the shot above!), but now let you choose 'feature' from a little drop-down.  As in 6, FogBugz intelligently sets the Milestone or other properties based on where you click 'Add Case' from.  This comes together to make writing up a new list of feature requests blazingly fast.

Another big addition in 7 is subcases.  I think this has potential to vastly improve our workflow.  One of our constant headaches is the disparity between estimation and actual work.  We're generally fairly accurate overall, but often our clients don't want to see every single case we work on - they want to see a bill that looks similar to our original estimate.  For example, we may estimate 'Database design - 8h', but work 1 hour creating some tables, 2 hours on tweaking a data access layer, and then go back during the project refactoring the database.  In the end, we generally come close to the estimate, but it's scattered about 10-20 cases that the client doesn't necessarily see all fall under 'Database Design'.  By allowing us to add subcases, we can keep work in the same general tasks that we estimate.  One caveat here: estimates are summed  up, so adding a 1 hour task beneath a 4 hour one causes the 4 hour task to become 5 hours.  This is logical, but in our workflow we'd typically want it to subtract time from the original so that the entire tree remains estimated at 4 hours.  For now we'd have to do this manually. 


Finally, FogBugz 7 adds plugin support, with a full .NET API for writing plugins in Visual Studio.  Previous versions provided a REST-based API that allowed some interactions, but the new platform enables very rich customization. In addition, a plugin 'app store' gives you quick access to community plugins that you can very easliy download and install. Already, we have written several custom reports for views on tasks that we frequently need, and have several ideas on how we may use this to fit FogBugz more seamlessly into our environment.   The Plugin model has some of the best documentation I've seen for an API like this, including tons of full examples.  One of my favorite aspects is a Database Migrations framework which lets you version your plugin's database needs effortlessly.

However,the API reveals just how odd an app FogBugz is.  Written in a custom programming language developed by and for Fog Creek, FogBugz's code and API looks very much like classic ASP, despite now being a .NET app.   This roll-your own mentality peeks through in the API.  Fog Creek has developed their own MVC-like approach to the app, and this spills into the API model, where you are tasked with outputting raw strings of HTML and reading in request data.  Forget any RAD designer for plugins, or traditional Visual Studio tooling.  This is just you, pure HTML and HTTP GET/POSTS (with some important security restrictions).  The API does provide plenty of helper methods for building up your wad of HTML and keeping in line with the FogBugz UI.  Another area that works very much like classic ASP is the data access layer.  Instead of LINQ, Fog Creek has rolled their own query builder api for data access that is eerily reminds me of one we wrote for a project in .NET 1.0.  As a final nitpick - the naming convention is solidly stuck in 1982-style Hungarian Notation, with names like "CBug" and "sTitle".  Stepping back, though, it's hard to argue with success.  The API and app itself are very consistent, well documented, and work well. 

In the end, the awesomeness of it all makes up for it's quirkiness.  This the best project management app, made even better by some carefully thought out tweaks and all around faster performance. We've used FogBugz since version 5, and now when I see a company is using FogBugz, I can generally assume that they are going to have a good product and good customer service (FinalBuilder comes to mind).  I've tried several other project management tools and even considered building one, but in the end keep settling on FogBugz as the best available.   With a free 45 day trial, both on-demand and on-premise options, and very fair pricing, there's really no reason not to give it a try.

1 comment:

Vlad said...

One important thing - FogBugz doesn't run on anything rather than Windows with MS SQL Server. Which totally sucks and makes it unusable.