Archive for the ‘FogBugz’ Category

Case Dependencies

June 17th, 2011 by Rich Armstrong

For years, Fog Creek’s approach to developing products has been guided by a simple principle elucidated by a fella named Joel Spolsky:

Design, for my purposes, is about making tradeoffs.

The big trade-off we’re always making is between power and complexity. If you want to see the effect of blindly adding features, just open iTunes. (Don’t worry, we’ll wait.)

Many people who first open FogBugz and start using it very quickly come to two questions:

Question 1: How do I delete a case?

It’s not like in nine years of developing FogBugz, we didn’t have time to add a delete button. We just found that closing a case was good enough for 99.9% of eventualities. And solving that last 0.01% would add significant complexity. We can add deletion to satisfy some customers, but not without losing others. A trade-off.

People who need to actually excise cases from their database can do so. Even so, we have thousands and thousands of customers happily using FogBugz On Demand with no ability to excise data, and they never complain about it. We get a request to delete an inadvertently emailed credit card number from a case maybe once a month.

Lack of deletion might confuse you for the first 5 minutes, like the 5 minutes you spent looking for the Off switch on your first iPod. Steve Jobs didn’t include a note with every iPod:

BTW: there’s no Off switch. — luv steve

He knew you’d figure it out.

And those people, the ones who absolutely need the Off switch on their music player or else they can’t use it? Well, they found themselves on the wrong side of a design trade-off.

Question 2: How do I indicate that A needs to be done before B?

We have several good ways of indicating this in FogBugz. Milestones are the primary one. Parent-child relationships can do a pretty good job. The Project Backlog plugin is probably the most granular way we offer.

The venerable open source bug tracker, Bugzilla, though, offers blocking. Blocking seems handy. You can reflect in the system that

“I can’t do this until Jim delivers his logging library.”

It seems very reasonable (like having an Off switch on a music player). It’s the second thing many people think when they open FogBugz for the first time (including your correspondent, years ago).

In the software world, though, these kinds of true dependencies come up very rarely. Even in manufacturing, deciding that something is a dependency too early can be really inefficient. For instance, if you’re making espresso machines, you’re going to need a heating element. Is that a dependency? Yes. Is it blocking? Up to a point. There’s a lot of the espresso machine you can make while you wait for your heating elements to clear customs. When they arrive, you’re already well into the process.

In software development, it’s the same, but moreso. Programmers have mock objects and stub functions. These define an interface but just dumbly return a single (or random) value when you interact with them. These are easy to write, and are the classic way of making progress while you’re waiting on another engineer (or company) to deliver. If you could put a fake heating element into your espresso machine that would magically transform into the real heating element (when they clear customs) without having to take the whole dang thing apart, that would considerably reduce the number of true dependencies in your manufacturing process. (And, you’d probably crush your competitors in the espresso machine business.)

Software engineering can be a pretty parochial endeavor. We left blocking out of FogBugz on purpose. We hoped it would encourage efficiency and cooperation. Stub in a function and stop obsessing over Jim. He’s probably not the one stealing your lunch from the fridge anyway. (It’s actually Margaret.)

But we still kept getting the question, and our answer was always a version of the above. To be honest, we’ve never been thrilled about this trade-off. It’s not as clear-cut as the deletion or required field trade-off.

And then we released a plug-in architecture, and our answer became the above plus, “But if you really, really wanted it, you could write a plug-in.” Even if we didn’t think of this as a bluff, the very talented developers at Quarantainenet called it anyway.

The team at Quarantainenet wrote a Case Dependencies plug-in for their own usage. Version 1 came out last summer, and they’ve continued to improve it. They’ve generously made it available to the world for free. We really think they’ve done an excellent job with the interface work. In filter/grid view, you can filter blocked cases so they’re hidden. You can sort cases by number of cases they rely on, or number of cases they’re blocking.

Filter by various blocking options

One big feature that argues for using the plug-in, even if you’re not going to use it for Bugzilla-style blocking, is the ability to have cases automatically reactivate when all their dependencies are closed. This fills a long-unmet need for customer communication: “Tell me when my fix is released.”

Reactivate resolved cases when dependencies close

On top of that, Quarantainenet has put us to shame by offering comprehensive PDF documentation of their plug-in, something that’s not currently available for FogBugz itself. We’re lucky to have them as customers.

This really highlights the best part of the offering plug-ins. It allows us (and our users) to offer additional functionality without complicating the basic user experience. Anyone who adds the plug-in knows exactly what they’re adding, and is expecting the additional complexity that comes along with a voluntary addition of features.

It also highlights to us the awesomeness of having developers as customers. They have the ability to change things, make things better, if you give them the opportunity.

Marnix and the team at Quarantainenet say Case Dependencies really works great with their workflow and has renewed their love of FogBugz.

You can download the plug-in from our plug-in gallery.

 

Get More Data From Your Screenshot Tool

June 16th, 2011 by Ben McCormack

Many of our customers are already using one of several great screen capture tools to easily get screenshots into FogBugz. However, if you’re doing QA work for web sites, you likely need to add additional information to the case once it is submitted. BugDigger takes care of some of this extra work for you by providing detailed data about the user’s environment when the screenshot is captured.

For example, let’s say I’m reviewing the FogBugz home page. BugDigger provides a Firefox extension that lets me create a bug report for this page in one click.

clip_image002

From there, it’s very straightforward to enter some basic details, edit your screenshot, and submit it to FogBugz:

6-14-2011 11-31-47 AM

This creates the case within FogBugz with some information about the user’s environment:

6-13-2011 3-59-23 PM

Clicking the BugDigger link within the case takes us to even more detailed information, including the user’s previous actions at the site before submitting the screenshot:

6-13-2011 4-30-22 PM

BugDigger has a fully functional free trial to get started with their service. In case you don’t already have a FogBugz account to link to, you can give us a try as well.

FogBugz GitHub Integration

March 15th, 2011 by Philipp Tsipman

GitHub LogoHas your version control gone distributed?  Do you now have GitHub hosting your code?  GitHub integrates directly with FogBugz, and it takes just a few minutes to link the two up!

Here are the steps.

(Many thanks to David Kennedy for kindly putting these together.) To get FogBugz 8 On Demand talking to a private GitHub repository:

A. Configure FogBugz

  1. Go to ‘Admin’ -> ‘Source Control’, and add a generic repository.
  2. Give it a name like ‘GitHub – [repo name]‘.
  3. Note the ‘ixRepository’ number on the ‘Redownload Scripts’ URI.
  4. Set the ‘Diff URL’ to:https://github.com/[company]/[repo]/commit/^R2
  5. Set the ‘Log URL’ to:https://github.com/[company]/[repo]/commits/^FILE

To be clear, if your repo displays as ‘/fooinc/foo’ in GitHub then [company] should be ‘fooinc’ and [repo] ‘foo’ in the examples above.

B. Configure GitHub

  1. Click on your repository.
  2. Go to ‘Admin’ -> ‘Service Hooks’ -> ‘FogBugz’
  3. Set the ‘Cvssubmit Url’ to (note the https):https://[company].fogbugz.com/cvsSubmit.asp
  4. Set the ‘Fb Version’ to ’7.0′
  5. Set the ‘Fb Repoid’ to the value of the ‘ixRepository’ from step 1.3
  6. Tick the ‘Active’ checkbox.

During a git commit, you can provide a comment of the form: “See bugzid:123. Brief summary of the fix. Longer explanation.”

Enjoy it!  Happy coding.

AppDomains, AppDomains: Can’t live with ‘em…but can live with fewer of them

March 13th, 2011 by Tim Stewart

Recently we noticed that FogBugz was slowwiiiiinng down.  Some customers still praised it compared to the competition. But, it was definitely no longer as instant as we were craving it to be. We decided to investigate.
We discovered the culprit quickly enough:  AppDomains.  Yes, those fuzzy wonderful things that keep FogBugz humming for thousands of customers each with their own user Plugins, Extras, BugMonkey scripts, API calls, and whatnot.

The problem started rather innocently.

We want to allow third-party plug-ins to run on FogBugz On Demand, so our developer community can continue to expand and improve FogBugz’s functionality. But to protect your FogBugz instance from being affected negatively by code we don’t directly control, we segregate each plugin’s operations into its own AppDomain, a discrete area in which the plugins can operate without affecting one another. We created one AppDomain for each account running third-party plugins.
It turns out, IIS/.NET don’t handle hundreds or thousands of AppDomains very well. The marginal performance hit for each additional AppDomain grew with each AppDomain that was added.  The graph below gives an idea of this extra-linear growth. With 33% more AppDomains, we saw a 400% increase in response times.
Performance degraded extra-linearly for each new AppDomain, and we were adding AppDomains linearly per new customer (one new AppDomain per customer per plug-in).
We’ve contacted Microsoft to learn why AppDomains scaling is not linear, but it’s rather clear that it’s not.

Solution

Once we determined what the problem was, we figured this: theoretically, any given plug-in only needs one AppDomain to run across all FogBugz On Demand accounts. We could load each plugin into its own AppDomain, since there are far fewer plugins than there are accounts.
The only potential issue was that a value stored in a static variable in the AppDomain would be visible across multiple accounts. This caused quite a bit of concern until one of our engineers pointed out that we already vet On Demand plug-ins for security, with a rigorous review for XSS vulnerabilities. If we’re willing to trust our review process to guard against nasty XSS attacks, why aren’t we willing to review for static variables to prevent data bleedover?
We reviewed all plug-ins available to FogBugz On Demand and found zero need for changes outside one plug-in developed in-house. (It shall remain nameless… but if you wanted to download the source code for old versions of all the plug-ins and unzip and pore over the source code, you could probably figure it out).

How did we do?

Just to give a sense of the improvement, our web servers each had on the order of 1,000 AppDomains before we deployed the fix. Once we deployed the fix, they each had less than 50. Response times, accordingly, got much much better.  Since deploying, we’ve also noticed that our web servers and our backend servers are using much less CPU and memory.
Our next performance attack is client-side.  We’re also improving performance profiling of installed FogBugz so we can be alerted early in testing as to whether a new feature degrades response times.
Please keep an eye on your FogBugz performance.  We hope you’ll be seeing it get faster and faster!

A 7-Year-Old Bug Closed: FogBugz 8.3 with Rich Case Editing

February 9th, 2011 by Philipp Tsipman

We finally closed a bug from 7 years ago. Starting with version 8.3, FogBugz supports:

Rich text cases

And rich text email!

Currently, we're only supporting outgoing rich text email, but we've already got plans to add support for incoming rich text email as well.

Sometimes technology moves at break-neck speed. Sometimes, it takes years. For Apple, it took 22 years to go from the idea of a touch-based "Knowledge Navigator" to its successful implementation as the iPad. The clincher was: inexpensive glass coated in a grid of indium tin oxide. For us, the clincher was adding CKEditor to our wiki this summer. It took just a few more months to finish the rest. We hope the wait was worth it.

Feeding Your Morning Project Management Addiction – FogBugz Mobile in FB 8.3

February 8th, 2011 by Philipp Tsipman

If you are like us, the first thing you check in the morning is your email. Well, perhaps you first get a cup of coffee brewing and check if Google has made an offer to acquire your company. But, even then, your email probably comes next, and almost certainly before your cereal, toast, or oatmeal.

We want to feed this unhealthy habit. With the mobile view in FogBugz 8.3, you can add your FogBugz email and cases to your morning routine:

  • Click from your FogBugz email notification to view the whole case history formatted for the mobile screen
  • Edit, re-assign, or resolve cases a case
  • Skim through your Inbox, Saved and Shared filters

FogBugz Mobile works on any iPhone, iPod touch, iPad, iToaster, Android, Blackberry, Nokia, or Windows Phone!

FogBugz Mobile on the iPhoneFogBugz Mobile on AndroidFogBugz Mobile on Blackberry

Notice, there is a whole host of FogBugz functionality that we did not want to squeeze into the mobile version, like:

  • Creating new cases
  • Searching for cases
  • Replying to case emails
  • Viewing more than 50 cases in a filter

Rest assured — you can access all of this good stuff with one of the fantastic apps from our developer ecosystem, or in the full browser version of FogBugz.

Still, unlike some minimalists, we always see a bit of a give-and-take between KISS and rich functionality. We'd love to hear how useful mobile FogBugz is for you. Would additional features serve you better incorporated into the main mobile UI? Let us know on the FogBugz StackExchange.

The New FogBugz 8.2: One Plugin to Rule Them All

December 13th, 2010 by Philipp Tsipman

FogBugz 8.2 features better stability, UI updates to our Visual Studio Add-In, and several amazing new plugins to customize your case workflow.

We always strive to keep FogBugz simple, powerful, and developer-friendly.  The plugin architecture lets us support a variety of UI customizations and integrations with other tools.  It also gives you the choice of whether to adopt these new features, in both on-demand and licensed environments.

Here are some of the new plugins that our team has developed in the last few months:

1. BugMonkey 2.0: The BugMonkey plugin opens an entirely new level of personalization to FogBugz by allowing you to run custom JavaScript or CSS within your FogBugz instance.   With BugMonkey 2.0, an admin can allow individual users or groups of FogBugz users to customize their accounts without changing the way FogBugz acts for the other teams.

If you’d like to tweak the FogBugz UI, you can have: highlights for overdue cases, collapsible group headings, custom date formats, custom backgrounds, streamlined menu options, shortened URL references within automatically generated cases, and much more.


Check out the blog post written by Daniel, the lead developer for this feature, for more details.

2. Notify: Assign a case to someone or create one for yourself, and let your teammates know.  It’s like cc: for your cases, and it changes the way you collaborate on features and tasks within FogBugz. (Just don’t break the one-pizza rule!)

3. Inline Email Image Attachments: With this plugin, if you prefer, images will appear inline rather than at the bottom of your email events.


We look forward to adding more plugins in the future as a way to quickly experiment and extend our functionality. To browse our plugins gallery, click here.  With your feedback, we will incorporate the best ones into subsequent versions of the FogBugz platform.

Announcing BugMonkey 2.0

December 13th, 2010 by Daniel LeCheminant

FogBugz 8.2 includes a brand new version of the BugMonkey plugin. 

What is it?  Basically, BugMonkey lets users insert a little bit of client-side code and styling onto their FogBugz account.

Why is this useful?  Well, it turns out that it's very hard to make software that works exactly the way every single user wants it to work.  

As a (silly) example, 98% of our users may be happy with the fact that the background of our application is white.  But there are a few that really wish that the background was black (less eye strain!).  

With most software, including traditionally our own, the black-background folks and the Support Team would have to go through a process like this:

  1. A user suggests that we make the background of FogBugz black.  (It's not that hard!  It's like 1 line of CSS!)
  2. We review the suggestion, but realizing this change will confuse all of our other users, decide not to implement it
  3. The user says, "hmmm", and suggests we at least add an option to make the background black
  4. We study it some more and decide that adding an option for something that only a small number of users will want would add interface clutter that results in a worse experience for most of our users, so we again decline to implement it
  5. The user is disappointed, and we haven't done all we could to make them happier and their lives easy-as-pie. 

BugMonkey lets us not worry–and make each one of our users ridiculously happy–in the following way:

  1. User suggests that we make the background of FogBugz black.  (It's not that hard!  It's like 1 line of CSS!)
  2. We respond: "You're right!  You can now make your FogBugz black using the BugMonkey plugin, just by adding this 1 line of CSS!"
  3. All right.  Our user is happy and the FogBugz platform stays clean and simple. 

So what does BugMonkey 2.0 bring?

  • Instead of having a single block of script/CSS that can be added to your site, you can have many individual customizations
  • Administrators can configure the plugin to allow normal users to author personal customizations
  • Administrators can create customizations that are available to, or required for certain user groups or individuals

You can find BugMonkey 2.0 in our plugins gallery, and a variety of scripts that users have come up with on the FogBugz Knowledge Exchange (here and here). If you're a FogBugz administrator, activate the plugin in FogBugz via the top-right Admin/Plugins menu.  If you're a non-admin FogBugz user, get your administrator to activate it and customize your FogBugz to your heart's desire!

“Leaking” FogBugz 8 and Kiln 2

October 22nd, 2010 by Rock Hymas

"Just as with the beta release, it’s helpful to roll out the final release to our hosted customers in stages. We call this “leaking the release,” which sounds kind of gross, but I like to think of it like sugar water leaking out of a bird feeder rather than, …well, you can come up with an appropriately negative metaphor yourself. The birds love it. As before, this gradual process helps us to catch issues before they have a chance of affecting everyone. Now that we’re dealing with 2-3 orders of magnitude more customers, it’s much more likely that we’ll run into performance problems with the new code. One serendipitous benefit of this type of release was that buzz about the new versions progressively increased over the course of the month leading up to the full rollout."

Read more about how FogBugz 8 and Kiln 2 were released to customers.

Wiki Comments in FogBugz 8

October 20th, 2010 by Alex Gartrell

Have you ever found yourself in the following situation? You've been slaving over the spec for a new feature (you do write specs for them, right?) and you've just circulated the spec among a bunch of your colleagues to get their feedback.

Fizzbang 2.0 - Spectacular Spec

The Old Way

Shortly after emailing everyone, a miniature forum begins to materialize at the bottom of the wiki article. It's got suggestions, questions, responses to questions, and responses to responses to questions from you and your coworkers. Sometimes it's a bulleted list, sometimes it's a name as a sub-heading followed by a blob of text. It's almost always valuable information. But, truth be told, it's a bit of a mess, and short of printing out your spec and speckling it with handwriting and sticky notes, what can you really do?


Pseudo-comments (part 1)

As you address your colleagues' concerns and answer their questions, you either have to a) manually scratch out the comments that are now obsolete, or b) delete them. And on top of that, your colleagues sometimes trip over each other trying to add their comments at the same time and end up having to deal with merge conflicts when they go to save their changes. Blarg.


Pseudo-comments (part 2)

In short, it's cumbersome, time consuming, and enough of a pain in the neck to stop someone from leaving a useful comment.

The New Way

Well not anymore! FogBugz 8 includes the new Wiki Comments plugin which allows you to add commenting to any wiki article:

Wiki Comments in FogBugz 8!

How To Use Wiki Comments

Once you've installed the Wiki Comments plugin, you'll find the comments block under the insert menu in our new wiki editor:

Insert Wiki Comments into your wiki article via the wiki edtior's Insert menu

Once you've added a comment block to your wiki article, you should be all set!