Topic: Opinion

Professionalism

If you're new here, you may want to subscribe to my RSS feed or you can register for email updates. Thanks for visiting!

A few years ago I was subcontracted to one of the large consultancies. I was taking over from someone who was, supposedly, quite senior and the task at hand, I was told, was very hard. I should take copious notes as she wouldn’t necessarily be around afterwards to help me. Making a mistake or missing out any one step could be disastrous to the whole process. If I did everything properly each new installation would take about a week.

This turned out not to be entirely correct.

After sitting through over a week of her spelling out each and every step in excruciating detail — much of which I don’t think she really understood — I spent three days writing a shell script to automate over ninety percent of the process. I don’t mean a quick, shoddy hack either. I spent the time to gold-plate it. It was a work of art. I set it up so that you only needed to copy the one file and allowed for the user forgetting to switch FTP into binary mode1.

In the end, my three days of work reduced the week long process to about an hour, and most of that was waiting for the file to transfer over the network.

I say all this not to show off. I think any engineer would have thought to do this. I note the extra refinements so you realise that it could have been done in much less than three days had I not wanted to practice my Unix-fu.

Result: I was heavily criticised for not following the proscribed process. I pointed out that my new scheme was quicker, easier and less error-prone. They countered that I had been unprofessional to begin a “development project without authorisation.”

What does “professionalism” mean to you?

Sometimes, I think, it’s used as an excuse to do or not do something in a particular way. “That’s not professional” is kind of a cop-out. In this case I can only assume that the real reason was that they wanted to bill a week of my time to the client for each installation. Of course they couldn’t say that.

Since then, every time I hear the phrase “that’s not professional” I try to drill down and find the real, underlying reason. I’m hoping that one of these days I won’t be disappointed with what I find. It hasn’t happened yet.

  1. I basically appended a tar’d and uuencoded file to the end of the shell script which it knew how to extract and decode.

Favourite iPhone Apps

I’ve had my iPhone for over a year now. O2 have got more money out of me than they really deserve given how much I actually use it as a phone, but overall I’m still very happy with it. This is all the more surprising when you consider that I’ve been disappointed with pretty much every phone I’ve had over the years. The last one I was actually happy with was a Nokia 6310i, one of those boring but ultra-competent devices that basically just works. I even got nearly two weeks on a single charge; I barely get two days on the iPhone.

But I digress. This post was inspired by B getting an iPhone and asking which apps she should get. I’ve never actually compiled a list, so here goes…

First, the context. I’m not one of those people who downloads pretty much everything. I’m a long way from having the maximum allocation of 148 apps and I can be pretty ruthless at pruning applications that I don’t use. That means that every application below is something that I actually use and not just like.

Yummy. Okay, so I’m not actually including this in the five. I do genuinely use it every day but I think bias and modesty precludes me from saying it’s one of the best apps on my phone. Still, if you want a delicious.com client it’s the one to get.

In alphabetical order:

Byline. I live in London and spend over an hour a day on the underground, so the ability to read my Google Reader feeds quickly, efficiently and off-line are incredibly useful. The ability to download and read complete web-pages is also great. What’s not so good is the aesthetics (faux wood panelling?!), the time it takes to sync and the fact that some options don’t do the same thing as the web version.

Enjoy Daily Sudoku. I went though a lot of the Sudoku apps, including a couple of paid ones, but this is the one that I use. It’s simple, keeps out of the way and downloads new puzzles from the internet on demand. The layout of the number buttons and the way you can “pencil” on guesses just kind of jells with the way I work.

Instapaper. This is an interesting one. I’d vaguely heard of it but had never tried it until a number of users requested that I add Instapaper support to Yummy. And now that I’ve tried it, I’m hooked. The basic premise is that you tag web pages and Instapaper downloads a text-only version for off-line reading. It makes something that I’m sure is not as easy as it looks very easy and convenient.

Tube Deluxe. I basically bought this as a “thank you” for the immensely useful “TubeStatus” app by the same developer. It lets you know what problems are reported on the various London Underground lines. The extra features in the full version — the map, the departure board and the “locate” function — are less used than the core, free functionality but that does not detract from a very useful app.

TwitterFon. I hear great things about Tweetie but, frankly, as long as there is TwitterFon, which is both free and Open Source, chances are I’m not going to make the switch. TwitterFon is faster and looks cleaner than most of the other Twitter apps I’ve tried. Some functionality is fairly well buried but the options I used every day are well thought out.

If there’s a theme here it’s simple and off-line. And by “simple,” I don’t mean lacking in features. I mean probably doing hard stuff behind the scenes but without exposing that to the user.

And off-line is something that is often forgotten. Yummy, for example, is far more complex than it might have been because I made a huge effort not to lose changes if there is no network connection available. I don’t think it’s unreasonable to expect the same of other developers.

In the end, these are all applications that I use at least daily. I can’t make a higher recommendation than that.

The W Effect

This is probably the meanest article title I’ve ever written, as the “W” refers to a person, someone that I used to work with1. The critical phrase went something like this:

“How hard can it be? It’s only a button!”

Those two, tiny sentences hide a lot. Let me explain.

I’m mainly technical. I have been in the industry for over ten years now, did a computer science degree and spent many hours when I should have been revising for my German GCSE programming my Sinclair Spectrum. This means that when someone says “It’s only a button” I instinctively cringe. I may not know the details but I’ve seen enough “simple” buttons with days worth of work behind them that I’ve learned to be cautious.

Of course, not only technical skills are required for most modern applications. Even a relatively small iPhone utility, such as Yummy, needed some time in front of Adobe Illustrator for the icon. Needless to say, that time wasn’t mine.

I am a keen photographer and I have read The Non-Designer’s Design Book but when it comes to art and design I leave the implementation to other people.

Naturally I have opinions. I may, as a “customer,” have constraints. It has to be a particular size or colour, the shape must evoke a certain feeling or imagery. I probably even have a budget. I instinctively like or dislike designs.

But what I don’t profess to know is the design process or how long it should take, and that’s the problem with the “how hard can it be” quote from above.

“W” was from another discipline, couldn’t imagine what might be hard technically and made a commitment to the client based on that hunch. Unfortunately while their part would only take a few hours, it turned out that there were several weeks of technical work to make that button operate.

Of course I don’t want to come down too hard on “W,” as this is both a fairly extreme case and something that we all do to some extent. Things that we don’t understand almost always seem easier than they are in reality. The trick, insofar as there is one, is acknowledge that it does happen and consult with someone who does understand it before making commitments.

  1. In fact I had a number of choices, and that’s the point. However this, as you’ll see, is an extreme case and is the first I remember.

Attitude

Here’s an exchange that occurred just the other day: colleague A asked colleague B for some help in PowerPoint. B says, “It’s easy, I’ll show you how to do it.” A immediately objects: “I don’t want to know how to do it, can you just do it for me?”

The dialogue continued for a while, with A not happy to have to learn something new and B not happy to become A’s lackey.

The traditional twist in a story like this is to say that in fact I was Colleague B. Only I wasn’t. And no, I wasn’t A either. But the whole conversation put my teeth on edge.

This is a supposedly smart and experienced guy but he shows a complete unwillingness to both learn something new and to be self-sufficient.

This is whatever is the complete opposite of a winning combination is called.

I have regularly come across both traits in my working life. Most often you get the Java programmer who is only interested in Java. These are usually career programmers, people who are in the industry because it pays the bills and little more. There is nothing wrong with that of course. Do people ever get passionate about accountancy? Actually, probably some do, but my point is that to most it’s a job.

However that kind of outlook is limiting. Lapsing into cliché for a second: When all you have is a hammer, everything looks like a nail. This isn’t a problem most of the time. Usually getting the job done is enough. But for the really interesting problems a little Lisp or functional programming or the dining philosophers can make all the difference.

My colleague didn’t even want to learn more about PowerPoint which, given his position, pretty much should have been his job.

But an unwillingness to learn new stuff would have been fine had he been able to work unaided. Unfortunately he needed pretty much constant support. Everything from PowerPoint to making a cup of tea required someone else’s help. Naturally, it wasn’t an inability to make tea rather he was unwilling to do so.

The key here is that it’s not about ability. In your first few weeks in a job there are going to be lots of things that you need to ask about, lots of things that you need help with. But what I really hate to see is an unwillingness to learn, a lack of intellectual curiosity and no desire to be self-sufficient.

Growing Up in Public

What do Britney Spears and Yummy, my iPhone Delicious.com client, have in common? If you had asked me a few months ago I would have said nothing but I’d have been wrong. No, they both have had to grow up in public.

For a version 1.0 product, Yummy seemed solid to me. It was fast, coped will all my bookmarks and had the ability to add, edit and delete entries. I didn’t think that this would remain as a unique feature for as long as it has, but hey, that’s a bonus.

Within a few days I had exceeded what I had expected to sell and received positive feedback on the iTunes store. But not long after that I also received my first bug report.

This turned out to be an odd one. It crashed early on while starting up and downloading all the bookmarks for the first time. My first guess — incorrect as it turned out — was that it was running out of memory. It took some investigation with the help of a very kind end-user to discover that… Delicious allows technically invalid URLs. By that I mean both that they don’t follow web standards and, worse, that it’s not even possible to open them in Mobile Safari.

I don’t feel so bad about not spotting that one during testing, although I should have put in more error handling to spot various “impossible” events and make sure that it didn’t crash. The reason I mention it is to give an idea of the kind of things that happen in “real life.”

But my biggest mistake has been assuming that I am a typical user of Delicious. I thought a few hundred bookmarks was a lot but I now realise that I was wrong. I have some users with over a thousand bookmarks and have read about another with nearly ten times that1.

The exact number of bookmarks that you can store depends on a number of variables, such as the length of the URL, title and notes, the number of tags, the iPhone operating system2 and a bunch of other details outside my control. Looking at the reviews on iTunes I believe a few people had more than whatever that limit is. Unfortunately the error handling was lacking, resulting in Yummy crashing rather than an inconvenient but understandable error message3.

Version 1.0.2 was actually a big release in terms of the amount of code changed, if not in terms of visible functionality (which is why it was such a small change in the version number). Under the hood, though, I dramatically increased the number of bookmarks that Yummy could handle. However it was starting to become clear that the internal architecture was holding me back. Further increasing the number of usable bookmarks would be hard, if not impossible, without seriously degrading performance and some new features that I wanted to add would end up in a nasty tangle of unmaintainable code.

I decided to take a step back and fix the structure of the code. For much of the time since the last formal release, Yummy has been, metaphorically speaking, in pieces on the floor. Most of those pieces have now been polished and reassembled, and it’s now working well enough that I have replaced the copy of 1.0.2 that I have been using day-to-day on my own iPhone with the development version.

This is a long way of saying that there is a new version coming. There will be a number of great new features but many of the big changes are behind the scenes. I sincerely hope that you don’t notice them.

  1. I confess to being a little sceptical about some claims. At some points it becomes a bit of a pissing competition.
  2. Upgrading from version 2.0 to 2.1 tipped at least one user over the edge, and many developers do not get previews of new versions.
  3. I’ve not got to the bottom of this one yet. It seems that, sometimes, you can only spot a bad memory allocation by noting that an otherwise mandatory field is missing.

Advertising your iApp

My iPhone application, Yummy, has been on sale in iTunes for a couple of months now and, as a number of other developers have noted, after the initial launch sales figures take a significant nose dive very quickly. I’ve been trying to think of ways to increase visibility without taking too much time away from actually making enhancements to the software.

As luck would have it, I got a “free trial” of Google AdWords and thought I would give that a try. Results have been… well, not exactly what I was expecting.

The way AdWords works is that you give it a bunch of search terms and when someone enters those terms you go into an auction with other advertisers with the same terms. You can set a maximum bid and a maximum per day. I confess that these are not values that I have played around much with; I stuck with the defaults. You then get charged when someone clicks on your advert, not just when it’s put in front of someone.

It turns out that with my choice of words I was averaging £0.33 per click. If we assume that every click results in a sale then I would say that this is on the high side of acceptable. Yummy retails for £1.19 in the UK, with Apple getting 30% and the tax man another chunk.

However that’s not necessarily a good assumption. In fact, I have no real idea of how good or bad it is. Using Google Analytics and AdWords’ built-in statistics I can see how many people visited Yummy’s website and I can see how many people clicked the link to the App Store. What I can’t see is the number of people who clicked on the ad that ended up buying a copy.

But the cost of attracting customers and the inability to track the effectiveness of the campaign was nothing compared with my frustration in penning a suitable advert. I started with the following text:

Delicious on your iPhone
Search and edit your delicious.com
bookmarks in one app on your iPhone

Sure, I’m not going to make a living as a copywriter any time soon, but given the space constraints I didn’t think it was too bad.

However after a couple of days my campaign was suspended because I’d used a trademark in my text. Now I’m no expert on trademarks, but I really don’t see the problem here. I’m not trying to sell dodgy iPhones; I’m not passing myself off as Apple; and I’m not selling a competitor, indeed all Yummy users are already Apple customers.

Writing about an application that runs on an iPhone without mentioning Apple or iPhone is not easy. I ended up with:

Delicious.com on the move
Search, add, edit and delete your
Delicious bookmarks in one iApp

They have not suspend that yet, but I think it’s a substantially less compelling advert.

So overall, it was certainly worth a try — I had nothing to lose — but for the price-point of Yummy I don’t think it’s worth paying for AdWords once my trial funds expire.