How To Hire A Software Developer (2012)

Drupal Code MonkeyOne of the fun and interesting things that has been cropping up with some job interviews for contracts and employment is the potential employer wanting to know whether someone is actually a good software developer or programmer. The trouble is that there are flaws in just about any way of doing it. Having been on both sides of the desk, I’ve helped hire good programmers and bad – even over the phone – and I’ve interviewed for positions that fit me like a glove or didn’t.

Here’s some things I’ve seen recently – but if you want, just skip to the ‘How To Hire A Good Software Developer‘ part at the bottom.

How Did You Learn?

This is a legitimate question for anyone without a year of experience – to be safe, lets say 2 years. I recall interviewing for a position around 2003 in Trinidad and Tobago – a position for some oil related company about a VB 5.0 position – and I was asked this. With close to two decades of experience on my resume at the time, I explained that it was learned on the job and that I had references on it. But that’s not what they wanted. That people learn stuff in the real world seemed to escape them.

Recently, I applied for an Open Source Consultation position. It’s a natural position for me, really – open source advocacy, familiarity with open source projects and not just how the code works but the communities around them as well as their directions. I’ve even spoken at 4 open source conferences I can recall off the top of my head (not counting smaller group meetings). But somehow, someone in that company thought… If they don’t have a degree in something, even underwater basket weaving, they can’t do the job.

Does a  degree actually help with programming? I’ve seen it go both ways. I’ve met great software developers – yes, some better than me, more than I might like to admit – but whether they had a degree or not wasn’t material. I’ve also met some really poor programmers who had great GPAs. Poor programmers without degrees don’t exist. Why? The College of Experience is not as easily gamed.

Degrees don’t matter unless it’s an entry level position – and entry level positions are high risks for both employers and employees anyway.

Code Samples

There are a few companies out there that ask for code samples and, really, that might be a good way to judge how someone wrote code when they wrote the code – with or without help on a project that may or may not pertain to what the potential employer needs to have done – as opposed to what they may actually advertise for the particular position.

Another problem – one that I run into – is the ever present NDA. Believe it or not, there are companies out there that don’t seem to understand that work done these days is almost always covered by an NDA. Unless you contribute code regularly to open source projects, this may be a pit of despair. My thought: If the hiring company doesn’t understand NDAs, maybe they haven’t worked on things that work with business intelligence.

Fizzbuzzed.

When Jeff Atwood wrote ‘Why Can’t Programmers… Program?”, the Fizzbuzz test became popular with employers unable to design their own tests. A mind familiar with solving academic problems does well with these things. Not all programmers are familiar with solving academic problems. Recently I was asked to write some code that showed the first 10 prime numbers – and in trying to recall the first 10 just as a quiz for myself, I missed a few. I did do the code on the whiteboard, but hey, the point is – the muscles exercised are the strong ones. In programming since the 80s, this was the first time someone thought the prime numbers were important enough to write code for.

Code testing is subjective. This is as it should be. But if you want to do some code testing with a candidate, why not make it subjective to the job itself? Factor in that problems as famous as Fizzbuzz can also be crammed for. Really. Just Google interview code question. Rather than throwing Fizzbuzz or an analog of it out there, why not have a test that relates to the business in the position being filled? That might be a good test. In fact, that should be the test. The candidate should be able to tackle a problem that relates to the position being filled.

What’s special about the position? Test that. It typically includes the skills that you need tested anyway.

The other part of this deals with attitude. Throw a real problem at a real software developer and you’ll get to see how they really think, code and how they approach that problem. People don’t always approach the same problem the same way and that has benefits. The interviewers have to be able to understand that. When trying to make a good first impression sometimes people don’t.

Personality

Personality tests are used here and there and the results are almost never released to the candidate. As someone who has tested consistently as an INTJ1 for decades, I’ve made it a hobby. To an INTJ, a hobby is a serious thing. I don’t claim to be an expert on personality tests but I’ve read a lot on the topic and have taken a lot of tests.

Some things to remember about personality tests:

  • They are snapshots. A personality test is affected by ‘where’ the person is when they are taking the test; stress and other factors change the results.
  • They are incomplete.
  • They create a great industry for people who make money testing personalities and telling you that you need to do them.

How To Hire A Good Software Developer

So here it is. The magic of hiring a good software developer can be summed up in point form.

  • Why do they want the job? Save the ‘World Peace’ beauty contestant speech. If a software developer has everything you need for the position, they can’t grow. A good software developer grows. If a developer has nothing to aspire to then they aren’t a good developer.
  • Do they understand your business? A developer who understands the business, even in the broad strokes, is better than someone who can do the Fizzbuzz test in one line (yeah, it can be done in one line in at least one language I know of). Some of the hardest and best interviews I’ve had involved ‘walking the floor’ and being shown the business and the role the developer would be playing within it.
  • Can they problem solve? The best way to check is to go over problems related to the business. You could hand them a Rubik’s cube – if your business is about solving Rubik’s cubes. You could have them write code, too, but try to make it at least related to the job.
  • Interviews can be nerve-wracking for people on both sides of the desk. A good interviewer harnesses this and can choose to disarm or build pressure – typically both. This is why some companies play ‘good cop, bad cop’ in interviews – but the interviewer has to understand people to do any of this. If you’re pulling someone kicking and screaming away from their keyboard and their social skills are limited to Internet interactions, their body language will likely throw things off. If the interviewer doesn’t interact with people on a social level very well… things can go bad.  And if the software developer being interviewed is a social misfit, the question is whether this misfit will fit in with the other misfits.
  • Curiosity. Good developers are curious.
  • Thoughtful – not in the ‘brings flowers to funerals and weddings’ thoughtful, but a good developer will sometimes take the time to think through something rather than rushing off on tangents. Rushing off on tangents is typically what less experienced developers do.
  • Confident. This is not to be mistaken for false confidence.
  • Interested. If they’re yawning, they’re not interested.

Clearly, everyone will approach hiring a software developer differently and it’s no question that they get different results. The trick is not finding the perfect software developer.

The trick is finding the right software developer.

Feel free to comment!

1Myers-Briggs Type Indicator and Socionics, thank you very much.

On Quality In Production Code (2012)

So I’ve been playing StarCraft II: Heart of the Swarm

Once upon a time in a universe resembling this one at a younger stage, I dreamt of game programming. I don’t think that there’s any coder of my generation that didn’t have similar aspirations – perhaps getting published in Compute! magazine, perhaps getting one’s name on the box, or maybe even just writing a really cool game. I stand with the majority of developers who have never done that sort of thing. Times changed.

Consider what the person who wrote Galactic Adventures and Galactic Gladiators had written on the Well (apparently before they thought of putting a name to it):

To me, the most amazing thing about doing these games (and I’m about to date myself) is that I did virtually everything myself. I designed the games, programmed them, drew the graphics (quite primitive), wrote the rule book I did get help from friends and people at SSI in testing and making suggestions. Compare that with today where new games are developed with a million dollar budget and use teams of 30 or more people, programmers, artists, tests, story consultants, etc, etc. And you know what — the games of today are better (Gee, why is that a surprise?)

With that in mind and considering that I knew about Blizzard when the original Warcraft was a freeware game where you paid a bit more to get a full version – no, not the MMORPG you kids play now, but the Warcraft that started a new genre that Starcraft continues – Blizzard has come a long way. Since then, Battle.Net has come online. Since then, numerous titles have come through Blizzard and, while I haven’t played Diablo or messed with World of Warcraft, not one title hasn’t been popular. Blizzard has a kind of magic that works for them. I just like a particular genre and have found MMORPGs to be disappointments when it comes to content; I dislike leveling a character by what is properly termed grinding.

All of that said, I’m sure the budget for the Heart of the Swarm expansion was over a million dollars. I’d wager that it was at least 10 times that amount. The detail is great, the storyline is good (though how a prisoner in a high security prison has a pistol escapes me) and it’s playworthy – though I keep mixing up Q and A on the keyboard. But here’s the thing: I played through the game that took so long to develop in about 8 hours of game time. Hard difficulty, much the same. Brutal – well, that’s still in progress. There’s always the PvP maps and the challenge maps. I figure that, all things considered, the game will last me well over 1,000 hours of playtime.

It sold 1.1 million copies in 48 hours. At $40 per expansion, that’s $40.4 million in 48 hours.

Yeah, we’ve come a long way from typing in games from magazines. We’ve come a long way from a single developer writing a game. There was a magic to that era, though – we didn’t yet expect a great game. We expected a game and hoped it would be good. Now people get their sodden underwear twisted when they start talking about game balance and other things on the forums. As a fuddy-duddy, I see that as an odd form of entitlement – people expect a lot more for $40 and have the privilege of time to gripe about it in poor writing.

Game development has come a long way. Humanity? Not so much.

Thank you, Blizzard, for what I consider to be another great game. As a developer, I wish I had a hand in it. I’ll wait for the Protoss section. Take your time.

3D Printers Disrupting Copyrights and Patents (2013)

3D-Printed Slide-TogetherIt wasn’t too long ago that DIY 3D printers started making the news in geek circles. It captured the imagination of some and was largely ignored by others. I was somewhere in between until a few days ago. I’ve since slid somewhere closer to imagination, perhaps because someone printed a rotor from a Wankel engine and posted it on Facebook.

This got me thinking that in a few years, I could quite literally have a custom Wankel engine printed. Factor in last month’s Scientific American article, “Information Is Driving a New Revolution in Manufacturing“, things get even more interesting. Still, it enters a new dimension when in the future, having a 3D printer may be as normal as it is to have a printer now. And we all know those ink cartridges are ripoffs.

It’s going to get really interesting. Already a 3D gun has been printed and test fired, creating a bit of panic with some. The government is acting predictably. This is hopefully not the highlight of 3D printing’s contribution to society; I’d have preferred not to mention it but there’s no getting around it. We’ll get past that speed bump or we’ll all die in a crossfire of 3D printed guns.

Back to printing an engine. Or parts for your car. Or parts for your computer. Then we get into the costs of the raw materials and an economic upheaval as people who fabricate things become less and less needed. What the printing press was to scribes 3D printing is to the majority of fabricators.

But wait. There’s more.

You know all those copyright and patent issues we have with technology and, yes, even agriculture (Monsanto vs. Farmer). What happens when 3D designs escape into the wild, as the 3D printed gun already has? How are companies going to control that?

They won’t. They’ll try, but in the long run they won’t.

It’s a strange new world coming. Some people are going to become very upset.

Image at top left courtesy Flickr user fdecomite, made available under this Creative Commons License.

Software Cost and Complexity (2013)

Exposed gnarly roots in Fall River ParkTwo seemingly unrelated things popped up over the last few days. One of these things was an article along the lines of a discussion I had not too long ago with friend Yermo about. Simplicity in software design. From Reducing Complexity: The Next Software Imperative:

…And that should be the goal of all developers to make an app so elegant, so well designed; you forget you’re using it –or even the device on which it’s installed. The reason people gravitate toward apps at work is because mobile devices often offer the most elegant solutions to long-standing problems. Instead of fighting with clunky enterprise software, users find software that does what they need it to do and nothing more –and more importantly that just works…

For those of you who don’t remember what the Mozilla browser used to look like, as an example, one need only take a look at the community Seamonkey project, something I use every day because it does many things I want to do exceedingly well. It downloads my emails for me, something that it seems a generation has completely forgotten about unless they’re locked into Microsoft Outlock Outlook. It has a built in HTML editor. It has an IRC component. It has an address book.

I’m not the norm. The Firefox project does one thing very well. It’s just a web browser. Seamonkey and Firefox have the same engine underneath. Which one is more popular? I don’t think I need to look for statistics to show you that Firefox is more popular than Seamonkey.

More popular examples would be apps for mobile phones. They do one thing and they do it well (unless it’s something recent from Facebook, or so I hear). Simplicity.

Yet simplicity almost always masks complexity; it’s a matter of who deals with it.

In a world of small or non-existent budgets and lots of well intentioned people, software developers inclusive, this can be a sticking point even when trying to do something pro bono.

As Jon Lebkowsky (of Polycot Associates) posted in a status update yesterday:

Never fails – you offer to build a website pro bono and the recipient of your love is irritated that you can’t create a $20K miracle for nothin’. Hopefully I’ve learned my lesson, finally.

As someone who has found himself in similar shoes, I’ve noted this a lot. The ‘$20K miracle’ here is the problem anyone dealing with any software development has run into, be it for a small business, a large business, a non-profit or a family member – or someone who heard from someone else that you do websites. Recently I have seen it twice – the first with developing an API for an web host company to wrap other disparate APIs. The second was fixing an old Drupal install to do something that has a module for it in Drupal 7.

I could go on. I imagine many software developers could, particularly those of us in contract/freelance mode.

The point is that client expectations are high but they fail to realize that a simple logo and textbox on a website – simplicity in and of itself – masks a lot of working code in the background. Who am I talking about? Google. The simplicity of the Google page is probably the best example of masking a lot of complex algorithms that provide people with, more often than not (we hope) what they are looking for on the Internet.

The tree, as simple as it may look, has complexity hidden below the surface in its roots.

With mobile development applications, it’s the operating system and hardware. With Microsoft’s .Net platform, it’s an API that does a lot of the ground work and makes software developers into software librarians – a trend that the open source community has followed.

Move over Dewey Decimal System.

Simple for the user often translates into complex for the developer, depending on the requirements of whoever the software is being written for. TANSTAAFL. The more simple the outward appearance, the more likely the internals are complex – and increasingly, this seems less intuitive for people.

Complexity costs money. Making complexity look simple costs more. There is cost and there is value. A simple outward facing site like Google masks a complexity that costs a lot but clearly has a value greater than the cost.

The focus should be on value and simplicity or making complex processes appear simple – and keeping any complexity within budget. If that budget is 0, don’t expect a lot of complexity.

Remember – users want simplicity or, better, they don’t want complexity. Making your website or software project appear simple is the rub.

Image at top left by Martin LaBar (going on hiatus), made available under this Creative Commons License.
Note: As an experiment, I’ve turned off links to social networks and only allow registered users to comment here. This is an exercise in simplicity; discussions will happen on social networking sites. I’ve noted the trend; people don’t comment as much on sites unless they’re spambots. After reviewing statistics after a month, I’ll revisit this.

Nature and Data Structures (2013)

Cactus Flower Blooms (at night)

I haven’t written much of late as I moved to Florida last week and have been busy networking, job hunting, writing about the journey and taking pictures. I’ll be writing more often.

With the recent return to Florida, I’ve clearly been working on finding work amongst other things. I’ve also been enjoying the flora and fauna because of the good fortune I’ve had in finding a friend’s home a temporary lodging. This reminded me this morning of how often people at Honeywell, during my time there, thought I was goofing off when I walked outside and stared at the trees outside. I wasn’t really goofing off. I was considering the natural structures and finding some assistance in designing data structures for the work I was doing.

Natural data architectures are compelling, simple at some levels and very complex. Almost all of them are built on osmosis, where concentrations allow atoms and molecules to wander through permeable membranes based on pressure – not unlike electrical voltages across resistance or water through a plumbing system. The difference between natural structures and artificial structures is that, as Feynman once said,

For a successful technology, reality must take precedence over public relations, for nature cannot be fooled.

Failed data structures in nature are pretty easy to spot.

They’re dead.

Yet even in death they have value – they are recycled, the essence of the philosophical ‘rebirth’ found in some religions. In a well operating ecosystem, nothing is wasted – everything that is ‘alive’ or ‘dead’ has some worth to the ecosystem or it is quickly replaced.

The flower on the left is a picture of a cactus flower I took last night. It opens only at night.

This can be related to a structure such as a website. The flower has a purpose which, as most would understand it, is marketing. It has a definite demographic for who it is marketing to. I’m not sure what exactly it attracts, but I’d wager it is targeting nocturnal insects and perhaps even bats – but whatever its market, it isn’t the classic stuff that people are taught in school such as bees and birds.

Once pollenated, the structure goes about doing what most other flowers do – something pretty well documented anywhere. But this particular data structure is interesting in that it has evolved over millenia to bloom at night, when it’s cool, when life is more mobile in climates where the days are decidedly hot. It’s a wonderfully beautiful thing that most people don’t get to see because they’re not out at night. The scent is wonderful as well.

Studying data structures like this, looking for hints from nature on how to do something, provides us methods of making a better data ecosystem.

Maybe the internet and social media would be a better place if more software developers stepped outside a bit more often. The days of software architects and developers fearing sunlight have past.

UX and SaaS (2013)

Dried Peppers

It’s old news that Flickr has updated its site. It’s old news that thousands of users don’t like it. After a solid week of using it I have to say that I don’t understand why people are griping so much.

This last update really works for me. I realize in the end that I may pay more for the Flickr service in the long term but I’ve got 17,210 pictures on Flickr at the time of this writing and I suppose I will eventually go over 20,000 images. That’s a lot of images (I plan to go through and delete some over time, particularly some of the less interesting ones). Is it the best service in the world for hosting images? I don’t know.

What I do know is that it does what I need it to do – and now it has made new photos from my contacts more engaging on the Flickr main page. This means that my images also get seen by my contacts more easily and, really, on a photo sharing site, visibility is king.

Am I in the majority? I don’t know. I do know when you update a service with live users, people get cranky. I’ve seen it with many services over the years and have seen updates that really suck. Flickr’s update, to date, has no down side that I’ve found.

Updating Services: The Ups and Downs.

Users are strange creatures when it comes to services. Users invest heavily in an emotional way in what they use; that’s the hook. In the context of Flickr, we users develop contacts and like it when people favorite or leave nice comments on our photos. It’s a pat on the back, an affirmation, a feel good moment. Sad is the photographer whose photos no one likes. I’ve never been extremely popular on the service because of a variety of reasons and I’m OK with that. The only person I’m really interested in being better at is me, but there are some competitive folks out there who take getting listed as an interesting photo quite seriously. They accumulate likes and favorites as if they were actual currency – and they’re not.

It’s typically that gaming element that has people complaining most about a service. In Second Life, it was about impacting how people made real currency. On Twitter, it’s about how many people retweet you. On Facebook, it’s about how many people like your page or like your posts or share your posts. The gamification, often heralded as a game-changer, is a double edged sword.

Aside from the popularity contest, there’s the user experience. UX is what they call that now because we humans like to abbreviate things and, in this case, ‘UX’ allows people who don’t do well with 4 syllable words a chance to discuss user experience – perhaps a dangerous thing if one thinks that through. Most people feel an emotional ownership of a service despite the fact that they don’t actually own the service. This ‘ownership’ creates brand/service loyalty but it also doesn’t react well to changes perceived as drastic even when the changes positively influence what users can do.

Change is difficult to swallow, not unlike a hot pepper. Mixed in with other things, change becomes more easy to swallow. It’s an issue of flavor and gauging the taste of the audience. Smart owners of services take the temperature on issues before they do so, allowing people to believe that they have an effect on the service they get (and reinforcing the false ownership) and that they matter – but the reality is that what people want also has to meet the criteria of the owner of the service. TANSTAAFL.

Every change that Facebook makes upsets people. Yet Facebook users still use it, even if only to complain about Facebook. The same can be said of any service. It boggles the mind at times what users will put up with despite their complaints. From the outside looking in, one has to wonder why people do put up with so much.

That’s where User Experience comes in.

Language And Tech (2014)

tweet

It’s official, for better or worse: ‘Tweet’ is now recognized in the Oxford dictionary despite breaking at least one OED rule: It’s not 10 years old yet.

Big Data‘ also made it in, as did ‘crowdsourcing‘, ‘e-reader‘, ‘mouseover‘ and ‘redirect‘ (new context). There’s a better writeup in the June 2013 update of the Oxford English Dictionary (OED) that also dates the use of the phrase, “don’t have a cow, man” back to 1959 – to the chagrin of Bart‘s fans everywhere, I’m sure.

As a sidenote, those that use twitter are discouraged from being twits and ‘sega’ is actually a dance from the Mascarene Islands.

It’s always interesting to watch how language evolves and sometimes it’s a little disturbing. I honestly don’t know how I should feel about ‘tweet’ making it in as the brand ‘twitter’ is based on the word ‘twit’… see above link… but hey. Oxford says it’s ok and twits and tweeters everywhere can now rejoice.

Image courtesy Nancy L. Stockdale and made available through this Creative Commons License.