Tag Archives: jobs

Generalist Software Engineering

I greatly enjoyed Graham Lee’s series of posts about specialisation versus generalisation in software engineering1, quite possibly because it’s me.

My background is a little different from Lee’s, though, so I thought it was worth sharing.

I have a two tier experience2. With a few minor blips, Unix has been a constant technology underpinning since my first year at university. I started using Linux around the time 1.0 was released. I got a Mac when — or possibly before — OS X was ready for mainstream use because it was Unix with a nice UI. At work I’ve seen the change from big Solaris and HP-UX machines, to Linux, to containerised applications (which are normally based on minimal Linux distributions). Sure, the different Unix variants are not exactly the same, but most of them have something bash-like and ls does the same thing everywhere, even if the more esoteric options vary.

I should say that this is largely a preference. I don’t like Windows but that’s not an objective criticism. I do joke about it from time to time3 and I do admit the limits on my knowledge, but I don’t refuse to work with it!

Sadly, being a long-time Unix user is not a career.

I started my career at a “pure” consulting company. Each client I worked with wanted to do something different and I ended up using varied technology stacks. This was great from a “generalist” point of view. I flitted from Uniface to PL/SQL to Perl to Oracle Applications4, but beyond abstract concepts like “problem solving” I didn’t get anything like a transferable skill. The obvious path would have been management but that wasn’t where I wanted to go. I saw friends and colleagues specialising, and earning considerably more money for the privilege.

I appreciate that I’m likely leaving money on the table, but I stumbled on a solution that works for me: being part of the field engineering team of software vendors.

Being in the field team means that I work directly with customers and they end up wanting to do all kinds of things. In a year I can work with dozens of use cases, satisfying my need for novelty. At an end-user, I’d be looking at a small number of use cases the whole time.

At the same time, there is also a degree of specialisation. By working with the same product all the time, I can become The Expert in it and some adjacent technologies. For example, I’m pretty good with Kubernetes and Java these days. I need to write code and sketch out software architectures. My knowledge has to be deep enough to demonstrate credibility but I don’t have to build production code. Additionally, I can bring domain expertise. I wouldn’t sell myself purely on my banking knowledge, but it’s a nice value add.

This may not be the solution for you. There may even be better options for me that I’ve not found yet! But I thought it was worth documenting my experience, since most of the articles I’ve seen are for more traditional “software engineering” or management roles. Other positions are out there if you know where to look.


  1. Though I wasn’t able to write anything about it in a timely manner! ↩︎
  2. Maybe second tier too, but in this case I mean there are at least two layers. ↩︎
  3. There’s a Dilbert cartoon I use occasionally. This from before Adams went off the rails. ↩︎
  4. Whether you’d want to make a career out of any of those technologies is a different story. ↩︎

Humane Recruitment

There are many ways that recruitment is broken for both candidates and potential employers, but this time I want to focus on one aspect that I experienced recently as a candidate: how companies and recruiters don’t treat prospective hires with respect. I’ve changed jobs a few times over the years and some of the ways that I’ve been (mis)treated in the last year surprised even me.

Let’s start with something that I’m sure we’ve all experienced: not getting a response back from an initial application.

“We get so many applications that we’re unable to respond to each one individually.” I totally accept that this happens. It sucks and I don’t believe them. Writing a single, bulk email to every candidate saying “Thanks but no thanks” would be better than getting nothing.

It is appalling, but I was prepared for it.

What I was not prepared for was getting the cold shoulder after an interview.

One company I had three interviews with and spent the best part of a day on an exercise they set and got no response for two months afterwards, even after prompting several times. By “no response” I mean literally nothing. Not a call, not a “we’re still considering options.” They were seemingly ignoring my messages. I’m not even sure that I would have had any response had I not kept bugging them.

I assume they found another, marginally preferable candidate but took a long time to convince them to take the job. Did they think I’d wait? (Reminds me of this piece.) Did they think I’d be flattered to be second? Given the cost of a bad hire, when I’ve been recruiting, a “maybe” is always effectively a “no.”

Is this how the recruiters would like to be treated? Even if there are really so many qualified candidates that you can treat people like this, should you? These companies treat you as a commodity. I’ll come back to why this is a mistake.

A quick aside: I’m using the words “recruiter” and “company” more or less interchangeably. I’ve seen the behaviour I’m talking about here both from recruitment companies and internal “talent acquisition” teams.

Even when I wasn’t completely ignored I didn’t feel that I was treated like a human. For example, another interview appeared to go well, at the end the hiring manager said “We’ll get you in for your next interview soon.” The next day I got an automated “no thanks” message, addressed to “Dear candidate.”

Both parts of that feel like a failure. Why tell me good news if there was the possibility of bad? Is it passive-aggressive? Was it just as simple as he didn’t want to give me bad news in person? Why not just say “We’ll get back to you soon”? Similarly, the automated message just felt like cowardice. I don’t expect long and chatty. I’d like to see a reason, but don’t expect it (The reason I don’t expect it is another rant.). But after meeting someone, investing some time into a relationship, I don’t think it’s unreasonable to expect something more personal than a form message.

How do I know it was a form message? I’d had exactly the same message – the same wording, the same punctuation, the same title and job description of the source – from another company using the same recruitment website.

There are two other variations that I want to mention. First, the rejection because of a missing skill that wasn’t mentioned in the job description. And, closely related, a rejection because of a missing skill you never claimed to have. Both, again, show a lack of respect for the candidates time.

I’ve pitched this all from the candidates perspective so far, but it’s bad for this hiring company, too.

Many of these examples are a waste of time for the people conducting the interviews as well as the candidates. And you know the old adage: time is money. A few minutes reading a CV / resume would show that a particular skill is “missing.” If everything else looked good, a quick phone screen would confirm.

But it’s worse than just the immediate effects. It’s also a reputational risk.

When I sat on the other side of the table, I always wanted to portray the company I worked for in a positive light. Just because you don’t get a job doesn’t mean you should end up disliking the company. Almost by definition, we work in the same industry. I may end up in a position where I could recommend your product. Or you. Why give me a reason to find your competitors or communicate your products your flaws? (One project I worked on at an earlier job, I found we won the work because we were nicer people to deal with. Sometimes it doesn’t take much to tip the balance.)

I recognise that I won’t be a good fit for every job I apply for, for a whole host of reasons, both mine and theirs. And I know that recruitment is an expensive and error prone process, but doing it badly could actually take more time and alienate people that you should been keeping on your side. Why not do it right?

Recruitment Tests

Over the years I’ve been asked to do a lot of programming aptitude tests. I’ve had to do some in the last couple of months and I’m deliberately writing this now before I get the results back of the most recent one so you won’t think that this post is just sour grapes…

I’m not going to get into the details of the tests because it doesn’t really matter what they are or who administered them for the purposes of this post.

I don’t like these tests. I don’t think they work well for either the candidate or even the company that is using them.

An obvious complaint is that the tests bare little resemblance to Real Life. On Twitter I cynically suggested that a more realistic test would involve trying it write a program based on an ambiguous and constantly changing specification. The test would end when you quit in frustration.

A bigger issue, I think, is the amount of time it takes and when they take place.

Let’s tackle the latter point first. Every time I’ve been asked to take a test it has been before I’ve spoken to anyone. All they’ve seen of me is my CV/resume. All I know about the company and job is what I see on their website and a brief job description. Am I a nice person? What is it like to work there? Neither party has any idea.

My objection to this is that we both have a lot to lose if the recruitment process goes wrong. I always consider an interview to be a two way process — they need to learn about me and I need to understand more about them — yet the very first stage in the recruitment process is them demanding a couple of hours or a days commitment of my time but only a couple of minutes of their time.

To be clear, I have sat on the other side of the table. I do know that far too many candidates have no real hope of filling the position. But, equally, you don’t want to push away the most qualified candidates.

Two hours is a good a chunk of time. A day is a lot of time. If I already have a full time job and am just looking to move to something better how are those requests going to fit into my schedule? Badly I’d hazard. A full day is half my weekend. Two hours is an evening. (At least! Finding two contiguous hours at home these days is a challenge.)

Sure, the least qualified candidates will fail it but the very best candidates probably won’t even take it. They’ll just say “no” and move on to an opportunity that requires less upfront effort.

I came across this quote earlier today: “Never allow someone to be your priority while allowing yourself to be their option” (either Mark Twain or Maya Angelou, not sure who said it first). That seems very appropriate here. Should I really prioritise these companies over others? Are these companies that special? (A possible exception would be really big names like Google or Apple but I think it’s fair to say that none of the companies that have asked me to do tests have been in that class.)

So, what’s the answer? Certainly there’s no silver bullet that pleases everyone and finds only the very best matches. Having thought about this I think the best compromise would be asking candidates to do something as basic as FizzBuzz (but probably not exactly that as it would be very easy to Google the answer).

To people who have never done any recruitment this probably sounds incredibly patronising. All I can say is that I wish that were true.

And if you really want to administer a test that takes more than thirty minutes, I think they’d be more acceptable much later in the recruitment process. Or failing that, offering to pay isn’t a ridiculous suggestion, though I suspect most employers would argue otherwise.

Afterword: After writing all this, why am I even taking the tests? Mostly because I’m currently between jobs so it’s difficult to argue that I don’t have the time.

After-afterword: I passed the test. I still don’t like them.

My delicious.com bookmarks for February 7th through February 9th

My del.icio.us bookmarks for July 15th through July 16th

  • Ars Book Review: "Patent Failure" – Interesting book review about the effect of patents on an industry. Apparently cost more money than they make in anything but chemical and pharmaceuticals.
  • Lucky to be a Programmer – I don't program as much as I used to but this explains why I love to when I get the chance.
  • WordPress 2.6 – Usual drill. I've upgraded to the latest version of WordPress, the underlying software of ZX81.org.uk. If you see anything wrong please let me know!
  • 20 Amazing Facts About  Voting in the USA – Still in any doubt that computerised voting machines are a bad idea for free and fair elections?

My del.icio.us bookmarks for January 12th through January 16th

  • Apple introduces new Apple TV software, lowers hardware pricing – Now potentially more useful with the movie rentals. But where is the price drop in the UK?!
  • Dell tells customer ‘Mac is good option’ – “Now, it’s possible that the techie was referring to a 1970s rock band, or to an item of waterproof clothing. But we can’t help concluding that he was indeed talking about Apple’s operating system.”
  • Steve Jobs gets cohesive – Some cool stuff from Apple at the MacExpo. I think the Time Capsule is going to be on my shopping list when it ships next month. The movie rentals (when they get to the UK) look interesting but they really need to build their catalogue!
  • How to recognise a good programmer – Great discussion on recognising great developers. The problem would seem to be finding them! Most recruiters just pattern match on CVs which tends to favour the “career” developer.