What Does CityDesk Do?

CityDesk is a Windows program that makes it easy to manage a web site which changes often.

With CityDesk, people who don’t know anything about HTML or web servers can easily add, edit, and remove articles from a web site, using a program that is as easy as a word processor. CityDesk will automatically apply standard formatting, according to templates you provide, to those articles. Then it copies them to your web server automatically. Each article can include pictures, sounds, and other media elements.

Here are just a few examples of the kinds of things you can build and maintain with CityDesk:

  • A daily newspaper, a monthly newsletter, or a web-based magazine
  • A personal journal or weblog
  • A company’s list of job openings
  • A real-estate agent’s list of currently available properties
  • A company worldwide knowledge base

The real power in CityDesk comes from the fact that you only design the formatting of your site once. After that, it’s easy to create new articles which use the same design. Because CityDesk keeps the text of the articles separate from their design, you can change the design in one place, and every article on your site changes accordingly.

Once you set up your site, updating it is just as easy as using a simple Windows-based word processor. The built-in word processor is WYSIWYG (“What You See Is What You Get”) and includes a spell checker, word counter, find and replace, and formatting commands.

CityDesk is built around a powerful, robust database engine. This means that different people can update the site simultaneously without any risk of conflict or corruption. You can even have a whole newsroom banging away at the same time; even a virtual newsroom, with contributors all over the Internet!

When you need to manage a site with several different versions, CityDesk is invaluable. Suppose you want to publish a newsletter every week in two languages. CityDesk provides a nice interface for translators where they can see a list of untranslated articles and translate them on the spot in a split-screen environment. If you try to publish the site before everything has been translated, you’ll see a warning.

Or suppose you produce a newsletter that has different regional editions. Most of the articles are the same, but you don’t want to run your poem “Every Civilized Person Loves the New York Yankees” in the Boston edition. CityDesk keeps track of that and publishes both editions completely automatically.

CityDesk can also keep track of articles that need to be held until a certain date. Just write the article and set the date range, and CityDesk will never publish it before or after those dates. This is a good way to keep fresh content on your web site when you’re on vacation.

Many web sites appear in multiple formats. For example, you might have:

  • the normal web version
  • a “printer-friendly” web version without ads or navigation elements
  • a version for Palm Pilots without pictures
  • a large-font version for the web site for people who like larger fonts
  • a printed version that you hand out on street corners to passers-by (who use it to line bird-cages, those scurvy knaves)
  • and so on and so forth.

Setting up template families for each of these versions is a one-time operation. After that, you only have to type in the article once, and it will automatically be published in each and every format without any additional work. Ta da!

We think you’ll find that CityDesk is an extremely powerful tool, but one that’s quite easy to understand. There’s a tutorial which will take you on a whirlwind tour in about ten minutes. After that, you’ll only need to consult the documentation occasionally.

CityDesk will be in beta from Oct 15 – Nov 30, 2001, after which it will be shipping. Click here if you would like to apply to be a beta tester.

Working on CityDesk, Part One

I’ve been rather quiet lately on this weblog — mainly because we’ve been working so hard at Fog Creek getting ready for the beta of CityDesk, our flagship product. But I’d like to spend some time now talking about the design and development of CityDesk, because it’s a great case study for the kind of software development practices that I’ve been advocating here for more than a year. Over the next few columns, I’ll focus on “The Story of CityDesk,” with a look at some of the behind-the-scenes, day-to-day stories of a real software development project.

We’re launching the beta on October 15th — just three days away! This is officially On Time. We made a schedule for shipping CityDesk way back in June. We figured out estimates for all the remaining tasks and bug fixes, added them up, and got October 15th.

Every couple of weeks, we checked through our task list, revised estimates, and so forth. We’ve found a lot of bugs over that time and added a lot of small features, but we’ve also killed a lot of features that we just won’t have time for. And lo and behold, now we are almost completely done. Michael's cool crash handler actually enters diagnostics right into FogBUGZ. Most of what we’re doing these days is getting set up to run the beta. Michael added a dialog box to CityDesk for sending feedback. He also wrote some very spiffy code that catches any unhandled exception on any copy of CityDesk running anywhere in the world, prevents the app from crashing, and pushes the exception info up to our FogBUGZ bug tracking database here in New York City. I’ve been fixing bugs, writing the help file, and writing some pages for our corporate web site that will explain what CityDesk is and why you would buy it.

A common misconception, I assume popularized by Hollywood, is that as you get closer to shipping software, activity becomes frenetic as everybody scrambles to finish all the things that need to be done in time for the deadline. In the typical crappy movie, there’s a mad rush of typing in a room full of cool alterna-dressed programmers with found-object earrings and jeans jackets. Somebody stands up and shouts to the room in general “I need the Jiff subroutine! Somebody give me the Jiff subroutine!” A good looking young woman in Vivienne Tam urbanwear throws a floppy disk at him. “Thanks!”

Yeah, most programmers are as cute as Ryan Phillipe. That's why I'm in this field.As the second hand swoops towards the :00, the whole team waits breathlessly around Ryan Phillipe’s computer and watches the “copy” progress indicator as the final bits are put onto a floppy disk with less than a second to spare before the VC cuts off funding.

I suppose some software shops have last-minute coding frenzies like this. If so, their software is probably marked by incredibly poor quality. No code works the way you expected it to work the first time, and if you’re writing code up until the last minute, it’s going to suck. The first Netscape open source release, documented in the excellent movie Code Rush , demonstrates this.

On good teams, the days before shipping just get quieter and quieter as programmers literally run out of things to do one at a time. (Yesterday I took the day off to explore New York City with my wee niece and nephews.)

Times Square

The number of new bugs being found has decreased to a point at which we feel confident about releasing the beta. It is crucial to get to zero known bugs (what Netscape famously called “Zarro Boogs”) before releasing a beta. If you don’t, you’ll waste a lot of time during the beta reading 200 emails about a bug that you already knew about. And you’ve just used up time and goodwill of those 200 beta testers, so they may not bother telling you about the next bug they find, something you didn’t know about. Or the bug may stop them from trying other parts of the program that needs some pounding. This seems self-evident, but almost every time I’ve been on a real product, everybody starts to think that releasing the beta on time is more important than releasing a Zero Known Bugs beta. (After all, it’s ok to have bugs in the beta, they say. And I agree: it is ok to have bugs in the beta, just not known bugs.)

I’ll keep posting The Story of CityDesk over the next few days, keep an eye out for frequent updates.

Working on CityDesk Part: 1 2 3 4 5

2001/09/24

News.com reports:

“Gartner remains concerned that viruses and worms will continue to attack IIS until Microsoft has released a completely rewritten release of [IIS] that is thoroughly and publicly tested….Gartner believes that this rewriting will probably not occur before the end of 2002.”

Gartner seems to suffer the common but moronic fallacy that new or “completely rewritten” code is somehow less buggy than old code. IIS has been publically tested, for about six years now, on millions of web servers and with thousands of hackers trying to find bugs. Completely rewriting it would just introduce another set of bugs that would take another few years to find. Chances are that nobody on the current IIS team even remembers the bugs they fixed five years ago, even if they were on the team that long ago (unlikely), like the $DATA$ one and adding an extra period to the end of an ASP URL.

Completely rewriting code is a big-time mistake common of immature developers with no real software experience. I would say that “Gartner should know better” but I don’t have very high expectations of them.

2001/09/12

Quiet day. The weather is perfect. The southern sky is still filled with white dust.

I saw an old couple on the corner holding hands. They weren’t going anywhere, just standing outside looking at the sky, happy to be here.

2001/09/11

Michael and I tried to give blood, but the hospital had loud announcements on the PA saying “keep away from the hospital, please do not mill around outside.” Volunteers told us that the blood donation centers were overloaded anyway and we should come back tonight or tomorrow.

Up here on the Upper West Side, about 5 miles north of Ground Zero, I saw streams of people in business clothes walking home. I saw people planning to walk all the way up to the George Washington bridge and then across to New Jersey where they lived.

All mass transit was stopped completely. The streets were very quiet around here, there was very little traffic. Many streets were completely closed to traffic.

Friends in Brooklyn reported watching the buildings burn. Many people who lived in Brooklyn were stuck in Manhattan. We heard a few subways are running now. My friend Lisa had some business downtown today. When she got out of the subway, she saw all the chaos and went back down to the subway. She came to visit me uptown and is now trying to work her way home to Park Slope. (She made it. About half of the city’s subway lines are running.)

Jared (my boyfriend) is stuck in Connecticut for the night. He works there, in Old Greenwich, and all bridges into the city are closed, so he’s spending the night with a friend from work. I’m going out to dinner now with some friends. It looks like tomorrow the city will be completely shut down, too.

8:00pm I spoke to a policeman in a restaurant. He said that 400 policemen and firemen were killed when the buildings collapsed. They were in there rescuing people. He said he will always remember the screams he heard from trapped police over the radio.

(He also said that Israel was attacking Afghanistan. Police think the weirdest things.)

2001/08/31

And You Thought You Had Source Control Problems

Ray Ozzie sent me a link to a presentation given by Mark Lucovsky, a developer at Microsoft, about the Windows NT development process.

29 million lines of code. Source code takes up 50 gigabytes. Build takes 8 hours on a 4 CPU machine. 1000 machines in the “stress test” farm.

No, they don’t use SourceSafe.  But I don’t think CVS could handle it, either.

2001/08/23

Ron Vogl writes:

I did an internship at Microsoft in the summer of 1997, and at that time, Microsoft had two source-code control tools in use.  Some groups did indeed use source-safe.  The Outlook group, of which I was a temporary member, used an internal Microsoft tool called Source Library Manager, abbreviated SLM and pronounced either slim or slam depending on how you were feeling about it.  SLM was command-line only, with a mix of SourceSafe- and CVS-style workings.  From what I could gather from the interns in other groups, SourceSafe and SLM were used in roughly equal amounts.

Yeah, I used SLM in the old days. Given how devoted Microsoft is to eating your own dog food, the fact that there are still groups that don’t use SourceSafe says something about how bad that product must be.

Ask Joel

… in which I respond to some interesting email I’ve gotten lately. All the incoming email has been edited for brevity.

Charles Lin writes:

I teach a C++ computer science course here at University of Maryland at College Park….

Presume you are the czar of University of Maryland Computer Science (you’ve just dreamed about this, haven’t you?), and say “things need to be changed — we need to teach computer science the right way”, what would you do? What do you think are the important things students need to learn if they are to become good C++ programmers.

Off of the top of my head, some of these topics are:

  1. the relational model and modern DBMSs
  2. user interface design and usability
  3. techniques for coding on large teams
  4. software design and writing functional specifications
  5. debugging
  6. Windows and COM programming
  7. sockets programming and common Internet protocols
  8. database-backed web site development
  9. writing! Because great programmers are great communicators.

Dan Green writes:

I read sometime back that you were going shared sourced (for want of a better term) with FogBUGZ. I’m going to be wanting to do similar on a product of mine but I’m not sure how best to word the license. Would you mind sharing the FogBugz license, so that I can learn from it?

Sure. It’s here. I suggest you get a lawyer, though, to review your license. (If you have Errors and Omissions insurance, whatever the heck that is, you are probably required to do so).

Paul Wolpe writes:

I graduated from Carnegie Mellon in May and was happily planning on working for Loudcloud in New York City this fall. It seemed like the best of both worlds; I could work for a tech company and I wouldn’t need to live in the suburbs. Well, due to “unfavorable market conditions” I am now without a job and faced with what appears to be two options: go work for Microsoft in Redmond or work for some financial company in New York City. I have to choose between a great job in a not so great location or a great location with a not so great job. I am not asking for a job (but I would gladly accept if you are offering!). I want to find out if there are any interesting tech companies in New York (and even better if they are hiring). So far, I have found a total of maybe 3 companies, and that includes Fog Creek.

Oooo. Uh-oh. I have two pieces of bad news for ya. No, wait, three pieces. Number one: there aren’t that many technology companies where you can do R&D in New York City. Every local programmer I know complains all the time about how hard it is to get interesting software jobs that aren’t at a bank. That’s one of the reasons I created Fog Creek. Which brings us to bad news number two: Fog Creek is not hiring, because we can’t afford to right now, which is caused by the dot-com crash, which is bad news number three: there’s a bit of a recession going on right now, especially in the tech sector… which means that almost nobody is hiring.

But there is good news, which is that every programmer I know has some job. Maybe it’s not their dream job, but it pays the rent.

The good thing about working for Microsoft is that Microsoft is one company that really knows how to make software, and you’ll learn a lot that will help you wherever you go. And the good thing about living in New York City is, well, OK, I don’t have to explain that. I think in your place I would come to the city and spend some time hopping around, waiting for something interesting to show up. (Pay your dues at the banks and media companies like the rest of us!) Oh, and email me your resume anyway, you never know what might come up.

Gabriel Krupa writes:

I have been a fan of yours for a while and would very much like to start my own company, modeled after Fog Creek (on the other side of the country). Given the business climate lately, I’m hesitant to leave “subsistence programming” (and give it a go with my own savings) until I plan, scheme and “strategize” myself into a false sense of security. I understand the importance of leveraging work to generate money, lest I spend the rest of my life running a consulting firm. Unfortunately, it’s not easy to pay someone else’s salary from my margins unless they’re generating part of that revenue for the company– at least with my hourly rate. Thus, I’m still a company of one with less time than I’d like to devote to building the company.

This is where I get to the point. I’ve read your admissions of how much it takes to run Fog Creek on a monthly basis and that you’re making most of that through consulting. I’d like to find out about Fog Creek’s shrink-wrap strategy and results to date. If you’d rather not share this information, I understand.

For instance, I’d like to know:

  • how much revenue you generate from FogBugz and expect from CityDesk

    FogBUGZ is not yet at the point where it’s paying anybody’s salary, but it does cover virtually all of our non-salary expenses (rent, T1, etc) and then some. Which is nice. Yesterday we sold $5700 worth in one day. Whoo hoo! Your mileage may vary.

    We expect CityDesk to have a much wider potential audience than FogBUGZ, so we’re hoping that once CityDesk hits its stride we won’t need any consulting revenue to support ourselves.

  • what sort of growth you’ve seen and expect(ed) in sales

    It’s probably too early to see a pattern, but there has been slow but steady growth as the word spreads. We are not doing any active marketing on FogBUGZ at this point, mainly because we want to conserve any marketing dollars we have for CityDesk.

    Even without funding, we hope to be able to get to the point where we can demonstrate that (a) we’re profitable and secure and (b) x dollars spent on marketing results in x times y dollars in revenue. At this point, if y > 1, we can make a strong argument to raise money for marketing without giving up very much equity… or we can go slowly and simply reinvest internally.

  • how you choose your product lines (e.g., why you chose to make FogBugz and CityDesk instead of other products (user demand and market conditions being roughly equal))

    FogBUGZ was something we had, so it was a no-brainer to ship it: both to get some cash and to get some practice selling software. (And to get the people off our backs who kept asking us if they could buy it.) It has more than paid for its own R&D costs, so now it feels like one of those mystical things you hear about on late-night TV that you set up and get a nice check every month in exchange for doing nothing. (We do still plan several more major releases of FogBUGZ so it’s not exactly nothing but you get the idea).

    CityDesk will fill a very major vacuum in the desktop software marketplace, it’s a great product, and everybody who’s seen it has said “I gotta get me one of those.” So we’re working day and night trying to get the beta out the door.

  • if you feel your reputation and product quality are enough to gain market share in non-virgin markets (i.e., defect tracking) or what Fog Creek’s strategy is

    There are about 1000 bug tracking packages on the market (from companies who are probably selling it for the same reason as we are — because they have it.) So we didn’t know if we would sell any copies of FogBUGZ. As it turns out, the FogBUGZ philosophy of painless bug tracking has hit a nerve and the product has exceeded our expectations and then some. People are also happy because we’re a small company that provides fanatical customer service… when you find a bug and call our toll-free number, you’ll speak to a programmer and probably get a bug fix shipped to you that day.

  • whether or not you’re presently concentrating on non-consulting revenue

    We’re trying to avoid taking new clients for a while, since we don’t actually need the money and would rather have CityDesk done right now. But this is something we reevaluate constantly.

Ted Graham Writes:

Since you are an ex-microsoftie, I have a question for you: does Microsoft use VSS for their projects? I can’t see how they would, it doesn’t seem to have the features needed to support multiple versions. I’m a consultant on a fairly large VC++ project on Win2K and we are about to make our first shipment to the end users. I’ve been looking for a way to do branching like I’m used to in PVCS, but not finding anything. It seems like it has labels available, but we can’t branch an individual file off and label the branch. Any ideas?

I can’t really speak for what Microsoft uses; I haven’t been there in years and SourceSafe didn’t exist when I was there. But I have heard only bad things about it. What I’ve heard from other programmers is that it’s not so strong in the data reliability department. Oops.

Do yourself a favor – use CVS like everyone else; it’s simple, reliable, ubiquitous, and rock-solid.

2001/08/22

For today’s topic, I answered some interesting questions readers have sent recently.

“What do you think are the important things students need to learn if they are to become good C++ programmers?”

“I want to find out if there are any interesting tech companies in New York…”

“I’d like to find out about Fog Creek’s shrink-wrap strategy and results to date.”

“Does Microsoft use VSS for their projects?”

These and more… in today’s installment of Ask Joel