May 26, 2009

New stuff for Copilot, and new subscription plans!

It's been awhile since we last updated, and that is because we have been REALLY  busy making new stuff for you! :) Here's a rundown of everything that we have, or are about to release:

 
Service Improvements
 
We've spent the last several months improving the service, and have completely revamped our proxy support. This makes it even easier to connect to the person you want to help using Copilot.
 
OneClick for All
 
We're also introducing the ability to add OneClick computers to ANY account for just $5 a month per computer. That includes an unlimited amount of connection time to those computers even if you are on a pay-as-you-go or minute plan! On top of that, a single subscriber can now connect to any number of OneClick Computers simultaneously. We know this will be really helpful for those of you who use OneClick to support your customers.
 
(Discounted) Annual Billing
 
We've added an annual billing option to all new plans. This is an oft-requested feature, and I am really happy to get it out there because it will make life easier for all of you who treat Copilot as part of the budget for your company. Even better, you get 2 months free as a discount for paying annually!
 
New Subscription Plans
 
Starting on June 10th, unlimited plans will start at $24 a month instead of $19.95, and premium plans at $49 instead of $39.95. Pay-as-you-go accounts will remain the same, with the exception that you will now be able to add OneClick computers for just $5 a month or $50 per year.
 
All current account holders will be grandfathered into their existing plans, so your bill won't be changing unless you decide to change plans after June 10th. Anyone who signs up for Copilot before the tenth will also be grandfathered in. That means you can get unlimited Copilot OneClick computers for as little as $40 a month if you sign up now.
 
After June 10th, folks signing up for new accounts will get either 2 OneClick computers per user, on the $24 a month plan, or 10 per user on the $49 a month plan. New customers can add additional OneClick computers for just $5 a month, and, as always, they get unlimited Copilot Classic connections every month. Again, current subscribers' plans will get these benefits at no additional cost.
 
Phew! That's a lot of stuff. As always, if you have questions or comments, please feel free to leave 'em here or email us at support@copilot.com.

January 15, 2009

Mac OS 10.3.9 no longer supported :(

Over the past few days, we have been contacted by some frustrated Copilot customers trying to use it on Mac OS X 10.3.9. They reported that Copilot was failing to launch on systems running this version of the OS. After some extensive digging, we discovered that this is due to a bug that is only occurring on 10.3.9. The bug is the result of a function call in OS X's path library that is dying with a seg fault. We called Apple to see if there was a workaround or fix for this, and they, very politely, told us to go scratch; 10.3.9 is no longer supported by Apple.

This left us with two choices:

  1. Write the library from scratch so that we can continue to support 10.3.9
  2. Give up on 10.3.9

Currently, 10.3.9 users make up less than 2% of our Mac users in an average month and a tiny percentage of our total users every month. After considering the first option carefully, we decided that it is just going to take us too much time to fix it; effectively stopping us from introducing some cool new features to the other 99% of our customers. As a result, we are bumping the minimum supported version to 10.4. The Copilot.com website will reflect the change shortly.

We know that this stinks for those customers that are still using 10.3.9, and we are really REALLY sorry. This is one of those cruddy decisions that sometimes have to be made in the process of developing client software.

If you have a question about this, please drop me an email at support@copilot.com or leave a comment here.

January 07, 2009

Available Immediately: Copilot OneClick for Mac

Ben and Tyler pushed Copilot OneClick for Mac to our production servers late yesterday. It took us longer than expected to get this release out the door. We have been working on several new features at once, but decided to take a break from that and get OneClick out of the way. It turns out that single-minded focus leads to more rapid software releases; who knew?

Just head over to Copilot.com if you want to give it a try.

This is the Copilot team's first time writing an installed application for the Mac, and we learned a bunch of new stuff about the Mac install/uninstall/upgrade process. We had started out wanting to write our own installer (the app is really so simple that it doesn't need much in terms of setup). We even went through the process of doing that. It was two screens and extremely simple. The problem? It wasn't "Mac" enough.

It was actually disconcerting as a frequent Mac user to have the OneClick installer not look like a regular Mac installer. No gum-droppy progress bar. No cathartic installer complete ding noise. It made the setup process feel abrupt and a bit too magical. Ultimately, it left me skeptical that the custom installer had actually done anything. We decided that it was time to try the installer resources that Apple provides. A few hours later we had our website generating basic installers, and even though it didn't actually work correctly, it felt like it was doing something. The familiarity was comforting in all the right ways. It is just one example of the way that Apple makes good on the promise of a consistent rich UI experience.

Our second "Not Mac enough" moment came when creating the Copilot icon that appears in the menu bar to let you know that OneClick is running and whether or not it is connected to our servers. The first incarnation of the icon filled the bar from top to bottom, but it looked crisp. It's not written anywhere that menu bar icons shouldn't use up all of that space, but not one of the icons I have does it.

"It just doesn't look right; shrink it!" I decreed.
"No problem. That's easy." I was told.

But those bitmaps are pretty small, and scaling a compressed image like that causes some interesting artifacting. The scaled icon lost all of its rounded edges and became noticeably blurry. So it was back to the original vector logos for a complete redo. We're happy with the result now. That rounded edge is just a trick really (it's about one pixel), but it looks polished and feels Mac-ish. It fits right in next to my Adium duck and cardboard box from DropBox. I was impressed by the pressure that the polish of Mac OS put on us to pay attention to a few details that we might have otherwise ignored. The end result is a product that feels like it fits into the landscape of Mac apps in a clean way.

As always, if you have comments or feedback, let us know!

December 08, 2008

Dogbert: The world's worst helper

Dilbert.com


Good thing you can disconnect someone with one click ;-)

November 24, 2008

Why QA is Important

Copilot This is a diagram of most of the code bases within Copilot. Of the sixteen nodes displayed, we actively maintain fifteen. Of those, four integrate with other Fog Creek products, like FogBugz. In our most recent product release, Copilot OneClick, we heavily modified nine components and added two. It was the most complex release in Copilot history, yet it was the smoothest.

Often when we've released new software, it happens in starts and fits. We would push something out only to realize that we'd forgotten a crucial config setting or had left in an extra bit of logging. Sometimes two new components would conflict with each other. To fix it, we would roll back to the previous working version, make our fixes, test them out on the staging server, and roll it back out.

It sounds like we were being irresponsible, like we were pushing new code with many substantial bugs. The reality was that it was always something small and easy to overlook, which got amplified into a much larger problem by the complexity of the many interacting systems. Forget to put a default on a column in a new table and five different components could simultaneously crash.

The problem was that Ben and I were too close too the code. With only two of us working on the project, there was never any way for us to test code without having worked on it, and that made us bad testers. We knew too much about how the application was supposed to work, which made it easy to overlook small but important details. But a couple of those small mistakes would quickly turn into an outright crisis.

We had an outside QA analyst at the time who helped test Copilot's user experience. Her input spurred changes that made Copilot much more intuitive and sleek. But she was usually testing individual components on internal servers, not the end-to-end system on production servers, except for the largest releases.

Then in March our QA superstar, Alison, came on to the Copilot project. For the first time in three years we had a full-time, dedicated tester with enough time to do both targeted component testing as well as end-to-end system tests.

At first I felt a little internal resistance to her feedback. I knew I wasn't writing perfect code, but I didn't really like someone else pointing it out to me. It took a little while to understand that she was not trying to prove me wrong, that our goals were actually identical. Soon, I began enjoying getting assigned cases from her. They were detailed reproductions of the bugs, making them easy – and fun – to fix.

Soon we got into a nice pattern: I would typically work a couple hours later and kick off a build before I went home. Then, in the morning before I got in, she would start testing the new build. By the time I got in, I would have a list of things to fix, which helped me focus my time, making me a more efficient coder. As we got closer to releasing, we would push builds to the staging servers, and in a matter of hours before we knew, for sure, whether the build was ready to go to production.

So did she find all of the bugs before we pushed to production? Not quite. We released OneClick with one significant bug: the installer could not be downloaded from Internet Explorer because IIS injects extra HTTP headers into HTTPS connections, which IE then has trouble understanding. She caught it on the production servers a little after we rolled out. The funny thing is, it's a bug we've fixed before, just one line fix in ASP.Net:

Response.ClearHeaders();

So why did we miss it before going live? Because our staging server doesn't use HTTPS; it's not close enough to the production server. It wasn't possible for her to find that given the testing environment. But that was it. Really. Nine components significantly modified, two new, and only one line needed to be changed in all of it. We didn't even need to cut a new build, we just pushed out one patched file and all was fixed.

Instead of the panic and worry that we'd experienced before, now pushing new code is a calm, steady process. We can be confident in the quality of the code. They key was to get another pair of eyes on the product, someone who could ask the questions that we didn't think of while coding.

Cross-posted at http://hicks-wright.net/blog/why-qa-important/

November 21, 2008

The Heretical Developer

What kills me is the teams who get into the bad habit of holding meetings every time they need to figure out how something is going to work. Did you ever try to write poetry in a committee meeting? It’s like a bunch of fat construction guys trying to write an opera while sitting on the couch watching Baywatch. The more fat construction guys you add to the couch, the less likely you are to get opera out of it.

I love meetings.

That’s a pretty heretical statement. I suspect most diehard bureaucrats just tolerate meetings, and Joel—whom I might emphasize has more than a passing relationship with Team Copilot—has spoken rather strongly against them in the past. Hell, I grew up hating meetings, and I’d be lying if I said that part of why I loved the idea of working at Fog Creek wasn’t that the company has traditionally had a strong anti-meeting culture.

That’s not to say Fog Creek doesn’t ever have meetings. We do. It’s just that, when we do have meetings, they’re usually rather targeted in scope—to the point that, for the first two years I was at Fog Creek, basically every meeting I attended was either a product demo, a discussion of Fog Creek’s finances, or an argument over what features were going to go into the next version of a Fog Creek product. The logic behind focused meetings is that they cannot drag on indefinitely. You’ve come for a specific purpose; when you have achieved it, the meeting is over. The ability to simply spin wheels and waste time has been cut to near zero.

Yet I got out of a meeting ten minutes ago that, although I didn’t call, I would have if Tyler did not. The agenda for the meeting was that we hadn’t gotten the team together today. The meeting was over when everyone had said everything they felt like talking about.

We have meetings like those daily. And it’s that kind of meeting that I’ve come to love.

“What the hey?” I hear you ask. “Those are exactly the kind of meetings that suck team productivity, lead nowhere, and derail your project. Are you having a dry martini that’s clouding your judgment?”

Well, yes, but that’s immaterial. I used to agree with you. What changed my opinion was Copilot OneClick.

Copilot, like the rest of Fog Creek, used to shun meetings held just for the sake of having a meeting. Historically, that had served us well. Tyler and I generally work on individual Copilot components by ourselves. For example, I managed the Copilot Reflector by myself for almost all of Copilot’s life until this past summer, and have managed the end-user clients by myself for more than a year. Tyler managed all of the website, internal tools, encryption layer, and direct connection daemon. There wasn’t a pressing need to communicate much—most of what we did we could do without consulting the other, and where we did have to talk, most of these issues could be managed trivially through a couple of email exchanges.

Things changed when we were doing Copilot OneClick. Leading up to Copilot OneClick, Tyler and I had decided that we needed to add auto-update functionality to Copilot. We had found that many of our customers would download a Copilot helper application, then leave it around indefinitely while continuing to use it. We initially hadn’t anticipated this usage of Copilot. Copilot was, after all, originally designed as an ad hoc remote assistance solution. You don’t keep around ad hoc libraries. Yet here we had customers keeping Copilot executables around and reusing them time and time again.

In the long run, that was a large chunk of what made us realize that Copilot OneClick would be a valuable product, but at the time, Tyler and I were faced with the more immediate concern that Copilot could not technologically handle this scenario. We had counted on the ability to upgrade clients at will. Having legacy clients in the field meant that we had to maintain backwards compatibility in a protocol and application stack that we had never built to do so.

So, we decided to introduce automatic updates. When you downloaded Copilot, you’d be downloading the current version, plus a stub that was smart enough to download a newer version if one were available. I calmly forecast, based on exactly the schedule technique that Joel advocates, and which had traditionally served us well, that I could have that done in a month or two.

That was in April 2008. Those of you who are loyal Copilot users probably know that you didn’t get that functionality until July. What happened?

Miscommunication. Or rather, not miscommunication, but an absence of communication. When you don’t talk to others, it’s easy to find yourself in a bubble where, despite your best intentions, you will misprioritize your agenda.

That’s exactly where I found myself six and a half weeks after promising to get automatic updates out the door in four. I had been determined at the outset to learn from the lessons of Copilot, and part of that meant that downloads should happen asynchronously. Not in their own thread, but rather using the existing asynchronous callbacks provided in the Windows WinInet library—the same library used by Internet Explorer. But it turns out that Microsoft’s documentation for asynchronous downloads with WinInet…well, it sucks, and I ended up spending many days trying to determine why programs that looked correct to me failed, reading over WINE source code, writing tiny demo programs, and even looking at CityDesk internals at one point to see what Joel and Michael had come up with in a similar situation several years earlier. In short, I had completely forgotten to focus on building a feature, and instead become sidetracked on solving a technical problem that was, at its core, irrelevant to what I was trying to accomplish.

But Copilot didn’t have meetings then really at all. Tyler just trusted I knew what I was up to, and as the schedule slipped, he and Jason just assumed—correctly—that I was working on it.

Finally, they reached a breaking point. Jason and Tyler wanted to know what on earth was going on with the auto-update solution. I told them what was going on, and one heated discussion later, we agreed that I should quit trying to come up with how to do the “correct” solution, and instead focus on shipping a solution that worked, regardless of how it was implement. Two days later, I had a “kluged” solution done that worked just fine, thankyouverymuch, using multiple threads, and it was out to customers within about a week.

Since then, Copilot has had daily scrum-like meetings, and we haven’t looked back. Even though the meetings have no set agenda, we’re disciplined enough that our meetings generally last only five minutes, and they help keep us focused on getting solutions finished that are relevant to our customers, instead of getting sidetracked on technical digressions. They also help keep us abreast of what others are up to, specifically so that none of us accidentally end up losing sight of the forest for the trees, and focusing on a technically elegant solution over a pragmatic one.

The result? Copilot OneClick for Windows was in your hands six weeks after we initially decided we should do the product. Mac auto-update was done in two weeks of development, and Mac OneClick will be out by the end of November. And, as much as I hate to admit it, we owe a lot of that to meetings.

If being a heretic means we ship good products on time, I’m all for it.

November 19, 2008

Mac Clients getting auto-update today

Our Mac customers have just gotten a fresh build of the Copilot clients which include the auto-update feature. This means that you can reuse the same invitation code over and over while being guaranteed to have the latest version. It is also the last feature that we needed to implement before giving you Copilot OneClick on the Mac.

We don't anticipate any major issues with this update, but please contact us if you see anything unusual. If all goes as planned, Mac OneClick should follow in a few days.

Catsitting just got easier

From our internal twitter-like feed:

Metrocard: $81. 
Lunch: $9.
Logging into my home computer with Copilot One-Click and playing Mozart for my cats: priceless.

Maybe now my cat won't look at me like it wants to kill me.

November 18, 2008

Copilot mon amour

When you're in Quality Assurance and working for a large company with numerous products and a huge customer base, it's sometimes difficult to have a grip on who your customer is, how they use the product in real life and how your role in QA actually ties into their experience.  

One of the things that was most exciting to me about joining Fog Creek was the opportunity to work on Copilot. I loved the idea of a tiny company-within-a-company concept and, of course, I was super enthusiastic about the product itself [having worked with clunky remote desktop software in the past, Copilot was simply a breath of fresh air].

What I didn't expect to experience was the intense feeling of pride and ownership around the Copilot product that I would begin to experience very early on. Instead of feeling like merely a tester, I began to feel more like a customer advocate. I've always cared about finding as many bugs as possible but I now have a renewed interest in making navigation clear and easy for the end-user and really wanting our customers to be as excited about Copilot as I am! On any given day, it's not unusual to hear me sincerely say, "I love Copilot!" I can't say that I've ever proclaimed true love for a software product before.

That's what you get with Copilot. A small team of people who truly cares about giving you the best possible product, is excited about our future with you and one that is genuinely interested in what you have to say.

All of this at no extra charge.

November 14, 2008

Reddit Army

Reddit Army
Yesterday, an army of reddit bobbleheads showed up on our doorstep.  Fortunately, they came in peace. Thanks reddit guys!

Resources

  • Give us feedback!
  • Customer Support

  • Fog Creek Copilot
  • Status Blog