All Posts Filed in ‘Technical

Post

Saying Goodbye To Facebook

8 comments

When I first started using Facebook many years ago it took a little getting used. At the time it was completely different to any software I’d encountered before. I was used to discussion forums where you either created a topic in a section or replied to one – that was it. Now there was this concept of having your own wall where you could post in addition to posting on friends walls. I spent a little while pondering like this: “so friend X has posted on my wall, do I now reply by posting on their wall or commenting on their post on mine?”. Soon enough it seemed normal and I started to use Facebook the way I initially used this blog back in the day – short, punch updates on random things. While on here I’d gone more long form, so posting much less frequently but only when I had something substantial to say.

Fast forward several years after many many photos of my dog posted and I decided the time was right to deactivate Facebook and leave it behind. Here’s why.

Facebook trying to shame me to stay

The Early Days

I was initially very impressed with early Facebook. Unlike forum software it was designed around real world social interactions. You might meet a friend for a beer (i.e. their wall) and get chatting. Then another mutual friend drops by for a beer and a chat too (they see the conversation on your friends wall and join in). You’d see all the posts from all your friends in reverse chronological order and could keep in touch with and stay up to date with more friends than you possibly could in real life. It saved time and seemed to actually enrich friendships with those you might have lost touch with or not see as much as you used to. Augmenting real world relationships and bringing everyone closer.

I was re-connecting with people I’d lost touch with over the years and was learning more about other friends than I ever had in the real world. I felt like a part of a lot of peoples lives and it felt great. I was enthusiastic about it! I posted random links to YouTube videos, photos of my dog, created a photo series of things I found in the street (aka “Somewhere a small child is crying” with a photo of a pacifier on the kerb) and worked some of my favourite song lyrics into posts that almost nobody ever noticed.

Then Things Started To Change

Having been blogging for years before Facebook I was well used to my random musings being publicly visible and so potentially read by friends, family, anybody really. As such I’d learned to self-censor what I wrote and be mindful of who might be reading. Nowadays Twitter and Facebook are huge and especially with the former you can find yourself at the receiving end of abuse from a virtual baying mob of people for a single, out of context or inappropriate tweet.

For further information on Twitter mobs read So You’ve Been Publicly Shamed by Jon Ronson and be prepared to never want to use social media again!

Unfortunately for a lot of people signing up to Facebook, they were lambs to the slaughter. People have lost jobs, friends, been sued, arrested, harassed, had real world fights and a host of other such fates from ranting on Facebook. And that’s without even posting publicly.

So while Facebook modelled real world interaction and made it more efficient, it also magnified all the negative aspects of real world interactions. If you meet up with a friend and you have a disagreement (which often happens after alcohol is consumed) at least you’d go your separate ways, sleep it off and get over it. With Facebook there was no escape and no looking someone in the eye and realising it was a misunderstanding. You could have that same argument but now you’ve got dozens of witnesses, all happy to join in, baying for blood (see my book recommendation above) and blow things out of proportion. People would start falling out and commit the ultimate social faux pas – an unfriending. This seemed to be treated as a personal slight against the unfriendee that would often spill out into the real world. It was as though all the negative emotions from people would be focussed and nothing of the whole rounded individual would be seen.

I found myself at one point having to clear out a bunch of “friends” who weren’t people I knew in the real world and kept it strictly to those I did. It was a lot safer and less hassle (ask me some time over a beer and I’ll tell you a tale or two!).

Billy turning his back on me

People would often go the other way and instead of ranting learned to self-censor and focus on only posting the most glowingly positive aspects of their life. As though they were living the perfect happy life where everything was great and perfect! You’d meet them in the real world and of course life doesn’t work like that, so what you were seeing on Facebook was life through a lens – essentially part of their life, but only a small part. The authenticity of interactions seemed to have changed from the earlier days and I began to wonder if it was the people or the software itself. If you only interacted with angry or happy posts, was Facebook only showing you the same – like an echo chamber? Something started to feel off.

So Are We The Product?

It’s been much quoted in the tech press that Facebook users aren’t the customers, they’re the product. People enter a great deal of personal information into Facebook as well as demonstrate what they like and care about by their behaviour on the platform. This is gold dust to advertisers and to make as much money as possible Facebook want us to interact with ads and so charge advertisers a high price for that specific targeting.

While that’s factually correct, I don’t believe the engineers and product managers behind the scenes really feel that way or have that as their objectives. They’re trying to connect the world and have billions of users – so are doing a pretty good job. Trouble is, for me at least their attempt to do that really started to put me off.

What attracted me to Facebook was being able to see a reverse chronological feed of all my friends posts. Simple. Periodically I can catch up just like I’d do if in the real world I meet up for lunch with friends and we all update each other on our lives since we last met. Problem is, that’s impossible to do on Facebook now unless you manually go to the profile of every single friend.

Instead Facebook wants to figure out what you want to see, then tailor your news feed to show you it. So a bunch of clever engineers at Facebook have the feed data from billions of users and slice and dice that data to figure out for each person what sort of items they’re interested in and curate the feed to give you your own personal news feed with everything you want to see! Except of course it doesn’t work and you miss most of the interesting things. The reality of this type of software, and in fact current artificial intelligence technology, is that we’re a very long way away from it being genuinely useful in this context. The only way as things currently stand to see a curated subset of posts is for a human who knows you to choose them for you. It really is as simple as that. When a machine passes the Turing test, then I’ll revisit this statement.

But clever people like trying to solve problems like this and while there are billions of users it doesn’t matter if they alienate a few million, it’s just raindrops in the sea for the greater good. Ultimately from an engineering point of view I think they’re doing the right thing. To get so much real interaction data between humans in one place and be able to analyse it is the sort of fascinating problem I would love to be a part of. Well, second after background switching of course. So I completely understand why they’re trying to build software that can predict what you’re interested in based on your behaviour. And I’m sure this type of work will ultimately lead to smarter software, although hopefully not like those Terminator films. But as a user, it’s the opposite of what I want. It’s the equivalent of sending androids to meet up in a bar and controlling them through a virtual reality headset instead of actually going to that bar and meeting your friends. It’s a layer of abstraction I don’t want.

Adios Amigos

So when I take the fact that there’s no way to see what I want (I know you can choose ‘Most Recent’ rather than ‘Top Stories’, but it’s still a curated subset of posts) and add that the negative traits of social interaction are magnified, I realised I was no longer enjoying using Facebook. When I’d meet up with friends in the real world the communication was infinitely more meaningful than it had been through Facebook’s pages. It just wasn’t adding any value to my life.

There is no substitute for real world interaction. And that’s why after much thought I deactivated my Facebook account and haven’t looked back! I look forward to meeting up with friends and finding out what they’ve been up to. I really won’t know and not knowing makes it that much more interesting. I don’t even find myself wanting to log back in and see what’s happening. And to be honest I don’t think anybody’s even noticed I’ve left! 😀

When I read that Mark Zuckerberg has a team of people who manage his own Facebook page that proved I was right. He’s a far far smarter guy than I am and even he realises his time is better spent in places other than Facebook. So I doubt I’ll be back.

Post

Earin Wireless Earphones – Well Worth The Wait

Leave a reply

My iPhone and EarinsWhen I was a child, decades before the Internet, mobile phones and even years before CDs I used to imagine what the future would be like. I grew up listening to music as my father never stopped playing records and it’s still something I love to this day. I distinctly remember thinking how awesome it would be to have a device that contained all the music there’s ever been so that I could just tell it I wanted to listen to Queen and it would play their entire collection. I imagined it being a small cubic device that fitted in the palm of my hand. At the time it seemed an impossible dream and yet in my pocket is exactly such a device – an iPhone with 4G and Spotify. And now that seems normal.

However my 10 year old self, used to wearing bulky headphones, also imagined that headphones of the future would just sit in my ear without cables, transmitting music directly into my brain without getting in my way (I considered implants but thought that a bit invasive). And until today that idea remained exactly that – a dream unfulfilled. Back in June 2014 I spotted a Kickstarter project that promised to deliver exactly what I wanted. Wireless earphones that sat in each ear, no cables, minimal size, great sound quality and an earphone case that also recharged them. The project was called Earin. I hadn’t even finished watching the video before reaching for my wallet to pay.

And now, after much delay, I have my hands on a set and this is what they look like:

I expected after such a long delay to be disappointed, particularly reading about failed Kickstarter projects not delivering, however to say the least my expectations have been exceeded. The design and fit and finish is very high quality, like something from Apple.  You plug the capsule into your computer via a USB cable to fully charge it, then it recharges the earbuds whenever you store them inside. They come with a couple of sizes of ear cushions but the standard foam ones fit me perfectly and once in I don’t feel them at all.

The most impressive thing, however, is the sound quality. When I first started playing music I thought they were great and are made even better when running the Earin app and turning the bass boost option on. The sound is as good as the Bose earphones I normally use and the noise isolation from the foam earpieces is excellent.

I’ve worked out in them, laid on the sofa with them, walked around the kitchen with them, wandered about town with them and it’s basically like having music plugged directly into my brain (my 10 year old self would be impressed). No getting the cable caught on my clothes or a door handle and yanking my ear off. They just work and it feels that now, finally, I’m living in the future. The original promotional video talked about doing one thing – playing music – very well and that’s exactly what they’ve done with Earin.

So far the only thing I’ve noticed is that maybe once an hour the sound in the right ear drops for about half a second and comes back. It’s a tiny glitch that, given the huge upside of great sound and no wires, is well worth living with. If you have a chance to get a pair (supplies are currently limited) then I’d highly recommend them. For a version 1 product they are astonishingly good. More information here.

Post

On Life In The Mac App Store

5 comments

Back in September 2014 I released John’s Background Switcher to the Mac App Store. The idea behind the Mac App Store is that you pay £60 / year to Apple so that you can sign and distribute software for the Mac and submit apps for sale there. Apple host it, handle shipping updates to customers via the standard software update mechanism and your app appears on the App Store application bundled with OS X. Oh, and Apple take a 30% cut of every sale you make.

John's Background Switcher on the Mac App Store

It sounds great. The App Store is built into every Mac. That’s potentially millions of customers wanting to buy your software! And unlike the iOS app store there isn’t an expectation that apps are priced unrealistically at $0.99 where there is no hope of ever covering the development costs, never mind making any money. However I had more modest goals than becoming rich and giving up my day job. I just wanted to cover the bare cost of building JBS. So I figured I’d break it down and detail how it’s panned out over the last 9 months.

The Costs Of Building An App

But first, development costs. I already mentioned the £60 / year to Apple. In addition JBS is built using Xamarin.Mac which for the cheapest Indie license costs $300 / year (call it £200). The website you’re looking at here costs £60 / year to host on WordPress.com and Amazon S3 hosting (not all directly related but a cost I’d want to cover) is maybe another £30 per year. I also support Interfacelift (a lovely photo site that has a paid-for API) and that costs me £19 / month or £228 / year. So that’s £578 per year recurring fixed costs.

Next is time. JBS for Mac took me 4 months of evenings and weekends (often very late into the night) to build. I’d conservatively estimate (knowing it was higher) an average of 4 hours, 4 nights per week and 8 hours at the weekend, which is a total of 384 hours work. Apparently an average hourly rate for a developer is £37.50, so let’s say to hire someone to build it for me would have cost around £14,400 (or $22,000 USD). Plus I’d have still had to spend my time managing, testing, designing, etc. Fortunately I could re-use a good portion of code from the Windows version of JBS, otherwise those numbers would have been a lot higher. However I had no expectation of ever making a dent in those costs – JBS is something I’ve loved building for years so it’s never been about the money. Instead my goal was to cover the fixed annual costs of £578 (around $880 USD). If I could make that I’d be happy.

I decided to take the same marketing approach I did with JBS for Windows which is to not advertise it, chase reviews, hound techie sites for kudos or such like. I’d leave it to grow organically, which meant I could iron out bugs while the number of users is small and if it ever gets successful then it’ll be a lot more stable and solid. In short, this is what happens when you build an app for the Mac App Store and are too lazy to do any marketing or advertising – the “build it and they will come” philosophy. (My brother works in marketing so will likely cringe at this approach). If you put in any marketing effort then expect to do better than me – this is like a baseline case study.

The Numbers

So come on John, how much did you make? Are you rich? The answers are “Ok…” and “no”. After some tinkering I decided to set the price at £6.99 / $8.99 as it felt about right compared to other apps out there. And without further ado, here are my sales from launch mid-September 2014 to June 1st 2015:

JBS Sales Figures

I average around a sale of JBS per day and over the past 9 months I’ve earned $1840, or £1200. Knock off tax at 40% (worst case scenario) and that’s £720. So that pays the development costs for a year with enough for a couple of meals out – yay! Although if I never write another line of code again for JBS it would take me 15 years to recoup the initial development costs alone. Clearly I won’t be quitting my day job any time soon! It’s fortunate that JBS is a passion project rather than a source of income. When you look at numbers like this and understand the amount of work that goes into building what seems a pretty simple app, it can be particularly galling to read reviews like this:

A 2 star review of JBS

Which leads me nicely onto…

Why The Mac App Store Kinda Sucks

Ah yes. So 30% cut aside, there are a lot of downsides to selling on the Mac App Store. The first of which is the review time. It varies, but on average it’s taken around 7 days from submitting my “ready to go” app to Apple before it’s actually reviewed. And if it’s rejected (which it can be for a vast array of subtle reasons) you go to the back of the queue and have to wait another 7 days for the next one. This has happened many times with me and their rejection explanations can be so vague that it takes several go-rounds before you get to the bottom of it. Here’s the process for the next version (it’s currently June 3rd as I write this):

JBS Review Stages

So if you’re used to being able to ship updates quickly, you’ll find the Mac App Store infuriating.

Update: As of January 2017 the review time is around 1-2 days which means rapid releases can be achieved through the Mac App Store – certainly a good thing in my book. However…

The next problem is that the App Store app itself is truly awful. It’s difficult to discover applications, the search is next to useless and it highly favours apps that have been “Featured” by Apple. I’ve no idea what gets an app “Featured” and that’s part of another problem – it’s a black box. If you’re not featured you have no control at all over your app page – and since the app pages make finding the support link difficult you often end up with app reviews like the one above. If you sell direct you get an angry email you can actually reply to and help the person out. And with no option for people trialling your app, if it turns out someone bought it thinking it was something else, all you’ll get is a 1 star review for your troubles. For a company that prides itself on attention to detail, Apple have done a really shoddy job with the Mac App Store.

But I guess investment goes where the money is. As Sam Soffes wrote, it doesn’t take a lot of sales to get to the top of the charts which shows that despite shipping on every Mac, the percentage of people who actually buy on the Mac App Store must be very small indeed. You can see the app store charting for JBS here.

Time To Sell Outside The Mac App Store

Having no control at all over the presentation and sales process, not to mention glacial release times and no direct contact with users who’ve bought the app, I felt I really should explore selling outside the Mac App Store. So I’ve set up a shop with FastSpring who do this sort of thing for loads of other app vendors. While their commission is lower than Apple (which let me drop the price a bit), my primary motivation is to provide the best service to users of JBS.

To do that I need them to get a personal email when they buy a copy that gives them a point of contact should it not meet their expectation. If they hate it, I want to see if I can help them by making JBS better and if not give them a refund, no worries. I don’t want to be seen as some faceless corporation which is partly why the app store mentality can kick in with perfectly reasonable people who end up leaving reviews like the one above. I also need to be responsive by fixing issues and adding new features quickly. Having to wait weeks to release an update in the 21st century is just unacceptable, so by using Sparkle I can push out updates whenever they’re ready to go.

I’m leaving JBS for sale both in and out of the Mac App Store. I wouldn’t want any of the 285 people who’ve bought it to miss out on updates, it’s just they won’t be shipped to them as quickly as for people who buy direct. Of course if anyone bought it from Apple and want a non-sandboxed copy I’ll happily sort out the license for them since happy users is my primary motivation, not making sales. And being outside the Mac App Store gives me more flexibility to make that happen.

I’m planning on adding trial functionality so you can try out JBS for free and if you like it you can then buy it, but that’ll take a little time to implement. However at least it’s now an option outside the Apple walled garden.

Next Steps

Firstly I’ll see how sales go outside the app store and if being more responsive helps spread JBS by word of mouth in the same way the Windows version has. But it does show that it is possible to sell an app without doing any marketing at all, just not necessarily to make a decent amount out of it. I’d be foolish not to look at marketing JBS to see what impact that has, so any suggestions welcome. 🙂

Further Reading

If you fancy filling your Mac desktop with beautiful photo montages then you can now either buy it on the Mac App Store or directly from my store. You’ll find the latter is a bit cheaper, you’ll get updates faster and… Wait, if you’re here you’ve read all of the above so no need to repeat it! And if you want to read a bit more about JBS and what it does in general, here’s the product page.

Post

How To Show The xkcd “Now” Live World Clock On Your Desktop

3 comments

If you haven’t come across it before, xkcd is, to quote the site itself “A webcomic of romance, sarcasm, math, and language” and it’s highly entertaining (my personal favourite is this one about security). Anyway, a recent comic, titled “Now” shows what is effectively a world clock that live-updates so you can see, anywhere in the world, if it’s a good time to phone a friend or colleague. At the time of writing it looks like this:

xkcd-now-23h30m

Now what if you wanted that clock on your desktop, live updating so that all you need to do is look at your desktop and know if phoning your friend in Bora Bora will wake them up from their peaceful slumber? If you’re a Windows or Mac user then it’s easy with the use of my beloved John’s Background Switcher, and it’s simple to set up.

Just head over to the download page and install it. Then when the settings dialog comes up just choose “Add” then “RSS photo feed” (stick with me, it’ll make sense). Then copy and paste the following URL:

http://imgs.xkcd.com/comics/now.png#1

Do the same again, but this time copy the following URL instead (note the 2 instead of 1):

http://imgs.xkcd.com/comics/now.png#2

If you have more than 1 monitor, add some more feeds, just change the number at the end of the URL accordingly. In case you’re wondering why, it’s that JBS doesn’t want to show you the same picture twice in a row, but this tricks it into treating them differently each time. Note to self: fix that in a future version.

Next set up JBS so that it centres the picture and switches every 15 minutes like so (the Mac version is slightly different, but you get the idea):

jbs-for-xkcd

If you’re already a JBS user and on Windows, go to “More” then “Picture Sources” and make sure you uncheck “Save all full-sized downloaded pictures” (so that it won’t cache the pictures). JBS will automatically pick a complementary background colour (usually white here) but if you want to hard-wire it to a particular colour go to the “Picture Handling” section and choose “Use a custom colour for picture borders” then pick white.

Since you patiently looked at the screenshot above you’ve already set JBS to change every 15 minutes and centre the picture, so that’s it, the world clock will always be up to date! How cool is that?!

Thanks to JBS user Mårten for suggesting the idea in the first place!

Post

How I Learned To Ship Software (And Leave My Ego At The Door)

14 comments

I’ve been writing software professionally since 1996, although I started writing code many years earlier for fun. I’ve never been interested in getting professional qualifications or certifications in software development, I’ve always figured the best way to reach your potential is to work with people better than yourself (so you can learn how they work) and actually build and ship software to real people, then deal with the fallout that brings (the try, fail, improve, learn cycle I’ll get to later). A piece of paper is no substitute for experience.

However some of the most useful lessons I’ve learned have not been doing the work I’ve been paid to do, they’ve been learned working on software I give away for free.

John's Background Switcher (3.5)I’ve been very fortunate that my freeware software John’s Background Switcher has been dramatically more popular than I could have imagined back in 2004 when I first created it – I stopped counting at the point when hundreds of thousands of people were using it. Fortunate not for the reasons you might think – it’s definitely not a case of “whoa! look how many users I have! I’m awesome!”. It’s been great because I’ve learned more about software development, shipping software and above all humility working on JBS than I ever have professionally.

Prior to JBS it was easy for me to forget that real people actually used the software I wrote. I would focus on writing the code for a feature, being as clever as I could be to impress my developer peers, completing it, then moving onto the next thing. I would pretend all that mattered was the thing I was currently working on – “leave me alone, I’m in the zone!”. I thought that users didn’t have a clue what they were talking about and if they complained then it was them who were in the wrong, it was “user error”. WHY DON’T THEY UNDERSTAND?!

The Techie User Phase

JBS was originally written for exactly one user – John Conners. I wanted a simple tool to periodically change my desktop wallpaper (and recover from my friend Ben setting my wallpaper to that of a monkey whenever I left my desk) – I was scratching my own itch. Then I released it for the world and… nobody cared at all. Later I added Flickr functionality and suddenly I had a bunch of people I’d never met, mostly techies like myself, using JBS.

They had suggestions of how to make JBS better. Since JBS didn’t do a great deal it was easy for these technically savvy people to pick up how it worked and the more ideas and suggestions they came up with, the more I added. Sometimes I’d break things, the users would tell me and I would fix them. It was great to be able to just do what I wanted without having layers of managers to persuade feature X should be in the next version. It was freedom!

Soon JBS supported several different picture sources, had lots of options to do things like exclude certain pictures, view the originals, change the way pictures were selected and so on. Things were great! Until it got popular and my ego took a battering.

New Users Aged 8 to 88

Thanks to word of mouth and some write ups on big technical sites, more and more people started trying out JBS. While early users were technically minded like myself, a lot of people with comparatively little computing ability were starting to try it out. And they were getting horribly confused.

In my haste to add functionality I’d stopped trying to keep JBS simple to use so when you first started it up it was by no means clear what JBS did, how to configure it or just what the hell was going on. So people would often email me with one line sentences complaining. I’d then have to reply and find out what the problem was and to me it would be incredibly obvious what they needed to do, but to them it may have well as been written in Klingon. However that was only scratching the surface. A great deal more people installed it, tried it, uninstalled it and I never knew anything about it.

I’m John Conners, What The Hell Do I Know?

Deny it all you like, but developers have egos. I’m no exception. You think you’re smart, you create things with your mind and hands and when you hit “Build” people should kneel before you in awe. But the reality is people just want to do their job, whatever that may be, and they don’t want things, like your software, getting in their way. If they want something that changes their desktop wallpaper, they just want it to do it and work the way they want without them having to think about it. End of story. The best software is the software you don’t even know you’re using – because the software itself isn’t the objective, it’s the task someone wants to accomplish (like writing a blog post like this) that matters. It took me a long time to realise this fact, but let’s rewind a bit.

I decided to add a feature so that if you uninstalled JBS it would show a web page that asked you if you’d like to tell me why you’re removing it. It was both a great idea and a tough pill to swallow. Because what happened is people actually told me why they were uninstalling JBS. And it turned out it was all my fault.

By this stage if JBS crashed it would send back a crash log to my FogBugz instance so I could figure out any bugs in JBS or any of the components it depends on and fix them. This taught me to write the simplest code possible. There’s a tendency for developers to try to show how clever they are by writing needlessly complex code and I was no exception. But overly complex code is likely more prone to bugs and when you come back and look at that code to figure out what went wrong the fact that you wrote it is no help, you look at it and think “why the hell did I write it like this and what is it doing?”. Lesson learned – write the simplest code possible so that when you later come back to fix it (everybody creates bugs) it would be easy to figure out what it was doing.

Uninstall feedback was a revelation. All of a sudden I was getting into the mind of the people who’d tried JBS, been confused by it, not been able to get it to do things it actually could do, then uninstalled in frustration. Some of the feedback would be, shall we say, tetchy. I quickly stopped taking it personally as when software doesn’t do what you want and gets in the way, it can be frustrating.

I actually changed the feedback page to say “Remember, I’m a real person called John and not some faceless corporation so be nice!” which snapped people out of being particularly mean and the feedback became a lot more useful. To those who say you should make software impersonal, you’re talking nonsense!

It didn’t take long before I could see patterns. What I thought was intuitive was clearly not. I could explain to those who left their email addresses how to do what they wanted (since JBS was loaded with features by now) and that helped them out individually. But the real problem was people running it for the first time and getting lost. I needed to rethink how I did things.

Try, Fail, Improve, Learn, Repeat

So I had a reasonably successful software product. I had tens of thousands of users. I had a large number of feature requests. And I had a lot of feedback telling me I needed to make it simpler for new users to use, but I didn’t want to sacrifice functionality. I decided to take a step back and do some planning. So I contacted a bunch of the most passionate JBS users (i.e. the ones who complained the most) to run some ideas past them in a bid to get into their heads, understand what they were expecting and see where that led me.

One of the main problems was that JBS had a whole bunch of different photo sources and it treated each one completely differently. It was not obvious for a new user what to do and even if they added some picture sets (some folders, Flickr sets, etc.) it still wasn’t clear what was actually happening. I’d originally built JBS to use local photos, then added Flickr, then a bunch more sources and had just bolted them on one after the other. People just wanted to choose some photos and get on with it, and no messing around!

So I started by doing the exact opposite of what I was used to. I started removing features.

I knew this would inevitably annoy some JBS users, they’d complain and might stop using it. But I suspected that if I did my job right it would alienate a few users but help a great many more. I had to go with the majority because much though I enjoyed answering emails and helping people out, it would be easier for all concerned if JBS was so easy to use that it required no help from me.

By now whenever someone emailed me I would ignore anything positive they’d say and focus on anything negative, always assuming that their problems were my fault – if you can’t use it it’s because I didn’t make it easy enough to use. This approach has the useful effect of disarming people because many would start by saying “I must be stupid because…” so me telling them they weren’t took that frustration away. I was now learning how to be a support person.

So I completely redesigned the user interface of JBS in consultation with the people who actually used it. I opened up early beta testing for anyone who was interested and would let them try it as I developed it, putting up builds every couple of days, seeing how my changes came across and letting them guide me how to go from there. I was quite happy to work on a feature for days only for it to fall on its face and end up deleting it completely – I took my ego out of the picture. I would try something, see how it worked and either remove it, change it or keep it depending on how it worked for real people. I would start from the position that I didn’t know best, I would let the JBS users tell me what they wanted and try to do it to provide the most benefit to the most people without compromising the simplicity I wanted it to have.

I also learned to start saying “no”. An idea can be a great idea, but if it made the software more difficult to use for 99% of users just to help 1% then I wouldn’t implement it. But rather than throw it away I’d see if there was another way to achieve what the person suggesting was after. Quite often there would be since as any sales person knows, people may know what they want, but might not know what they actually need, you just have to make them realise it and provide it. So I wouldn’t say “no”, I’d say “how about if I did this instead?”.

The Proof Of The Pudding

So after a hell of a lot of late nights and long weekends I released JBS 4.0 and an interesting thing happened. The feedback was initially very quiet. Which to me was perfect. As I had come to realise, good software doesn’t jump out and shout at you and make itself noticed. Good software should be practically invisible, quietly doing its thing and letting you get on with your primary tasks (which I assume is posting on Facebook, which JBS supports of course!). I took it as a great compliment that while user numbers kept increasing, the number of uninstalls and uninstall feedback dramatically reduced.

Over time though I’ve received a flood of correspondence that makes all those countless hours of work for no financial gain more than worthwhile. People telling me how they hate their job but when they’re down they look at their desktop to see a montage of photos of holidays with their family, they smile and get on with their day. People who’ve installed JBS on their parents PCs pointed at their Flickr feed so they can keep up to date with what their grandchildren are doing. Even people who’ve lost a loved one but remember happy memories when they pop up on their screen. Touching people’s lives in a profound and positive way is rewarding in a way money can’t buy and thanks to all the lessons I learned above, I was able to make it happen.

A Summary In Neat Bullet Points?

Normally I’d write a bullet point list summarising the lessons I’ve learned from JBS so that anybody could use them but it doesn’t work that way. Remember how I said I never bothered with certifications and such like? It’s because there really is no substitute for experience. There’s no substitute for learning by screwing things up, figuring out where you went wrong and ensuring you try to do better next time. No substitute for seeing how much pain and frustration decisions you’ve made have caused normal people (and lots of them), then figuring out how to win them back, turn it around and make the software better. No flowchart you can build that determines when you implement a feature, or build something else that indirectly but more usefully solves a problem, or even when to remove a feature entirely because it’s the “right” thing to do, or when to completely change direction and try something completely different.

You have to learn by doing, and the best lessons are those born from failing, trying again and ultimately succeeding. Leave your ego at the door and learn lessons from everything you get wrong (pobody’s nerfect).

From doing this again and again and again I’m now much better at making judgment calls. Knowing what questions to ask to find out if a software release is going to be late before it actually is and what to do about it. Knowing when to push a release vs drop features. Recognising that instead of trawling through a bug / feature list and implementing them one at a time, when to take a step back and see if there’s something completely different you can do that renders chunks of those issues obsolete. When to look at the big picture and when to focus on the tiny details. I don’t always get it right, and frankly if I ever thought I did then I’d know I was deluding myself.

And if you write software for a living and work in the 99% of companies that are stuck in the dark ages of software development, just do what I did. Find something interesting and build it on your own time, even if it’s as trivial as a desktop wallpaper switcher. It taught me an incredible amount, and the funny thing is when you build something you’re passionate about, you magically seem to find extra time and energy to work on it.

Finally, the one piece of advice I would give is to use a tool like FogBugz – the best defect tracking / project management / source control / customer support system I’ve used. Without FogBugz I’d have been completely lost at sea both working on JBS and professionally. It’s the perfect example of what I aspire to build – software that is so good you don’t even think about using it – it just works.

And to think, JBS was all kicked off by my friend putting monkey pictures on my desktop when I left my machine unattended. Thanks Ben!

Post

The Perils And Pleasures Of An Inquisitive Mind

3 comments

If you follow the tech news you’ll often come across stories of “hackers” that have broken into secure military systems, stolen user’s login details to social networking site, extracted lists of credit card numbers from online shops, written viruses that spread across the world blocking up networks and a host of other “evil” and disruptive things. Quite often it turns out that the people doing it were young and inquisitive and instead of having evil motives just wanted to do it to see if they could.

It’s easy to look at these people with scorn and say they should channel their computing skills more wisely, but I never think that because I know exactly where they’re coming from.

I’ve managed to make a career writing software for a living. I’m fortunate in that the products I’ve built are, at any one time, in the hands of hundreds of thousands of people. I pride myself on my software craftsmanship – making phenomenal attention to detail my minimum requirement. I’m pathologically obsessed with details and building the best and most robust products I can while balancing the fact that I can’t spend an eternity polishing and improving – ultimately I have to get what I build in to the hands of people. And you know what? I may not be the smartest guy, the most talented developer or the most creative soul, but I’m pretty good at getting it done – shipping quality software.

While my University degree did cover a bit of software engineering, everything I’ve learned I learned by working with great people and having an inquisitive mind with a thirst for knowledge and self-improvement. However I had to start somewhere.

Back when I attended University it was the early days of the internet and there was a networked computer system that all students had access to. You logged on from any of the desktop computers and could access a variety of systems. I can’t remember what any of these systems were but I can remember the login system. You typed something like ‘login’ and hit a screen that asked for your user name and your password. Then you were in.

It struck me that it wasn’t very secure. If you walked up to a computer that was already showing you the login screen, how would you know it really was the login screen? So I decided to write a small piece of software that looked exactly the same, but when a user put their details in it would store them to a file, tell them they’d entered invalid login details and exit. They’d assume they’d mis-typed their password, login again and success!

Anyway, I wrote my little program, copied it onto a few machines when nobody was looking and ran it on each one so that as I walked away, anybody sitting down would think it was left at the login page. I returned a day or so later and sure enough, on each machine I’d have a look at the hard drive and my password file would have a user name and password for a real user. I tried one out, it worked, then I logged out.

To be clear, my motives had nothing to do with stealing passwords or logging into other people’s accounts. My concern was that the login system was insecure and I wanted to prove it in the best way possible – with real users. Clearly I was ahead of my time in terms of usability testing principles! I wanted to prove that the system was easy to hijack and, once I confirmed that to myself I deleted the programs and all the password files. I was much more interested in how I’d solve the problem to make the login system more secure than using login details for mischief.

The Windows NT Log On ScreenI found it interesting that when Windows NT came along you had to hit Ctrl+Alt+Del to bring up the login dialog (see right). Since that key sequence couldn’t be hijacked on Windows you could guarantee when you pressed it that nobody was running a malicious login screen. Most people didn’t realise this fact but I did following on from my investigations of the network login page while I was a student. I realised then that the people in Microsoft who came up with that solution clearly thought the same way I did. And now I know they do since my career has been doing the same thing they do – building software.

It turns out that to write robust software you need to think about every possible thing that could go wrong because if you have more than 1-2 users, everything that possibly could go wrong absolutely will go wrong at one time or another. The most consistent difference between good developers and mediocre ones is that the latter always code for the ideal situation – it never occurs to them that the user’s network connection might fail, their system might run out of memory, they might delete some files out from under you, that a service you’re using might fall over or that when they query for some data, nothing may come back, etc. Good people look at something and instinctively think “what if X goes wrong?” and try to think through all the edge cases they can. That same attitude is what made me look at the flaws in my University network login system and think about how it could be made more secure.

I’m definitely not the only software developer who’s done questionable things with software in their youth in the name of curiosity or inquisitiveness. Still, I never got caught because I learned to keep my mouth shut. Until today. So let’s just keep this a secret between you and me dear reader! 😉

Post

Moving My Site From WordPress.org To WordPress.com

4 comments

This site has been powered by the open source product WordPress since way back in 2007. In the old days if you wanted a website you’d hand-code it, meaning you’d need to learn about such exciting technologies as HTML and, well, that was about it. Then along came WYSIWYG (that’s What You See Is What You Get) editors like Microsoft FrontPage and NetObjects Fusion that allowed you to focus on the content of your site without delving down into the blood and guts of what made websites work. Of course it never really worked out that way as the sites didn’t quite look the way you wanted. Plus you had to run software on your desktop PC that build and copied the contents up to your web server. And that’s just the tip of the iceberg.

This eventually changed and web-based products like Movable Type and WordPress came along that meant you could make your site look the way you wanted (by either delving into the blood and guts or choosing a style designed by someone else) then easily post and update the content through your web browser from anywhere.

I followed that progression and this site was originally built and published using a desktop tool called CityDesk. I switched to Movable Type and after a few years, finally over to WordPress where I’ve stayed since. There were other content management systems (as they’re called) available but I liked its ease of install, ease of customisation, ease with which a software developer like me could modify it with plugins via some PHP and JavaScript and just general ease of keeping a site up to date. I could focus on what I wanted to write instead of how it was published, and leave the software to do the rest.

As the years passed WordPress has gotten better and better and I’ve tweaked and evolved my site design frequently to freshen things up. I’ve also added custom functionality that I’ve built myself on top so it was just the way I liked it (I can be a bit fussy).

The interesting thing about WordPress is that there’s a free version – WordPress.org – you can download and install on your server (the one I’ve been using) and, within a few minutes, be publishing to the world. You’re in complete control and can do anything you want including installing any of the thousands of plugins available. But there’s also a different product called WordPress.com which you don’t install on your server, it’s hosted for you. It’s run by the company automattic and while you can create a blog (or site) for free and start publishing immediately, there is a catch (or advantage depending on your point of view). You can’t create plugins or write custom code meaning your ability to change your site’s behaviour is somewhat limited.

While you don’t get anywhere near as much control as WordPress.org running on your own server you do get a lot of cool things. Firstly, it’s built on an infrastructure that hosts some of the highest traffic sites on the internet – and handles it easily. This means you don’t have to worry about keeping your server up and running – they do it for you. Next, as time’s passed I noticed that while I’ve had to write custom code to do some of the nice things I wanted (like supporting photo albums, contact forms, etc), these kind of features and much more now come for free on WordPress.com. There are also things that are actually way beyond what I had and would require some tricky coding to replicate like photo album slideshows, syncing to twitter, Facebook, etc and many other cool things.

Then I spotted a $99 / year upgrade package that gives you the custom theme design option, domain mapping (so I could continue to use johnsadventures.com as my URL), 10GB of space and VideoPress (which I already use for uploading videos). I decided that “what the hell” I’d move my site over as a change is as good as a rest! If I didn’t like it I could always move back. This gave me an opportunity to freshen up my site design a bit and use the cleaner fonts and styles from one of the default themes (twentyeleven) and I’m rather pleased with the result – it’s not hugely different, just better in a lot of small ways. Migrating over my content was dead easy (as were all my images), the design itself took me a couple of nights to do and the transition has been reassuringly simple.

New Website Footer

If you’re reading this through a tool like Google Reader then come over and take a look around! Find a photo album and click on one of the pictures, for example. And if you’re reading this on a mobile phone you’ll notice a lightweight theme that’s fast, mobile friendly and much better than having a shed load of graphics loaded before you can squint at tiny text. I’m sure I’ll write about some of the neat features of the platform in time but as I’ve been telling anybody who’ll listen – if you want to start blogging or put a website together then WordPress.org or WordPress.com are my tools of choice!

The only slightly annoying thing is while I trawl through my pre-WordPress posts bringing the pictures on-platform (I don’t have to do it but I’ve been meaning to do it for years) Google Reader treats these updates like they were new posts. If that’s how you keep up to date with things you might like to unsubscribe for a while and keep an eye on my twitter page for new posts!

Post

17 Thoughts on Software, Humans and Facebook

2 comments

I’ve spent a great deal of my life writing software and the thing that’s always interested me the most are not clever algorithms, cutting edge tools, slick user interfaces, super-clever frameworks, professional icons, neat layouts and design and well worded documentation – it’s not the actual software itself. What’s interested me is the people who use that software and how they use it.

My goal when writing any piece of software that ends up in the hands of a human being has always been: “make it software they don’t even notice they’re using”. I’ve worked with plenty of developers who take an incredible amount of pride in what they do and spend hours tweaking the tiniest of details as though they were carving a masterpiece from a block of marble (some of them have been, effectively). Agonising over pixels. Button placement. Colours. Every tiny detail. But that doesn’t matter a jot if the software they’ve built gets in the way of the person using it.

Cameras are wonderful and as a photographer I love the technology behind them: their lenses, the use of filters and a host of other things I’ve written about before. But a camera isn’t the end result, a camera is a tool to take a photograph and the photograph is the end product. A photographer doesn’t want the camera to get in the way of taking a beautiful photo. If you need to take a quick snap you don’t want to spend ages clicking buttons and going through menus, you want to point and shoot. If you want a landscape photo with a digital SLR you want to take a meter reading, pick your shutter speed and aperture – concentrating on the details of the exposure – and take the photo. You don’t want anything slowing you down. You want to concentrate on what you’re doing – composing and taking the perfect photo.

John's Background SwitcherSoftware, for me, is exactly the same.

John’s Background Switcher is, by some margin, the most widely used piece of software I’ve built. I designed it to sit in the background, be easy to set up and then stay completely out of the way. Most people can install it, set it up without thinking about it – they know what they want to do and it helps them to do that. Next they leave it alone, giving it no thought again. It’s taken years for it to get to that stage and hundreds of users telling me what they loved and what they hated. I’ve learned a hell of a lot more about human psychology building JBS than I have about algorithms and elegant coding practises.

The best way to demonstrate how things have changed is via my uninstall feedback page. When you remove JBS you can opt to leave feedback as to why. It’s the single smartest thing I ever did as I learned very quickly why people who’d bothered to install it then later removed it. Early on they’d complain about finding it confusing, not being able to do X (even though JBS did actually let you do X, it’s just the person hadn’t worked out how) and a host of other minor things that made JBS “not good enough” in my eyes. When someone is confused or can’t figure out how to use any aspect of software I’ve written it’s not a failure of that person, it’s a failure of me not making it simple and obvious enough to use and I learned a great deal, gradually evolving JBS and my software design philosophy over time.

The difference is that nowadays I’d say 99% of people uninstalling JBS who leave me feedback start by saying that they “love” JBS and are removing it because they’re changing jobs, or their computer is misbehaving and they’re removing all software, or their son is going to college and they’re giving them their laptop so cleaning it up first or even their wife doesn’t like it. They tend not to say they can’t figure out how it works any more and given the cross-section of people using JBS (see the Facebook user demographics below) I must be doing something right:

JBS Facebook Demographics

People don’t usually email me telling me how great the user interface is or how good the photo choices are – they tell me how they hate their job but when they’ve had enough they minimise their windows and see montages of photos of a family holiday with their kids and that gets them through their day. It’s not about the software, it’s about what the people who use it want to do and for software to be something people can care about and even declare that they love, it’s not the software they emotionally connect to, it’s what that software lets them do without getting in their way.

Which brings me onto Facebook. Facebook is brilliant. No really, it is. It’s brilliant in the way it manages to replicate real-world social interactions.

Say you and a friend are sat at a table in a bar talking about your Star Wars figure collection (you’re obsessed with them). A mutual friend spots you, saunters over and sits with you, joining in the conversation and you catch up – you’ve not seen each other since Comic-Con. You  take out some polaroids you took of your new Jabba the Hutt figurine to show around and your friends all laugh at you as you flip through them. Next your ex-girlfriend (or ex-boyfriend) appears and comes over with her hunk of a new boyfriend / girlfriend who is definitely not into Star Wars figures. You ignore them and they go away. Or maybe you and your friends have a go at their new partner (in a funny way) and they go away. Or maybe they join in the banter and sit down. A couple more friends turn up and you have a good old catch up, take some polaroids and share them around to remember your fun night of drinking and talk. You then go home and write up in your diary some of your experiences of the day, sticking some of those polaroids in place to remember for years to come or look at them and laugh the next time those friends are round at your house. Or maybe you’ll show them to another friend who couldn’t make it.

In the real world this sort of social experience is effortless but prior to Facebook trying to replicate that situation “virtually” was always a compromise. Facebook eloquently lets you do all of the above (except the drinking) with the fact that you have a wall. You can look at the wall, the walls of your friends or a stream of posts on walls of you and your friends all at onces. This is what I find brilliant. The wall is you sat at a table. You add memories to it by uploading pictures, making posts, other people commenting and so on. If you want to know what your friends have been up to lately, or maybe just the friends from your previous company have been up to, then you can find out on Facebook arguably faster than you could do in the real world (assuming they use Facebook).

I know, Facebook didn’t invent the wall, MySpace was using a similar approach and I’m sure plenty of other sites were. It’s just that Facebook refined the idea, concentrated on what it is us humans want to do – interact with each other in a variety of human ways like we do in the real world – and created software that gets out of the way and lets you get on with it. I barely even think about Facebook when I use it and never have – instead I’m thinking about the people I’m interacting with and what I want to do in terms of interacting with them. The friends who’ll see a video of bull frog playing ant crusher I came across. Perusing photos of my brother and what he’s up to. New baby announcements. Videos of friends cats. It’s a great way to stay in touch with people I’d rarely see otherwise.

However there’s a problem. It may be a little too good. I’ve spent the past year or so posting frequently to Facebook. I’d post photos, talk about what I’ve been up to, things going through my head, things I’ve read and pretty much all the things I’d normally do with people in the real world. I’d also take an active part in what my friends were up to, commenting freely. Whenever I’d meet friends for real they’d point out that I was always the most prolific poster and would cut me off telling a story saying they already knew it. So it was working. There was no two ways about it, my friends would stay in touch with me whether they liked it or not (well, unless they unsubscribed).

But did I feel as close to those people through Facebook as in the real world? I’d have to say “no”. It’s all a bit too superficial.

It’s like being a movie star at one of those Hollywood parties where everybody air kisses saying “darling, you look fabulous!” but nobody has a meaningful conversation about anything. Facebook enables a lot more communication and it’s easy to get sucked into that constant craving to see what’s new and if someone’s replied to your post or vice versa. Like that Hollywood party set. But what it doesn’t do is replace sitting around a table just talking to each other. It’s no substitute for the real world and if anything I feel I’ve drifted further away from my real friends as a result. It’s not a substitute for sitting around a table in a bar just talking. More communication doesn’t necessarily mean better.

Don’t get me wrong, I still think Facebook is brilliant. You can interact with people without even thinking about it and it can feel like it’s just the same as the real thing. It’s my ideal software – focussing on the human and allowing them to use it effortlessly to interact with other people. But it’s still missing a more meaningful way to stay in touch. I remember when my brother lived in San Francisco and thanks to Skype it made the world seem a lot smaller. In fact I probably spoke to him more then than when he was living in Edinburgh!

Google+ has a feature called “hangouts” that lets you have group video chats. I never really saw the point of it until I saw this ad:

Hangouts are actually very cool, particularly on a phone which is the place I use social software like Facebook 99.9% of the time. Facebook does have video calling, but that’s one to one and you can’t have group conversations which sort of defeats the whole point of it. If Facebook had a slick way to turn a multi-person written conversation or chat into a video conversation that was as effortless as using the rest of its user interface then they’d have an absolute killer feature. Yeah I know Google+ has hangouts and I should switch to Google+ but Facebook has already crossed the generation divide (in that both the parents and children of my friends use it) and I just don’t have room in my life for another social network!

I never normally do New Year Resolutions but this year I’ve decided to spend a lot less time “interacting” on Facebook and a lot more time “interacting” with friends in the real world instead. It may mean less communication and not knowing what everybody is up to at any given time. But it’ll be less communication with a lot more meaning. Unless of course Facebook follows my advice! 😉

P.S. There aren’t 17 thoughts here, I just like the number 17. And making you keep count!

Post

Welcome To The Cloud John, Enjoy The View

4 comments

The latest chapter in my software development career makes interesting reading. You may remember some time ago I joined a start-up with some friends (who also happened to be ex-colleagues) of mine to build a product in the performance and attribution world of financial investment (exciting indeed). We were then acquired by RiskMetrics Group and that took us into a wonderful world where instead of thinking about how we could build out a product with minimal costs and minimal hardware, suddenly our concerns were how we’d scale to hundreds of clients looking to shift huge amounts of data around using shed loads of high-spec machines in a data centre. It was like a dream come true for a techie like me.

Even better were the calibre of people. I always want to work with people  I can learn from and RiskMetrics was definitely that place. I was working with people who were incredibly smart, insightful, able to think in ways you just can’t teach and analyse and solve the sort of problems that make your brain implode. Hearing about so-called rock star programmers and the type of people who can change the world is one thing, but when you’re sat in a room with them while they think about how to solve incredibly far reaching and complex problems was quite another. I had to pinch myself to believe I was working with these people.

We spent a couple of years building our product under the leadership of and with help from some of the best people I’ve ever worked with. And as a result we built something that continued to push the envelope of what you can do with the Microsoft development platform. Everybody who saw our software was blown away – there was literally nothing to touch it in terms of usability and potential in the industry and by the middle of 2010 we had ticks in most of the boxes potential customers were looking for. The team expanded so that development was happening in the UK, Switzerland and the USA. Everything was coming together better than I could have expected (up until then I didn’t believe you could do distributed development in this way but it turns out that with the right people you can).

And then everything changed. After some unconfirmed rumours it transpired that we were being bought out. Since most of us had been through this sort of thing before we decided to just keep our heads down and continue building our product. Many others became consumed by speculation and couldn’t focus. Of course the writing was on the wall and ultimately the decision was made to close our office and kill our product – literally exactly the same thing that happened to me almost 7 years ago. Some things never change!

The last time this happened I was a little bitter and twisted and annoyed that we’d come so close to success but been cut down before our time. This time I shrugged my shoulders thinking “such is big business” and phoned a recruitment agent. I figured there was no sense wishing things were different – people way above my pay grade had made the decision and whether it was right or wrong (in my eyes) that didn’t matter. What’s done was done and it was time to move on and find something new. And that’s exactly what I did.

So just a few weeks later I started  at a company called FinancialForce.com. They build an accounting product on the Salesforce.com cloud computing platform, something I’d not really paid attention to (I’d been so busy building software on the Microsoft platform I hadn’t really looked outside that for a while). So far I think it’s fair to say I’ve landed on my feet and in many ways my new role is a much better fit for what I enjoy doing than my previous one (so every cloud has a silver lining after all). Plus after only a few weeks I feel like I’ve known my new colleagues for years (always a good sign)!

And the more I learn about the force.com platform (as it’s known) the more impressed I am. I’m used to having to build software from the ground up and therefore having to reinvent the wheel every time (and wasting months doing it). On force.com you’ve got so much for free in terms of an application platform, relational database, consistent user interface model, batch processing, scalable, reliable hosting, the fact that you’re building on a trusted platform, the list goes on. Sure, you’re giving up quite a lot of control – you have to live within the limitations of the platform and there are plenty of things you can’t do – but on the whole it means you spend a lot less time writing boilerplate code and a lot more time focusing on actually building a product.

So all in all it’s been a very interesting couple of years filled with many highs and lows. But if it’s alright with you I’ll be quite happy if things stay the same for a while. All this being bought out makes me feel like a commodity rather than a human being! 😉

Post

FogCreek Kiln, Distributed Version Control Systems And Me

4 comments

FogBugzI’ve been a long time user of FogCreek’s bug tracking / project management / customer support / jack of all trades / master of all system FogBugz for many years. I use it at work (where it sits in the centre of our development process, we all revolve around it) but more importantly (ahem) for my own projects such as John’s Background Switcher it’s indispensable – without it I’d be lost. It handles all my support emails, defect and feature tracking, it’s my documentation repository, I use it to create release notes and when I’m doing beta testing of JBS I use its discussion forum functionality. There’s nothing better on the market and it takes away all the pain associated with managing and developing software so I can concentrate on what I’m actually building.

I’ve also used SourceGear Vault for version control for a few years and it has the handy ability to hook into FogBugz such that when checking in some code I can associate it with a case in FogBugz. This means I can look at all the code changes for a given case and see what it was that made me break some vital piece of functionality, although there’s no automatic way to see cases related to a checkin.

My good friend John Topley has been telling me how great distributed version control systems (DVCS) are for ages now (regular readers will know that John is forever telling me how great something is and then 6-12 months later I realise that he’s always right and follow up – like buying a Mac, an iPhone and many other things). When I attended the Scotland on Rails conference last year with John I saw a demonstration of working with Git (one of the DVCS out there) and I was impressed.

Very briefly, instead of having a central repository that you get the latest copy of the source from, make changes then commit them, you clone the entire repository (with all of its history) onto your machine. You can make changes, commit them (locally) and then when you’re ready push all those changes up to your central repository. You can also choose when to pull changes from the central repository locally – the cool thing being that you don’t actually have to update your local source with those changes until you’re ready. This means super fast checkins (since you’re not going over the network) and you can work in isolation while being able to unwind changes without affecting other people. When you’re ready you push those changes out so that everybody else can pull them to their local repositories. Suddenly things like branching, merging, multiple development paths and a host of things that can be painful to do in systems like SVN are much easier. If you really want to know about distributed version control systems then read Joel Spolsky’s tutorial here – hginit.com. What, you’ve read it already? Let’s carry on.

KilnSo a while ago I heard that FogCreek were working on a version control system – called Kiln – that integrated seamlessly with FogBugz but I was a bit busy at the time so added it to my “to get back to” list. A couple of weeks ago I finally remembered to have a look at it and bought myself a license (knowing that I had nothing to lose with their no hassle money back guarantee). After installing I started importing the source from my projects into Kiln. The first problem I had was that Vault seems to have no easy way to export the source history but since I’ve still got Vault running I can always go back and find older versions if I need to (which I most likely won’t).

The import was easy and it then became a case of getting used to using Mercurial (which is the DVCS system upon which Kiln is built) and how it does things. Having read Joel’s tutorial again (and paying attention this time) I was quickly up and running. Even though I’m the only person who works on my own projects (by choice), being able to have multiple cloned local repositories means I can try radical things out, take advantage of source control while I do that and choose to push the changes into Kiln or just delete the lot. And I don’t need to mess around creating branches only to later delete them or go through the pain of merging them in. Ultimately it means the time between checking in can be a lot shorter knowing that only when I’m finished with a piece of work do I need to push it to Kiln. In a team environment this rocks – you don’t have to worry about colleagues picking up your half-finished work and them complaining when things have broken.

When you’re developing on Windows you can install the “Kiln Client Tools” which puts TortoiseHg and some addons onto your system and makes authenticating and cloning repositories from Kiln dead easy. If you’re on a Mac you can install Mercurial tools yourself and it all works nice and smoothly. Since there are plugins for most development environments (like Visual Studio and Eclipse) you can use Kiln (Mercurial) seamlessly as though you were using SVN with the added security of it being a DVCS. Welcome to 21st century software development. Sweet.

The FogBugz integration with Kiln gives what I like to call “360 degree traceability” (something my friend Ian and I love about Team Foundation Server). If I commit a change with something like “Case 123: Fixed the divide by zero error” as the checkin note and push that to Kiln, then automatically case 123 will show that commit on its case page so I can see the changeset details and likewise when looking at the history in Kiln there’ll be a link from that changeset to case 123 in FogBugz. When trying to find out why changes have broken other parts of a system this sort of visibility can be incredibly useful, particularly where a team of multiple developers work on the same code base.

A Kiln Changeset

Another cool feature of Kiln which is absolutely no use to me on my own projects is a powerful code review tool. I’ve never really done code reviews in any place I’ve worked – it’s seemed like there’s never enough time to do it. However looking at how easy it is to create and manage code reviews in Kiln makes me think that were I using Kiln at work in my team then we’d definitely start using them. You’d pathalogically avoid branching and merging in Visual SourceSafe because it’s horribly hard to do (since SourceSafe sucks) but using a system like Mercurial makes that so easy you don’t even think twice about it. And so it is with code reviews, they’re so easy to do in Kiln that there’s no excuse not to do them.

In summary I’m very impressed with FogCreek Kiln. FogBugz has set a very high bar in terms of quality and ease of use and Kiln sits as though it was there from the start. Next time I build a development team and choose the tools I’ll be going down the FogBugz / Kiln route for sure, I’d be an idiot not to!