Monthly Archives: March 2005

Joel’s SDE Job Posting


I’m a pretty big fan of Joel Spolsky, I don’t necessarily agree with everything he says but there seems to be a rational basis for almost everything he says. Today whilst deleting my e-mail I spotted a link to his latest article about the road to FogBUGZ 4.0, but also a link to this job posting (don’t worry Graeme – I’m not going anywhere, hiring just seems to be topical at the moment).


Out of curiousity I clicked on the link to see how he writes his job posts, and I was so impressed with what I saw that I thought it would be fun the analyse it line by line – not just to restate the obvious, but see what is written between the lines.


First off, its starts off with a pitch telling the reader who Fog Creek Software is, their reason d atre’ and why they want to hire more staff.


Fog Creek Software is a small startup in New York City. We started in September 2000 based on the simple idea that if we built a company that was a great place to work, we would be able to attract great talent. Sales of our products CityDesk and FogBugz are growing rapidly, and we need help coping with the demand!


Pasted from <>


Working for a company that knows what their business is, has managed to produce a demand (largely through word of mouth I might add) for their product is a privilege that not many of in the software business are blessed with.


The beauty of being up front about the company and the vision means that the reader can either sign on or bail out early. On my frustrations about the way recruiting organisations work is that they shroud the potential employer in anonymity. If the company expects to hire the best people they should be brave enough to say who they are and what they stand for.


Assuming you read past the first two sentences you are confronted with this little bullet point.


  • Design, develop, code, test, document, and support the software that makes Fog Creek great. You may be working on CityDesk, FogBugz, our internal systems such as the Fog Creek online store, or upcoming, unannounced products.


Pasted from <>


Its speaking right at the developer now, the first six words are the job description and it clearly tells you what is expected to you. It could only be better if design, test, document and support were bolded or capitalised. The trailing sentence tells me that when work needs to be done its all hands on deck to get the job done.


Part of shipping software includes building the sales channels and for the shrink wrapped little beauties that Fog Creek make that means you may just have to maintain shopping cart code so learn to deal with it. Another thing that I really loved was the last sentence on this bullet point.


  • We do not hire based on a specific list of buzzwords, technologies, or popular acronyms on your resume. Today we happen to use C++, Visual Basic, VBScript, Perl, PHP, Java, JavaScript, XHTML, CSS, and C# in our organization. Tomorrow we may be using something different. Whatever technologies, languages, or development environments you’ve been using, we expect you have mastered them in depth, and we expect that you will be able to master any technology, language, or development environment that we need in the future.


Pasted from <>


I love it because recently I’ve had to sit in disbelief as team leaders have told me that they can’t build something in technology X, not because they couldn’t technically achieve it, but because some of their staff members could complain because they haven’t been given a six months notice that they are going to have to work with it.


Is it just me or are these people in the wrong industry? The personalities that we need in this industry are those that not only cope with emerging technologies but master them.


If during a chat in the coffee room someone floated the idea that we might want to look at technology X to solve problem Y – you can bet that I would be hitting the Internet that evening to understand everything I could about it to be able to contribute intelligently to future conversation and help make more informed decisions.


Now, if you are left in any doubt about the breed of person required for the job Joel pretty much nails it with this next bullet point.


  • Incredible coding skills. Your friends and coworkers describe you as an “animal.” Your programming ability is way above average, as demonstrated by a continuous string of successful projects.


Pasted from <>


Only a geek could appreciated being called an “animal”, whilst I’ve been called a “freak” before I’m pretty sure that was only in relation to my ability to read and actually understand an IETF RFC and they apply it talking directly to a POP3 server using a telnet session.


The successful projects thing is pretty important though. The reality is that the odds are against us when it comes to never working on an unsuccessful project. The good thing is that most projects aren’t doomed to failure from day dot. It takes carefully applied mismanagement and incompetence coupled with a complete lack of desire to get there.


I think Joel is looking for the people that have had enough desire in the past to balance out the mismanagement and incompetence and come out a winner. I guess the theory goes that if you can do that with a hopeless situation then imagine what you could do if you worked in a well maintained incubator.


And finally, the benefits.


  • Competitive salary commensurate with experience
  • 21 paid vacation days per year
  • 4 paid company holidays per year
  • Health insurance including spouse and family
  • Dental plan
  • Health club reimbursement up to $70/month
  • Free subway/bus pass (monthly metrocards) worth $76/month
  • Free soft drinks, tea, coffee, etc.
  • Frequent free lunches


Pasted from <>


The nice thing is that its all spelled out here with the only variable really being the base salary. What I find really exciting is that there has been some thought put into where the business is and how the employees are going to get there. I’ve never lived in a city bigger than Melbourne so I can only imagine how hard it would be getting into New York every day in time for work.


All in all I really liked the job post, in fact I might borrow part of the style in future. Thanks Joel!

90cm Space Pilot

My outlaws came up from Melbourne for this long Easter weekend so we took the opportunity to drive around and show them some of the Canberra region. On Saturday we went to a park out at Cotter which had been burnt to the ground after the Canberra fires that swept through the area a few years back.

The park has been rebuilt and has all new play equipment for the kids, so naturally Bella (our 2.5 year old) was climbing on everything and showing no fear – Nicola and I do enough of that for her. I’ve come to understand that Bella is a little bit of a thrill seeker which would be a problem if she didn’t manage to pull off her little stunts. Anyone who takes the time to push per on a swing will no doubt get shouts of “higher” and “faster” hurled at them.

We regularly take her swimming down at the public pool and it is with some pride that I see her race off to the deep end and dive straight in (with a stressed life guard chasing after her). I usually get there in time to let them know that its OK and that she can swim perfectly well – actually seeing her swim across an Olympic sized swimming pool is something to behold.

I’m currently trying to teach her to swim underwater for more than a few seconds and her current technique seems to be something like an anaconda curving its body to propel itself forward as she only kicks with her feet and has her hands by her side.

Like every parent I am convinced that my daughter has something special to offer the world so I try to encourage her to have diverse interests beyond those which stereotypically belong to a little girl.

For example, she has a keen interest in aeroplanes and can spot them in the sky from her car seat with ease. All we hear when driving around Canberra is shouts of “look a plane”. Admittedly it’s a little bit easier in Canberra because most planes fly directly over the region leaving white trails which extend for what seems like hundreds of kilometres.

Of course, whenever I sit in front of the computer she asks me if she can sit on my lap and “fly the plane”. I made the mistake of installing and playing flight simulator once and for what seemed like an entire weekend I sat with her letting her crash 747s into the ground.

Eventually she actually managed to acquire enough patience to get a amphibious plane into the air and then under instruction cut back the throttle and guide it in for a smooth landing on the water again (it seems water is a bit spongier even at that speed).

Her interest in aircraft has never been clearer to me than yesterday when we went to a second hand book store and when asked what books she would like to take home she pointed these two out.

It gets better, on the way home in the car, sitting in the back with her Nanna and Poppa she didn’t want to hear about Peter Rabbit, she was instead more interested in the maximum speed and armaments on the Grumman F-14A Tomcat. It makes me wonder whether computer games like this and this would be more her style.

This curious blend of talents (swimming in a weightless environment) and interests (anything with wings) has led me to believe that her eventual career will be a space pilot, and after yesterday its left me wondering whether NASA has a boarding school program.

Senator Andrew Bartlett blogging – congratulations!

I was reading on of Will’s posts about some proposed legislation that might effect bloggers who want to have an opinion about Australian politics. He pointed out that Senator Andrew Bartlett has a blog, and what differentiates it from alot of the feeds available from the Australian political parties is that its not just a press release feed. It seems to bash it out onto the keyboard himself.

Up until now I’ve only subscribed to the ALP feeds, partly because I wanted to see how the political parties approached this new media, but also because I like reading some of the speeches – but Senator Bartlett has raised the bar in my opinion. Other political parties – or perhaps more accurately – other individuals that form the leadership in political parties should take time out to make a post themselves from time to time.

If you are a politician and you want to set up a blog and don’t know how – shoot me an e-mail and I will help you, in fact – if you want to set up a blog full stop, shoot me an e-mail and I’ll show you how.


Use of GOTO and other forms of Satan worship.

There is currently a thread running on the [aus-dotnet] mailing list about some of the features in C#, those that are there, and those that are perceived to be missing. Of course, someone had to bring out the OO stick and start waving it around and Dr. Neil sagely pointed out that its possible to write OO code without a language that supports OO concepts – its all about the developers state of mind.

Minas Casiou from CSC pointed out that even things like GOTO can be useful too. He’s right! Computing depends on them, although I can’t really say that I haven’t put the boot into the humble GOTO construct in the past, in fact when I see it in code I tend to have a WTF moment.

Fundamentally, all programmers ever do is build abstractions, GOTO and its kind just happen to live at a layer in that abstraction stack that most of us don’t feel comfortable working in any more. It made me think of this little quote that we use during our IS.NET course.

“Between keyboard, screen, and hard drive, I build palaces of abstractions. Layer upon layer, and when the abstractions become simple enough to do my so-called work, I feel happy. When the abstractions let me down, I refine them. Hopefully I can wrestle these abstractions into submission and accomplish what I want. When everything is done, I will have built a shiny new abstraction for someone else to use to do so-called work. If lots of people use my abstraction in their palaces, I will be very happy.” – Source.

The problem is that most abstractions leak (read about the law of leaky abstractions here), and when they do you find  yourself dealing with things that you thought you had moved on from.

Take a look at the .NET runtime for example. If you take a surf through the .NET Framework with .NET Reflector you’ll often find “goto” instructions in the code – in fact, if you take your IL raw – pretty much every method will jump from one location in code to another labelled position. Most of the time these are your humble language constructs like if blocks and while loops – but sometimes you’ll find one that doesn’t seem to correspond to any higher level abstraction (that’s right – if is a high level abstraction).

I’m not certain, but I suspect that this isn’t just some compiler quirk, but instead, its actually a hand crafted optimisation where the developers of the .NET Framework found that their blunt C# or VB.NET instruments were insufficient and they needed sometime more precise.

Basically – the abstraction leaked. Think about this the next time you go to criticise the GOTO statement – while the developer might be using it for evil things – the construct is certainly not evil itself.

The Software Inventor

I’ve decided that I am not a software architect, or at least, while I have the requisite skills to perform that job function and often do, I prefer, in the comfort of my own home, not to think about new ways of building a data access layer or laying out PowerPoint slide decks which clearly show that MY application actually has FOUR (!) logical layers and why that is oh so much better that the usual THREE.

I like to think that technology is a tool that can drive the human species forward, doing the mundane so that individuals can achieve great things. Because of that vision I can often be found scribbling away on a piece of paper trying to map out some concept which came to me while I was in a bit of a dream state. Am I mad? Possibly. Am I alone? Hell no.

There are people out there today, they probably sit one cubicle over from you, who in their spare time are concocting great new things using their skills. These Software Inventors live their life leaving a trail of half completed diagrams which are the result of their continual context switching. But if there are so many Software Inventors out there – why don’t we see the fruits of their labour.

Well – it comes down to economics. Many of these people have families, they want their families to be well feed and catered for – that means building the same application over and over again.

As an individual they would probably be happy sleeping on a mattress under their desk retreating to it when they need inspiration or when they just can’t code any more, but what they really want is that new challenge. They want to write that piece of software that is going to make things better, not worse – they want a chance to execute on their dream induced designs.

Sigh. Anyway – back to my data access layer.

I need OneNote embedded in Outlook.

I use Microsoft Outlook. I’ve been using Microsoft Outlook for approximately seven years, and before that I used tools like Microsoft Mail, and that weird forerunner to Outlook which included Schedule+. I think this entitles me to make contribute to a few design goals around the product and how it integrates.

Before Office 2003, Outlook was pretty much the only Office Suite application I cared about, whilst I used the others (Word, Excel, and Access) its Outlook that I said good morning to and Outlook that I said good night to. When Office 2003 was released OneNote really caught my eye, and its now my second most used Office application.

The thing that confuses me is that in Outlook we have this STUPID “Notes” section which is essentially no better than a NameValueCollection of strings. Now, I’ve gotta wonder, did the crew working on OneNote think – “hey we have this thing that is really good at managing the crap you’d usually have scattered all over your desk, lets embed it into Outlook and replace that cute, but generally useless Notes feature”.

Did the Outlook heavies stomp on them? They are probably the same guys that have resisting putting an actual NNTP feature into the product for the last five years (sorry, outsourcing it to Outlook Express doesn’t cut it).

Anyway – I think the next version of Outlook needs to rectify this. I’d like to see a nice little threesome, my data, Outlook and OneNote all playing in the same process space with lots of sharing of object handles. Is that too much to ask?

P.S. In between 1997 and now I did use Netscape Mail on a rusty old Linux box I had kicking around – it didn’t last long and it didn’t mean anything.