Farewell 2011

Personal 2 Comments

It’s that time of year again, the end of that artificial construct we call a ‘calendar year’ that prompts so many of us to cast our minds back over the last 12 months. So, apart from rocketing helplessly through space at 107000 km/h, only to return to where we started (relatively speaking, ignoring where Sol and the Milky Way have moved since then), what’s up?

As I talked about in my review of 2010, my goal had been to simplify and take back more control in my professional life, revolving around making my own products and cutting down contracting to just single, more significant projects. To that end I’d created SourceTree – this surprised many people, who asked “Why would you go from making a 3D renderer to writing a source control system?? Isn’t that boring?”. Well, actually no – I like learning new things, and I like solving problems, particularly the ones that I have myself, and so SourceTree ticked those boxes, giving me the opportunity to do some native Mac development and scratch my itch for a DVCS tool that worked the way I wanted at the same time. It also made perfect sense from a business perspective, because it was self-contained, deliverable with my modest resources, and there was a proven market for selling independent Mac apps.

Another subconscious reason that I’m aware of more now was that I needed to prove to myself that I could do something unconnected to my (long!) history on Ogre and make it work. I was starting to wonder whether I was capable of repeating the (popular) success I had with Ogre elsewhere, and particularly with a commercial product – was being free & open source the only reason I’d managed to build such an audience? Could I compete when I’m asking people to pay, and without that previous backdrop where many people feel they owe me a beer for all the free code & help I’ve given them in the past? I kinda needed to know.

On the whole, it went a lot better than I expected. At the beginning of 2011 SourceTree was just starting to get noticed, and was slowly growing, with lots of really nice feedback from people (even when it was critical). It was still a very nervous time; numbers were still well below where they needed to be and success was far from certain, and I’d already invested a fair amount, so I took a contracting job for a few months in parallel to help replenish the coffers. This was actually a really cool project, a Mac app based on Ogre that simulating lighting rigs for music concerts for a UK company that ran the real things, and I loved doing it. But following the launch on the Mac App store, and with word of mouth recommendations building – I’m not very good at marketing, so I really appreciated my users helping me do that – within a few months SourceTree was self-funding, just in time for that contract to finish. I hadn’t expected to start breaking even until about the 18 month point, so this was a lovely surprise. Not wanting to get complacent though, I started planning other projects, with the intention of running one in parallel with SourceTree to make sure I wasn’t completely reliant on it.

Everything changed though when Atlassian approached me about acquiring SourceTree, which completed in October – I’ve already talked about this in detail so I won’t repeat here. So now, by a curious twist of fate, I’m in the unexpected position of developing a free product (at least for now) again! I’ve certainly enjoyed the spike in users that’s provoked, and I love being able to tell people they can just go grab it for nothing, but it’s also nice to know that people were willing to pay for it too, before those nice people at Atlassian subsidised it for everyone.

In summary, 2011 has been really good to me. I’ve had lots of new experiences and learned a hell of a lot, which alone I count as a very positive thing. Managing to build up a successful new product and to go through my first acquisition in 12 months was pretty demanding, but very satisfying and confidence building at the same time, something I’m sure I’ll benefit from in future.

Much of the tech media would have you believe that creating a technology business requires you to court VCs, move to Silicon Valley and do something ‘fashionable’ (which right now means having ‘social’ in the brief somewhere), but that’s simply not true. Sure, if you’re expecting to rake in millions of dollars in seed funding and expect to retire on a private yacht in your 30s then that might be the only way you can do it; assuming you’re happy with running that gauntlet with a chance you’ll become one of the many roadkill that the press don’t talk about. But if you just want to make a good living and prefer to do it working on projects of your own creation, it definitely is possible, even if you’re just one guy living on a rock in the ocean. 2011 reinforced that belief in me, and for that, above all, I’m very grateful.

I hope you had a good 2011 too :) Best wishes for the holiday season, and have a great New Year.

On being acquired

Business, Personal 5 Comments

A lot of you will already know, but SourceTree, a Mac client for Git and Mercurial I created over the last 18 months, has just been acquired by Atlassian. There’s a press release, articles on TechCrunch and VentureBeat, and an official FAQ on the SourceTree site. But this is my personal blog, and I’ve had a few requests for a personal angle on this, so here you go.

I said in a previous post that in my experience, the best opportunities often come along when you’re not looking for them, and that was certainly the case here. I wasn’t even thinking about looking for acquisition opportunities for SourceTree – sure, the idea had crossed my mind as something I might want to consider eventually, but it certainly wasn’t an active line of thought this early in the product lifecycle. SourceTree had grown to become a viable business for me, and I was very much enjoying the process of just creating a software product that I used every day myself too.

So, when the Atlassian opportunity came up, I wasn’t at all prepared for it, and I had to make some decisions. I was enjoying being master of my own destiny, and was managing just fine – so my initial knee-jerk reaction was to be very cautious. However, the more I thought about it, and the more I learned about Atlassian, the more I realised what a huge opportunity I’d be turning down, both personally and for SourceTree, if I said no.

Any acquisition kicks off with a financial offer (don’t expect details, they won’t be forthcoming ;) ), but that’s far from the whole story. In my case I didn’t have any pressing need to sell, and I’ve learned from experience that being happy about what you do is extremely important. I also have a strong attachment to the products I create – that’s why I stayed with Ogre for 10 years and it was/is still a wrench to leave – and that’s the case with SourceTree too; not to mention that I’m a daily user of it myself. So if I was going to sell, it had to be to the right company who would look after it just as well, or better, than I did.

Luckily for me, I discovered that Atlassian was about as perfect a fit for SourceTree as I could have asked for. Atlassian lives and breathes developer tools – that’s their entire product focus, which in itself is a good start. They’re investing heavily in DVCS tools – hence the 2010 Bitbucket acquisition and its recent enhancement to handle Git as well as Mercurial (which of course SourceTree does too) – again spot-on on the compatibility chart. I learned, particularly when I visited their HQ in Sydney, that everyone at Atlassian really ‘gets’ developers (well, most of them are developers after all), and care a lot about giving them good products. Development tools permeate the entire company – the CEO is a regular user of SourceTree, and people in marketing understand when you talk about version control. Even though they’re quite a big company now, it retains a startup feel. Then there’s their corporate values, which are very much in evidence when you talk to people there – things like “no bullshit” and “don’t f**k the customer”. And it’s not just on the wall, it’s really how people in the company make decisions. These are the kind of people I can relate to, and definitely the kind of people who can add a lot to the future of SourceTree.

Another thing I found reassuring is that at no time was there any question that Atlassian would want to railroad developers into their own tools at the expense of others. Clearly Atlassian already owns Bitbucket, and SourceTree supports Bitbucket, GitHub and Kiln already. It was made abundantly clear to me that no-one at Atlassian took the view that restricting developer choice to favour Atlassian tools was a good idea. Their ideology is to make developer’s lives better by giving them choice, and of course they’re going to want to offer good Atlassian options in there, but if a developer wants to use an alternative, no-one is going to stop them.  The view I got from everyone was that giving developers a positive experience that reflects well on Atlassian, including giving them their own choice of integration, is far more valuable than artificially chaining them in. Obviously, I concur.

My final reason was that while I really, really enjoyed creating and supporting SourceTree myself, the workload is quite high, and was increasing. It’s not a continuous death-march, but the availability requirements are very high – since I was developer, webmaster, sales, customer support and everything else all rolled into one, taking a day off was basically impossible. Making sure the website was still up, and making sure customers got a quick response to support calls, was a 24/7 responsibility. After a while, that gets tiring, even just checking on things all the time means you never have ‘proper’ downtime. A big advantage of joining Atlassian is that I get some extra backup. That’s good for my health & mental wellbeing, and I’m sure that will be good for SourceTree too long-term. I really didn’t want to start resenting SourceTree for preventing me having a proper holiday occasionally ;)

So based on all these factors, I decided that the future for both myself and SourceTree would be better within Atlassian than continuing alone. I learned a lot along the way to this acquisition – dotting all the i’s and crossing all the t’s turned out to be more time consuming and stressful than I expected, so I wouldn’t say it’s a process for the faint hearted, but if you’re as lucky as I was to be approached by the right company, it can lead to a really great outcome.

I’m still fully committed to developing SourceTree, like I was before, but now it has a more robust support structure around it. Taking things to the next level, both in terms of user base and features, is so much more practical now within Atlassian. I’m very confident that they’re the right company to take SourceTree forward – our thinking is very similar, I respect their values a great deal, and the people are great. My decision was a lot easier than it might have otherwise been because of this!

The folly of crystal balls

Personal 8 Comments

“So, where do you see yourself in 5 years?”

I’m willing to bet every person reading this has had that question posed to them at some point, most likely in a job interview, but possibly during an appraisal, or if you’re really unlucky, by a potential father-in-law at a dinner party. I’m going to call it out right now – it’s one of the stupidest questions you can be asked. It’s a test, of course – does this person have a plan? Are they committed to their career? Or, more accurately, can they make something plausible up on a whim, by accurately judging the kind of crap that I, the questioner, want to hear?

OK, so maybe there are some people out there who genuinely plan their career out 5 years in advance, but I also imagine they’re rather dull people to be around. I can’t recall for sure, but to my regret I think I may have asked this question myself in interviews many years ago, embedded as I was in an environment of conformity and convention which demanded certain inexplicable behaviours handed down from forefathers whose underlying reasoning (such as it was) was long forgotten. If I asked this question of a recruit now (and I wouldn’t, but if I did), I’d only be asking it as an ironic anti-question, since I now believe the only honest and vaguely correct answer is “How the hell should I know?”. At which point I’d probably give that person the job just for being honest and we’d figure out what to do next on the fly, which is what we’d have done anyway of course.

Because when it comes down to it, plans (of any kind) are one part fairy tale and one part straight-jacket. Not only are things not going to turn out the way you think now on any time scale beyond the life of your average housefly, leading to the very real expectation of self-abuse for not delivering on ‘The Plan’ (choral accompaniment), but by being fixated on past expectations you’re very likely to be less adaptable to change, and to pass up alternative opportunities that you didn’t expect. And that’s not a minor issue: the best opportunities I’ve ever had have always been unexpected, and my primary successes have been universally unplanned. Looking back, choosing and setting a direction in life at any point in time was important, but planning specific goals was not, because all the best stuff just kind of happened along the way.

So, if you do interviews, please stop asking this question, it’s meaningless. Everyone has a current direction, but let’s not kid ourselves about the immutability of that vector, or that the destination is knowable. If it was, life would be pretty boring anyway, right?

Google+

Personal, Tech 5 Comments

I left Facebook about a year ago and have been using Twitter as my primary social tool ever since. At the heart of this decision were my main gripes with Facebook:

  1. Facebook misrepresents relationships
    It’s clear that Facebook was designed by a young person with borderline Aspergers. Relationships are black and white, you’re either a Friend or you’re not, and they’re symmetrical – information has to flow both ways. The real world doesn’t work like that, I have real friends, family, casual acquaintances, people I like to keep up to date on but who I’ve never met, and people who like to follow me but who I don’t know. I interact with every one of these groups of people differently, and very often in asymmetrical ways. The concept of a ‘Friend’ who I’d share private information with online is completely unrealistic. I know Facebook bolted on ‘lists’ but everything is totally hobbled by this misguided overarching ‘Friend’ concept.
  2. Facebook’s signal-to-noise ratio is unmanageable
    Whether it’s automated posts from games & other poorly considered apps, or just people pouring every trivial little element of their life into it, I was drowning in trivia in a few months to the extent that it was a chore to keep up to date. This is a function of the people you’re connected with of course, but here’s the problem – because of the way Facebook simplifies relationships, you can’t really do anything about it without offending someome, because:
  3. Facebook creates social awkwardness
    Because Facebook only recognises one type of connection as pointed out in 1, it makes managing your information stream impossible without offending someone. For example, I may very well have real friends / family who I want to connect with, but who I don’t necessarily want to listen to 24/7 because they have .. ahem.. ‘very poor communication filters’. That doesn’t mean I don’t like them, we just communicate very differently. Sure, I might want to dip into their updates every so often, but I don’t want to have to wade waist-deep through their posts every time I go online to find the gems from people who are better at filtering themselves.
    On Twitter, I just unfollow people who I don’t feel like listening to every day, and trust others to RT things that are good (I can always re-follow later). They don’t get told, and generally it’s not considered offensive. Conversely unfriending someone on Facebook is equivalent to saying you never want to speak to them again – it was literally easier just to close my entire Facebook account than to deal with it any other way. Sure you can create a Facebook group, but since groups are visible to all, creating one called ‘People I like in person but who are kind of annoying online’ isn’t going to avoid the problem.

So I went with Twitter because it basically sidesteps all these issues by being public (lack of ‘pretend’ privacy leaves no-one under any illusions about appropriateness), asymmetrical (I can follow someone without them following me and vice versa), and easily managed / filtered without offence. I largely had given up on a ‘rich’ social network that worked the way I wanted, because everyone else seemed to swear by Facebook’s way, which I hated.

Then, last week Google came out with Google+, their latest answer to the problem. Invitations are hard to come by, they’re still in limited testing, but I managed to sneak in before they closed a loophole, ironically via friends on Twitter. I didn’t expect to like it – I expected another Facebook – but I was wrong. Key to what makes Google+ different is that it doesn’t use the concept of ‘Friend’, but instead uses a core concept of ‘Circles’. Google have done what Facebook have refused to do, and have recognised that relationships aren’t binary, aren’t always symmetrical, and are all different. Circles can be used to filter the things that you post into groups of people who can see it, but just as importantly to filter incoming posts too. Most importantly, the person can’t see what Circle you’ve put them in! So if you like the person in real life, but find their online posts a bit vapid, you can put them in a circle that you don’t have to read as often, and they don’t have to know. No-one has to get offended, and you get to keep your stream sane. Perfect.

So far, I like it – it’s taken the best bits of Twitter (control without offence) and Facebook (rich media platform) and slapped them together. Of course, there’s the question of whether people wedded to Facebook will switch or not, although for me that’s a moot point since I already ditched it, so any people on it that do come across to G+ are a bonus, but I lose nothing if they don’t. Twitter users seem to be quite eager to adopt it, probably because they’re natural early-adopters and appreciate the Twitter-like circle setup for the same reasons I do.

And it’s for that reason that I think Twitter has most to fear from Google+. Facebook will probably trundle on with all the people who don’t particularly care about managing their streams in an optimal way and don’t feel a need to switch. Twitter though is used by a lot of people (like me) who are a lot more picky about this sort of thing, and those are exactly the people for whom Google+ will resonate the most. Right now, the main limiting factor is that there are no native tools for Google+, and using it on a phone or iPad is still a bit clunky compared to the kind of optimised native tools you can use for Twitter. But that’s coming I’m sure.

I haven’t even talked about the group video chat, or the really nice photo viewer, how Google+ notifications appear when you’re on any Google site (search, GMail, Reader – a huge advantage for adoption), or how they’re iterating really fast on this. In all, I think it has great promise to be a social network that doesn’t annoy me – yet. One of the big challenges as they develop will be how they handle bot-posting from the inevitable games and other applications once the API is released (I hate it when people hook up everything under the sun to auto-post to social networks, and I unfollow them on Twitter even if they’re friends). We’ll see.

SourceTree, your Mac Git & Mercurial GUI, is 40% off this week

Business, Cocoa, Development, Objective C, OS X, Personal 4 Comments

Since I’m trying to spread this news as far and wide as I can, I might as well say it here too :)

Since the approval light just went green on the Mac App Store, I’m happy to announce the launch of SourceTree 1.2! In celebration, I’m having a crazy-bonkers 40% off sale just for one week, so get it while it’s hot!

There’s loads of things that are new or improved in this release, but here are the headlines:

  • Support for GitHub, Bitbucket and Kiln APIs, so you can see your hosted projects inside SourceTree, clone from them, link them as remotes, and even create new projects if you want.
  • Streamlined and polished user interface – I specifically dedicated a lot of extra time in this release on making SourceTree easier on the eyes, and to streamline the layout and workflows better.
  • Performance - I thought SourceTree was already pretty fast, but I managed to find quite a few more places to trim the fat, and also parallelised more activities to make things feel more responsive. Everything feels snappier, and complex repositories benefit especially.
  • New Sidebar - I had previously resisted the need to emulate iTunes here, but once I had implemented it, I had to admit that I was wrong, and in fact this worked great. Provides lots of shortcuts to navigating and operating on branches, tags and remotes.
  • Stashing and Shelving - oft requested, now delivered :)
  • Customise Git and Mercurial – you can now use your system Git / Mercurial instead of SourceTree’s standard versions (which have been updated), and enable additional Mercurial extensions (at your own risk).
  • French and Japanese translations – local versions for our friends in far away (and not so far away) places, likely to be more to come in future. Big thanks to tuan_kuranes and mzch for their help with these two!
  • And the rest – just lots of little refinements too numerous to list. Examples: copying text from the diff panel, ‘git commit –amend’ support, close branches in Mercurial, switch tracking branches in Git

It’s quite a big update – one user remarked to me that they’d normally expect developers to charge an upgrade fee for something like this, but like all other SourceTree updates this is free to existing customers. I have no plans for any paid upgrades for some time yet, I just want to keep making SourceTree better, and hope that more people come onboard. Maybe it’s my open source background, but I like to keep iterating and continually improving things, based on what I want to do (I’m a daily SourceTree user myself), and on what people tell me they’d like to see. SourceTree 1.2 certainly won’t be the last update by far :)

When I look back 6 months at SourceTree 1.0, it’s incredible how much better it is as a product now, both visually and functionally. I’ve learned a ton of things while I’ve been developing it, and I continue to learn more all the time, and I can’t think of anything I’d rather be doing right now. Also, my wife Marie re-designed many of the icons for 1.2 (and I think you’ll agree they’re a lot nicer) – that was fun to do as a joint project, even if I am a picky ‘customer’ ;)

I hope you enjoy the new release!

My take on stand-up desks

Health, Personal 4 Comments

I think most people are now aware of how much damage sitting down for long periods does to the human body – aware doesn’t necessarily mean that they change their behaviour of course, until something starts going badly wrong (as it did for me a few years back).

Quite a few people recommend stand-up desks as a solution to this problem. I tried it myself in fact, firstly with a jury-rigged version, then after it seemed to help some I spent a bunch of money on both a desk and chair with a very high range of movement to accommodate both standing and sitting. It’s been just over a couple of years since my back problems started in earnest and I’ve actually concluded that (for me at least) stand-up desks don’t really help directly – the benefits are actually circumstantial, and unfortunately relatively short-lived.

Here’s why – when I first started using a stand-up desk, it was really uncomfortable. That required that I regularly took breaks to sit down (my feet hurt), or walk around and change position – this helped my back. But over time, here’s what happened – I got used to standing up for long periods, and as such I got ‘better’ at staying at the standing desk anyway. And all that happened is that I got yet more back problems, this time resulting from my back muscles locking up in a standing position rather than a sitting position. Not really progress.

The real key to avoiding back pain in my experience is not to stay in one position for too long. A standing desk may force that behaviour on you for a while, but the chances are that you’ll overcome it with time and just get locked in a different position (or maybe 2 positions if you alternate between standing and sitting). Sure, you could go for one of those treadmill desks, but IMO they’re a bit stupid. The thing is, the principle behind all these things is that our our bodies did not evolve to spend long periods sitting down – but they also didn’t evolve to spend long periods standing in one place, or walking on the spot, or alternating between 2 limited positions, either. In practice there was some walking, some crouching, some standing – all sorts. Variety of movement is what we were designed for, and while standing up may alleviate the problem for a while because the discomfort makes you move, it’s not a long-term solution IMO.

So really, keeping your back healthier is simple – keep moving around, take regular breaks, and try to avoid stress (this bunches up muscles, encourages unusual posture and suppresses the immune and natural recovery systems). Switching sitting for standing isn’t enough IMO, and can be quite misleading, implying you can still stay at your desk for the same number of hours and avoid back problems (win-win right?). I think most people would be better off saving their money and just learning to change their behaviour, building regular breaks / stretching / walking around into their day instead.

No Excuses

Personal, Productivity, Random 5 Comments

Perhaps there’s a small risk of someone starting a file on me for saying this, but I’m willing to be we all have voices in our heads. I don’t mean the type which whisper murderous thoughts or paranoid conspiracy theories (if you have those, this blog really isn’t an adequate place for you to obtain consultation), but some kind of internal dialogue we have with ourselves, often to justify the decisions we take, or don’t take.

One of the things that voice in our head often does is provide us with excuses. Maybe you have a project which you keep saying you want to start, but you “don’t have time” (probably the most common excuse for everything), or maybe you want to change jobs completely but “I can’t throw my career away”, or “I don’t have the training”. People in corporate IT departments are especially good at excuses – trying that new platform / environment is “too risky” or allowing the CEO to use the device he wants to use would “break corporate standards” or “risk network security”. Maybe that customer or employee has a great idea for a new service or change in approach, but it’s “too hard to get there from here”, or “would probably cost too much”.

Very often, excuses are just people building a natural safety buffer about themselves to avoid having to deal with something that’s a little bit scary, difficult or unknown. If you tell yourself (or other people) that there’s some considered reason or analytical risk which stops you from going out on that limb, for taking a bit of risk, then that’s a comfy position to leave yourself in. It’s not you making the decision to resist taking that step, it’s an unavoidable environmental factor. A global immutable constant. It’s comforting to think about it like that, because then it’s not your fault that another year passed and you feel like it’s a re-run of the one before.

We’re all complex and I’m not going to tell you what’s right or wrong for you, but here’s my experience: taking a few risks, trying new things, embarking on something when you have no idea where it will take you – these are all good things, and you do yourself a disservice by avoiding them. Now, I’m not a huge risk taker, I’m not high-rolling in Vegas or blagging my way into risky business ventures or anything, but I recognise that taking some considered risks, and putting yourself outside of your comfort zone, is necessary to get anywhere – something that I’ve come to appreciate a lot in the last few years particularly. Besides, it’s almost never as bad as you imagine, and having taken the plunge you might be surprised how well you can figure stuff out as you go along.

So when I find myself coming up with a list of reasons why I can’t do something, I find it useful to roll out a simple mental phrase: ‘No Excuses’ . For added effect, imagine it’s being boomed out by James Earl Jones, who is staring down at you with that intense, serious gaze of his – there’s just no bullsh*tting him ;) . There’s a decent chance that some or perhaps all of those things that you think are impediments are really just excuses – and you’re really better off without them. No excuses, just try it – what’s the worst that could happen?

How to make decisions

Business, Personal, Productivity 10 Comments

Decisions are hard. Well ok, not all decisions are hard – given the choice of whether or not to receive a swift kick to the gentleman’s area, most of us would politely decline without having to give it much thought. So let’s rephrase – making an important decision for which there is no clear optimal answer is hard. And yet, making these kinds of decisions, in a theoretically unbounded possibility space with uncertain and/or unknown variables, is the one thing we humans still do considerably better than machines, and it forms the basis of pretty much every important event in our lives – who your partner is, what you do for a living, what projects you work on, what your hobbies are, where you live, and so on.

The thing is, in the developed world in particular, our options are almost limitless – in practice we have very few real constraints on what we choose to to, barring a few fairly sensible laws. Barring a small number of hard factors, such as poverty, discrimination, and oppression (which should be fought wherever they are found), the only limits to most people’s decision making are those which they impose on themselves, resulting in a large number of options. This is a good thing, but it does make decision making complicated. How on earth do you sift through all those alternatives?

Opportunity Cost

Understanding the concept of opportunity cost is vital to any decision making process. It’s just as important to consider what you won’t be doing as a result of a choice, as what you will be doing. Picking contract project A might mean you don’t have time for personal project B, taking that corporate job might mean you can’t dedicate time to developing that business idea you have, and so on. For a while, I tried to defy the reality of opportunity cost by ‘cheating’ – I would do multiple things at once, and just put in very long hours. I worked on projects in my spare time while being employed, I would multi-task between many projects (contract, open-source and personal). That works to a degree, but it’s important to realise two things:

  1. There’s a limit on how long you can burn the candle at both ends.
    I speak from experience here, burn-out and work/stress related health problems are very real, whatever you might think as a young, healthy, workaholic programmer. You can work 12-16 hour days for a while, but eventually you’re going to have to stop, or something will make you stop. If you need to do it to bootstrap, fine, but always remember the clock is ticking – plan for that.
  2. The more you divide your time, the less efficient / productive you will become.
    If you spend 10 hours a week on each of 4 projects, in 4 weeks you will have done a weeks worth of work on each, right? Wrong. In fact, you’d probably be lucky to get half that. The more you divide yourself, the less you’re going to get done on each thing, just because of a lack of focus and a need to keep context-switching.

So, my message here is that you can’t cheat opportunity cost – things conflict, and it’s best to not to pretend that they don’t. This should not only inform your decision process, but it should also bring it into sharper focus – accepting that you can’t have your cake and eat it means you’re less likely to let yourself wiggle out of making an actual either/or decision when really it’s there.

Evaluating the options

The logical person’s approach to evaluating their options tends be be analytical, gathering as much information about each option in front of them, and quantifying each of the pros and cons, risks and opportunities, and so on. This is fine, as a starting point, and teases out a lot of fundamental ‘hard’ information that you need to have available. But in my experience the best you can hope for from this kind of process is that you will eliminate the outliers; those cases which will never work, or which you definitely don’t want to do (although it’s of course worth making sure you understand your own assumptions and biases here), leaving you with a pool of ‘maybe’ options. It  won’t, in any non-trivial decision space, provide you with an absolute dead-cert answer; or if it does, you probably haven’t considered enough alternatives ;)

The simple reason for this is that for any significant decision there are bound to be many factors and variables which are unknown, poorly quantifiable, subjective, or incomparable with each other. There won’t be some magical formula which you can plug all the variables into and come out with a single best answer, nor will the factors usually be clear enough even for you to rank them in any sort of objective order – or if you can establish a discrete ranking, it probably just means you’ve identified some more to discard, or you’re kidding yourself.

Making the decision

OK, so assuming you’re now left with a bunch of ‘maybe’ options, all of which have many uncertainties and incomparable pros and cons. How do you make that decision? You’re probably going to think this is a cop-out, but here’s my personal answer; sleep on it, and then follow your gut. Seriously, forget the analysis, and turn off your brain; it’s already contributed as much as it’s capable of doing in the previous step. Hard as it may be, particularly if you’re a naturally logical, analytical person, there are some things that simply cannot be analysed and quantified. Probably any of the remaining options in your list are good (or if this a case of choosing the lesser of N evils, equally bad) – so going with the one that you have an emotional attachment with is usually the right one, because that’s the one you’ll fight hardest for when things get tough. Which they probably will at some point, right? Never underestimate the power of emotional attachment and enthusiasm to the success of any endeavour when things get difficult. You can’t engineer this kind of affinity, and your gut will tell you when it’s there, more reliably than any checklist can ever hope to do.

Living with it

While it’s important to be nimble in many respects (in business, you can’t sit still and periodic course corrections are essential), you do need to give any decision a fighting chance to develop before you change tack. Try not to second-guess yourself too much in the early stages – it’s hard, and this is something I struggle with all the time, but it’s ultimately counter-productive in the shorter term. By all means it’s important to reflect periodically and learn from what worked and what didn’t, using that experience to influence your future decisions, but equally for your own sanity you have to be able to drive a metaphorical stake into the ground representing a decision you make, and only look forward from that point, for long enough to see what happens, for better or worse. Glancing over your shoulder from the outset wondering if you made the right decision is never helpful and is likely to undermine what you’re doing.

Conclusion

So, that’s my 2 cents on the decision making process. Thanks to @GeekAndDad for triggering me to finish the half-written post I had on this subject :)

My Version Control System History

Development, Personal, Tech 6 Comments

I was thinking the other day about how many version control systems I’ve made my way through over the years of being a professional developer, and I figured it would be fun to put it in graph form. Of course, this is entirely from memory and gives the illusion of being more empirical than it actually is, but hey, everyone loves graphs, right?

Yes, I really didn’t use any source control back in 1994, barring backing up to 3.5″ floppies. ‘Custom’ refers to a system I wrote myself in 1995 to do version control on a mainframe system I was working on at the time; really it wasn’t a proper VCS system as you would think of it now, but it did the very basics to make sure we knew what was being developed and deployed at any point in time. You could think of it as a VCS system that only had history at the tags ;)

As you can also see, Visual SourceSafe was the first packaged system I used – you can pity me now – as more of my work started to involve PCs instead of ‘big iron’. At that stage, the concept of ‘checking out’ and ‘checking in’ was normal. Oh, how naïve we were.

I discovered CVS at the turn of the millennium, at the same time I started Ogre. The ability to work without checking anything out was a revelation! I went on to use that on all my projects for quite a few years, at least until I considered Subversion stable enough to base production work on. Even then, I only moved new projects to Subversion mostly (Ogre eventually moved in 2008 – was it really that recent?), and kept CVS for many existing projects.

I first encountered Distributed Version Control at a Git presentation at the Summer of Code mentor summit at Google HQ in late 2007. I have to admit, I didn’t really ‘get it’ at first – it just seemed to make things more complicated and most of those promoting it were mostly die-hard Linux fans and wide-eyed early adopters that didn’t make you want to put your production code on it yet. There was also no GitHub at this time so the benefits weren’t really very visible. It took me until 2009 to really start evaluating DVCS in earnest, and decided that I liked Mercurial best, due to its equal treatment of all platforms, good diagnostic reporting, easy extensibility and intuitive interface that gave power without over-complexity. Today, all my own projects are in Mercurial, but I use Git a lot too, not least because I support it in SourceTree, and get involved in other projects which use Git.

There are a couple of randoms thrown in there – I used Alienbrain for a few months on a client project and totally hated it (think Visual SourceSafe with a few bells – it may be useful for artists but for coders it was horrid), and I did play with Bazaar for a bit but didn’t really warm to it, even though it had some quite nice ideas.

So there you are – my VCS experience over ~17 years in professional development. It kinda makes me want to do a language / platform graph now :)

Farewell 2010

OGRE, Personal 3 Comments

I don’t blog as much as I used to, for reasons which are somewhat relevant to this post – rather you can usually find fragments of my consciousness floating around the Twittersphere instead, since its enforced brevity requires considerably less of my time to populate. Maybe I’m old fashioned, but I believe that if you’re going to write a blog post about something, you should probably make sure it’s written in a half-decent way, and that’s fairly time consuming, particularly when you’re ever so slightly anal about language as I am. Nevertheless, the receding silhouette of 2010 is a worthy enough subject to invest a bit of time in, so here I am, verging once again on being dangerously verbose. I guess the post should have started with a warning banner or something – but if you’re a repeat visitor, you know the score.

So, 2010. I started this year with three significant and intersecting goals: to significantly simplify my working life, to reduce my stress levels, and to spend more time in the company of my own creativity by working on my own projects. The reason was this: by the end of 2009 several factors had led me to a situation where I had my fingers in too many pies, too many balls in the air, too many – well, you get the picture. The thing with being a consultant / contractor is that work comes in with a very uncertain frequency; projects have a tendency to ‘bunch up’, and because of the inevitable lean periods in between you don’t really want to say ‘no’ to anything. The economic situation since late 2008 also led to projects being noticeably more cost-sensitive, meaning more juggling required to fill out a coherent schedule than it had been before that. All this could get quite stressful, and with a back problem to nurse and an open source project to run on top, things weren’t that much fun at times. So my resolution for 2010 was to stop just trying to make the status quo work, and instead to do things my way – to ditch smaller pieces of work, to only get involved in larger projects that I found personally interesting, and to spend the rest of the time investing in my own projects instead. Fundamentally it was about taking control back.

At that time I didn’t plan to retire from OGRE, but in hindsight I think subconsciously I’d made the decision already, I just hadn’t admitted it to myself yet. I’m extremely proud of what I managed to accomplish with OGRE with the help of countless contributors, and was sad to put that role aside after 10 years, but in many ways it had become a rod for my own back. Not only was it a hugely time consuming, 24/7 job to look after, but there was an inherent assumption, from others and from myself, that projects I chose to work on would naturally be associated with OGRE in some way. That was quite a pair of blinkers to have on, even if I didn’t know I was wearing them. If success with a product or in a subject area has a downside, it’s probably that it can become a gravity well which resists you exploring other areas of interest. So while I’m sad to have retired from OGRE and look back on my time on the project with a great deal of fondness and pride, I can’t deny that I don’t regret casting off and returning to the open seas, even if the security of the harbour was comforting. Ok, I’m done with the sailing metaphors now. ;)

One unexplored continent (damn!) which was calling me siren-like (ok, I really am done now) was native Mac development. I bought my first Mac in 2007, initially only to support OGRE on it (before masterfalcon came along with his superlative Apple-fu), but I’ve since been converted to a fully card-carrying Mac nutcase. So, I decided to finally go all-in and learn Objective-C and Cocoa, and make my own Mac-only tool, which of course turned out to be SourceTree. I’m very pleased with it, and if anything my predilection for the Mac platform has increased significantly during this time – I’ve barely used Windows in the last 8 months, and now when I do I find it quite unpleasant. I also went from hating Obj-C (as a C++ user) to really liking it in the space of a few months, and I’m quite happy to include it on my resume now.

The other thing I find, now that I’m juggling fewer balls and am less narrowly focussed, is that my creativity has ramped up considerably. My ‘Project Ideas’ file has swelled significantly during 2010, and I hope to have chance to pick off some of the juiciest of them later in 2011.

So, I guess the important thing in a retrospective is to decide whether I achieved my goals in 2010. Given that my back is much better now, I’m less stressed, more creative and I have a new product out, I guess the answer is yes. Not everything went to plan of course – SourceTree launched later than I’d intended (isn’t it ever thus?) and still has quite a way to go to recoup its investment, my only Mac died a month into me starting Mac-only development (but on the plus side that gave me an excuse to buy a new one, and Apple ended up repairing the other one free even out of warranty), and I’m still not completely recovered health-wise, but all in all, even if it’s not a double rainbow, it’s gotta be at least a rainbow and a half. ;)

My best wishes to everyone for the New Year celebrations, and I hope we’ll all have a happy, healthy and prosperous 2011.