Archive for September, 2011

Friday Linkparty

September 30th, 2011 by Dan Ostlund

Here’s our latest installment of things we’ve been reading.

Harvey Mudd gets more women: The President of Harvey Mudd college has managed to triple the number of female comp sci majors since 2006.

A proposal to fix callback hell in Node.js

Inbound Hiring: I think most startups do this, but here’s a short analysis on early hires from Gabriel Weinberg.

Why blog?: Also from Gabriel Weinberg. What he’s learned over the last year of committing to his blog.

Try 16 different languages in your browser

Experiments with Google Page Speed Service

September 23rd, 2011 by Jude Allred

Our oldest product

Let me tell you a little bit about http://www.fogcreek.com/:

  • It’s old; It’s hosted by IIS6 alongside a horde of other websites.
  • It’s the first place people go when deciding whether to use FogBugz or Kiln.  It’s pretty important to us.
  • Recently, we started to treat the website as a product. It has received substantial attention, primarily in the form of A/B tests.

We’re building some fancy new web servers for fogcreek.com, but in the meantime we’ve been accepted into the Google Page Speed Service beta. It seemed reasonable that it might provide us with some useful tools, and in the short term it might give us a workaround for some of our IIS6 woes.

There were four things that we hoped Page Speed Service would take care of:

  1. GZIP all of fogcreek.com’s static and dynamic content.
  2. Set far-future expires headers on our static content.
  3. Distribute our static content via a CDN.
  4. Fix or remove the broken ETags that IIS 6 Is sending out.

Enter Google Page Speed Service

For this test, we brought Google Page Speed Service to life at w.fogcreek.com. This is a totally unused alias of www.fogcreek.com, so we were able to test PSS on an isolated mirror of our production environment.

After a small amount of setup, page speed service was live!  (Setup basically consisted of adding a Google verification .txt record and a CNAME record mapping w.fogcreek.com to ghs.google.com.)

The comparison tool that Page Speed Service provides was inconsistent, but it looks like there might be a lot to love.

  • Its page load times differ from those reported by GTmetrix and local testing
  • The measurements change significantly over the course of running it multiple times

But the results look promising.  Here’s a report on Fog Creek’s home page load time.  On the left is the load time without Google Page Speed and on the right with it.  Google PSS gave us a 10% difference in initial page load time, and a 25% difference in repeat page load time. We got that for very little effort.  Nice!

Here are GTmetrix reports on www.fogcreek.com from 9/23/2011.  First, the results without the Page Speed Service:

And the same tests on w.fogcreek.com, with Page Speed Service enabled:

Overall scoring improvements:

The Fog Creek landing page:

Google PS +1%, YSlow +10%, page weight reduced from 466kb to 365kb

The FogBugz landing page:

Google PS +1%, YSlow +12%, page weight reduced from 608kb to 379kb

The Kiln landing page:

Google PS +0%, YSlow +10%, page weight reduced from 520kb to 411kb

Interestingly, GTmetrix shows page load times (as measured by the onload event) that are consistently slower for w.fogcreek.com than http://www.fogcreek.com/, usually on the order of about 0.7 seconds.

GTmetrix’s tests don’t seem terribly consistent with webpagetest.org’s (Google’s promoted testing service), which show consistently faster page loads than GTmetrix. But, it’s hard to draw conclusions since incremental rendering of the page is an important factor which isn’t represented by the load time.

For those of you who wish to dig deeper, take a look at the waterfall diagrams of a given page rendered with or without PSS. You’ll notice that the PSS timelines have their content proxied across 4 of Google’s servers, the overall number of requests has decreased, and the waterfall has rearranged significantly.

For example:

www.fogcreek.com/fogbugz, Without Google Page Speed Service:

 

w.fogcreek.com/fogbugz, With Google Page Speed Service:

So how did PSS handle the goals we wanted to meet?

  • PSS has compressed (GZIP) the content that it sends down
  • PSS has far-futured the vast majority (but not all) of our static content
  • PSS has properly configured our ETags
  • PSS is distributing our content via its CDN

Pitfalls

1 - PSS’s lossless image compression is lossy.  Our website uses a tiled, textured background image.  Page Speed Service attempted to optimize it, and in the process altered the background images.  For example, this image:

Became this one:

I’ve put together a test case at w.fogcreek.com/ImageTestCaseForPSS/

As part of the lossy conversion, PSS converted the image from a png into a jpg.  I altered the source image files to be jpgs instead of pngs, and then PSS was able to optimize and bundle them without any difficulty.   I’d also note that the image optimization step (and all of their other optimizations) can be disabled in order to work around problems like this.

2 - PSS supports blacklisting URLS, but not blacklisting HTTPS urls.  I knew from the start that PSS didn’t support HTTPS, and therefore our trial signup forms, e.g., https://www.fogcreek.com/kiln/try/, would have to be exempt from PSS’s optimizations.

PSS supports blacklisting, which allows you to exempt a specific page from being hooked by PSS’s proxy.  Instead it will go directly to your source server.  Unfortunately you can’t configure HTTPS pages in this manner.  If you have a website with HTTPS content, you’ll have to move all of your HTTPS content to a separate subdomain, e.g. “secure.fogcreek.com”, in order to exempt it from PSS.

This was an inconvenient change to make, although not hard. Still, PSS’s support of blacklisting was put to good use.  We use a heavily-modified version of the FairlyCertain A/B testing framework on our fogcreek.com properties.  Server-side A/B test frameworks and CDN’s don’t really play well together, but PSS’s blacklisting allows us to blacklist any pages which contain active A/B tests.

3 - For the duration of the beta, once you bring PSS live on a given subdomain (e.g., w.fogcreek.com), you cannot reconfigure PSS to work with a different subdomain (e.g., www.fogcreek.com) without an additional beta acceptance.  I’ve reapplied to include www.fogcreek.com in the PSS beta, but have yet to be approved.  For this (and only this) reason, we’re blocked on moving forward with using Google PSS in production.  If a Googler is reading this and would like to whitelist www.fogcreek.com for the beta, we’d be much obliged.

 Impressions

Pitfalls and onload-event oddities aside, I’m very impressed with Google Page Speed Service.  I’m happy to see that they’re abstracting away the ever-present need to minify, compress, and bundle your static website content, as well as optimize your images.  In our specific case we don’t really care about those  features – we already optimize our images and bundle our scripts, but it is a great feature for most sites.  Our case is probably more edge than common—we’re using PSS primarily to work around IIS6, and it appears to succeed at that.  PSS’s CDN seems promising, but I don’t yet have any data on how it compares to, say, Amazon’s Cloudfront service.  Setting up PSS on our site was an absolute breeze, however, and  I think it may turn out to be a great tool for web developers and site administrators.

The choice of setting up the Page Speed Service on w.fogcreek.com instead of our production subdomain, retrospectively, was a useful mistake.  I appreciate the ease of using tools like GTmetrix to compare the two subdomains directly. I’ve also enjoyed keeping PSS’s configuration changes completely separate from our production environment as well as the ability to share the PSS changes with other people without having to manually configure their browser to proxy traffic through PSS.

Friday Linkparty: What we’re reading

September 23rd, 2011 by Dan Ostlund

Here’s some interesting stuff we’ve been reading lately:

How to keep your mojo when you’re doing SEO day after day: Lisa Barone gives some advice on how to keep your SEO efforts fresh, and how to stay interested when you start to flag. “The result of all of us leading more social media-focused lives is that we’ve tied our personal worth to how we do on these various social media channels.”

Designing the Ubuntu monospace font: “Making a font takes a really long time…”

Twitter project does for dist. real-time computation, what MapReduce does for batch processing.

Why do Windows functions begin with a pointless instruction? 

The Smashing Magazine Web Design Challenge: A challenge intended to help designers become better at justifying their design decisions.

Can health data predict risk of genocide?: “The results seem to demonstrate that the victim population had been marginalized and denied access to nutrition and health care even before the genocide took place.”

The Agonies of Picking a Product Name

September 15th, 2011 by Dan Ostlund

Picking a product name is all agony and no ecstasy. It’s also a giant time-slurping vortex. And in the end, it kind of doesn’t matter.

A product, or a company name, only really needs to achieve one thing: not remind us of some unpleasant bodily function, or the results of a wild and drunken night. But even this seemingly common-sense advice is often and successfully broken. Wii anyone?  No thanks, I went this morning.

Yes the name matters if it’s truly totally weirdly awful, but outside of that it just doesn’t.

Recall that “iPad” was the subject of all kinds of snark and scorn in the first couple of weeks after launch. Who makes those jokes now? No one.

Amazon? I remember lots of people making fun of that name and insisting there would be endless confusion, but it worked out fine, and at least it wasn’t Cadabra, one of the early names Bezos considered, and something sure to upset the Steve Miller Band.

At least a dozen people I know wondered why you would name an e-reader Kindle, something that reminded them of fire. Fire. Books. Fire + Books, bad. Anyone think that anymore? Nope. Everyone just buys them by the millions.

If Google wasn’t such a familiar and ubiquitous name, most people would reject it as a company name on the sensible grounds that it is sillier than a bald cat. But we’re all used to it, and we don’t care. And that’s the point.

And of course there is no shortage of bad-seeming names on really successful products. Dare I mention FogBugz in this context?

We just recently went through the naming agony since we just launched Trello, a tool for project and task and process management, and…well, go check it for yourself. 27,000 users have signed up in the last 24 hours, and they’ve been saying really nice things on the Twitters.

Trello was code named Trellis when it was in development. It got that name because one of Fog Creek’s co-founders, Michael, suggested it as a code name in an early meeting. It was fine. It stuck.

Eventually we decided that we needed An Actual Product Name. Which, of course, we did, but we spent way more time on this than we needed to. Two of the team members took some time to come up with some names. Actually, a couple of hundred names. For one reason or another, these were all rejected or shelved, mainly because all possible domains have been plucked up by an automatic domain-registering spaceship.

Feeling morose over this, they then hired a professional naming person. He came up with about 200 names, some of them very good, and one of them “lasagna”.

Not knowing about the previous naming efforts, I jumped in one day with about 125 name ideas. Then several of us sat down together and reviewed our name ideas, and came up with about 200 more. We tried everything: animal names, plays on various aspects of what Trello does (board, card, list, task), Japanese words, and every combination in between. We threw them all at the wall, from the practical to the nutty. Kardboard, Hippolist, 5 Camels, Listly, Idealist—all were suggestions at one point or another.

Late in the process we thought, maybe we could just use the code name, Trellis. Why did it have to change? But, we couldn’t buy trellis.com. They weren’t selling. We tried to buy trell.is, but it was more than we wanted to spend. We really thought it was important to get a .com domain anyway, so we weren’t thrilled with this option.

The wheels continued to spin and every couple of weeks the product name came up and we would lurch off on another round of fumbling around for a new name.

Work continued on the product code named Trellis and for a couple of months we didn’t have much time to think about the name until the mid-September launch forced the issue: nothing like a deadline to provide some clarity.

So Joel organized a company-wide brain storming session and we got out our markers and some giant pieces of paper, tacked those up on the wall, and came up with about another 150 names. Some really good names came out of that session. It was raucous, and it was fun.

We argued, we lobbied, we pointed out when a possible name rhymed with wee, and then we voted. Of our choices, about none had available .com domains. The whole thing was getting depressing. And we were out of time.

Trellis was still one of the contenders, so, after all of these sessions, and all of this brain-storming, and the many hundreds of suggestions, Michael just decided to start playing with variations on Trellis. He came up with a number of them, and then looked for domains he could buy. Trello.com happened to be one of the domains he could get for a reasonable amount of money and we decided it sounded good. We had made a grand wandering journey all the way from Trellis to Trello. That’s like leaving New Jersey and getting to New York by way of Kinshasa. But here we are.

After all of that it’s clear that the name just isn’t that important.

Gold Bond Medicated Powder. What’s a Gold Bond, actually? And Medicated Powder isn’t a name, it’s a thing. Might as well call your product Lined Paper With Three Holes. But Gold Bond Medicated Powder works, doesn’t it? No one ever thinks about it, they just get some if they have itchy feet.

We ended up with a name very similar to the one we started with, one that all of us like just fine, and one which is just going to be what people call our new, supremely free, project management app. I think everyone would have gotten used to Hippolist too, but it doesn’t matter, because it’s called Trello now.

In the end we should have just had Michael do the whole name picking in thirty minutes and been done with it.

Fog Creek Launches Trello

September 13th, 2011 by Dan Ostlund

Today we’re happy to announce a new product. It’s called Trello and it’s used for all kinds of project and task management. It’s based on a simple board and card metaphor, and we hope you’ll find it as useful as we do. Oh, and it’s free. But wouldn’t you rather hear all the details about Trello from Joel?

You can follow the Trello twitter here. Or you can check out the Trello blog here. There will be several posts there over the next couple of days.

 

Friday’s Linkparty: What we’re reading

September 9th, 2011 by Dan Ostlund

Here’s what we’ve been reading.

A Brief History of Robots:  See the digesting duck.

Google Results as Zagat Entries: “Wikipedia: an uneven mix of ‘politically motivated’ articles from ‘amateurs.’”

Amazon’s First Employee: Shel Kaphan was there at the very beginning of it all (even when it was called Cadabra).

How to Process a Million Songs in Twenty Minutes: Using Amazon’s Elastic MapReduce to process 300 gb of  songs.

The best SEO and analytics blogs: No longer a dark art! Find the best local search, SEO, and analytics blogs according to Caleb Ross.

Procrastination is Underrated

September 7th, 2011 by Ben McCormack

You have tons of work in your queue and only so much time to get it all done. FogBugz, with its myriad features to assist in managing your workflow, is already helping you organize your tasks into logical groups, but oftentimes you still need an ad hoc way to quickly move a case out of sight because it’s something you simply can’t do right now.

We’ve written a plugin for FogBugz called Do Later to help in the scenarios where a case needs attention at a specific time in the future. At its core, Do Later allows you to set up two simple types of events within FogBugz:

  • Notify Me - This will send a reminder email to you at the time you specify.
  • Activate & Assign To Me - At an appointed time, FogBugz will make sure the case is opened, activated, and assigned to you. You’ll also receive a notification if you have them enabled.

7-15-2011 10-10-36 AM

Let’s look at some scenarios where this feature might be useful:

“I’d like to assign this case to Theodore, but I want to check back in a week to make sure he’s fixed that bug in the billing system.”

  • Use Notify Me to create a reminder for a week from now.

“This case is important, and I need to work on it, but I can’t do anything about it until the thirtieth of the month.”

  • Use Activate & Assign to Me scheduled for the thirtieth of the month and then close the case. This removes it from your list of open cases (since you can’t work on it anyway) and FogBugz will bring it back when you can actually get it done.

“I told this customer I would import their data at 9:00 AM on Friday. I usually set up a calendar appointment with a reminder.”

  • Use Notify Me to add a reminder directly to the case without needing to rely on another external tool.

“I need to follow up with this customer in a month to see if they’re ready to buy, but I don’t need to see this case until then”

  • Use Activate & Assign to Me and close the case. When another month rolls around, FogBugz will put it back in your filter.

I’ve got a bunch of ideas for new features as cases assigned to me, and I want to make sure I give them attention at some point, but right now they’re just cluttering up my filter.

  • Use bulk edit to Activate & Assign to Me for a later date and then close the cases. This will function like a tickler file, removing these items from your main area of focus, but bringing them back to your attention again in the future.

This feature has been requested by many FogBugz users. We heard you, and we built it. Thanks for the suggestions! We’re already using it here at Fog Creek.

It’s totally free and installs within seconds. “Do Later” is available for download in the plugin gallery; On Demand customers can install it by going to Admin > Plugins, View All Available Plugins.

New Plugin: Relative Time

September 7th, 2011 by Ben McCormack

Let’s imagine you have a few minutes to go through your backlog of bugs and feature requests within FogBugz. The list has gotten fairly lengthy and some of these cases have been here for quite a long time. How long? You sort by the Date Opened column of your filter and take a look. You see a list of numeric dates, but the question you really want answered is, “How long have these cases been open?”

While you can do some quick math in your head to figure it out, that’s no longer necessary. We’ve written a plugin called Relative Time which adds new columns to the grid view to show dates in a relative fashion.

7-21-2011 9-39-37 AM

Now you can just take a quick look and see how long something has been opened. It says about 13 days ago, which in this context provides more meaning than a date on a calendar. Do you need to know when something is due? Seeing about 4 hours from now gets to the point; you don’t have to think. We’ve added a corresponding “relative date” column for each of the regular date columns in the FogBugz grid view.

7-8-2011 1-56-43 PM

Do you want to know if cases are getting stale? In addition to the existing columns, we’ve added a new column called “Open Duration” to show how long a case has been open, or if it’s closed, how much time has elapsed between the time it was opened and the most recent time it was closed. This helps in situations where you’re trying to get an idea of how long it takes to get cases resolved. How long did it take to close bugs submitted by our customers last week? Use this column to find out.

Lastly, we’ve decorated the html with a data-time_span_seconds attribute to make it a little easier to use BugMonkey in conjunction with these new columns. Do you want overdue cases to show up in red? Easy. You can find this script in the BugMonkey Script Archive.

8-31-2011 9-21-54 AM

Try it now! Relative Time is available in the plugin gallery, or for our On Demand customers, go to Admin > Plugins, View All Available Plugins. It’s free. It installs within seconds, and it will give you a natural, effortless way to think about dates and times within FogBugz.

Friday’s Linkparty: What we’re reading

September 2nd, 2011 by Dan Ostlund

Some of the stuff we’ve been reading lately.

The suburb that changed the world: Once upon a time, living in Palo Alto was regarded as a sign of selling out, and of failure. But, as the article says, the two poles of 60′s SF culture–hippies and leftist revolutionaries–became the poles of the early Valley software culture. “We code and scheme through the night, and then genuinely change the whole world within a few short years, over and over again. What other bunch of oddballs can say that?”

Chicago 311 fielded 4 million calls last year: This short blog post links to two interesting software projects designed to improve citizen access to government. The Open311 project and the Civic Commons project.

Lessons from a well-known CEO: Umair Haque collects some of the advice of Steve (I call him Steve). “Do you want to spend the rest of your life selling sugar water — or do you want to change the world?”

Hilary Mason of bit.ly asks what you’ve read that changed the way you think: Always nice to get book suggestions from interesting people!

What’s wrong with sort and how to fix it: How to get sort sorted out.

F-Secure goes hunting for files: How RSA was hacked with an email

The Price of (Dev) Happiness: Part Two

September 1st, 2011 by Rich Armstrong

Last time, we took a look at the exact cost of the contents of our private dev offices. For this post, we promised to take a look at the price of the offices themselves.

Since the beginning, Fog Creek’s promise has always been that every developer gets a private office with a door that closes. Don’t want a private office? You get one anyway. If you want camaraderie, you can walk down the hall, put your witticisms on company chat, or store them all up and let fly at lunch.

In the previous post, the underlying message was, “Give your people the workstations they need to be comfortable and healthy.” The message in this post is not, “Give your people private offices.” We’re satisfied enough with the benefits that we’re going to continue it, but we’re not here to proselytize that policy.

The point this time is this: your office space and how you design it is an expression of your priorities as a company. It speaks to everyone who comes through the space, every day. Do not be shy about spending money on it.

Let’s get the number out of the way. We spend a bit over 6% of revenue on office space. Compared to other companies we’ve surveyed confidentially, that’s on the high side, but not by much. And we’re growing fast these days because of the stunning success of Kiln, so we won’t be above 6% for long. We’re based in Manhattan and, as you might imagine, office space is very expensive. But that’s what the company was founded on: a good job for awesome coders in New York City. Without making light of the achievements of our neighbors, we didn’t want to be the best place for devs to work in Hackensack. So it’s time to pony up.

Of course, a lot of companies who are competing for the same talent are actually venture-funded startups. They have different needs, revenue/reward models, and external expectations than we do. I’m going to go out on a limb and say Fred Wilson might take issue if you buy the $10,000 espresso machine before showing a profit. We’ve been profitable since inception and so can work a little differently.

Espresso machine

 

Also, the price tag on our office space is not only because we have private offices. We need a lunch room and kitchen to accommodate everyone having lunch at the same time, away from their desks. Our summer head count can grow by ten because of our summer internship program. Okay, so we don’t actually need the saltwater tropical fish tank or the marble shower or the library.  But we’re also expressing our company culture by how we structure our office, and if that can keep us happy and motivated, plus attract more smart people who share our values, that’s very much worth the extra money.

Here’s a few good snapshots of our office, if you want to see more.

Next, the cost of lunch, and its primary benefit: no standing meetings.

 


Looking for more?

Visit the Archives or subscribe via RSS.