Thursday, December 18, 2014

Want to get a job? Stop mumbling.

You'd be amazed (or not) at how many people when doing a phone interview for a job, speak in a mumbling and unclear manner.

Speak UP, loud and clear and confident.  Listen carefully to the interviewer on the other end of the phone.

Don't fake sounding happy but do be upbeat.  So many job seekers speak on the phone like their cat just died.

Wednesday, December 17, 2014

I sent one of the best developers I know to a job interview, he was rejected.

I worked closely with a guy for five years who was one of the very best developers I've ever worked with.  He was very fast to develop highly reliable, feature rich code.  Very fast to learn any new technology.  Modest, easy to work with, nice guy, no hassle to anyone ever. Could build applications of arbitrary complexity. From my personal experience of five years of working with this guy closely, daily, I knew he was one of the best developers you can possibly find.

Eventually I sent him for a job interview with a company.

This company of course, like all companies, have a "really well thought out interview process that does a great job at identifying the best developers".  Just like YOUR company.

What happened?  They interviewed him, they rejected him.

THINK about that.  Have a close think about it. Now think about your company's awesome recruiting process.

Tuesday, December 16, 2014

Is your developer recruiting process just stroking your company ego?

Some companies have recruiting processes that are extremely selective.

The standard is in fact so high that they recruit few people, despite doing large numbers of interviews, and despite needing to fill many positions.

Paradoxically, the company feels good about its inability to meet its recruiting needs. The company thinks that its incredibly selective process ensures it is getting the best developers.

More likely their incredibly selective recruiting process is just interview questions that don't actually identify great developers, instead just asking questions that (of course) eventually manage to find fault even with great developers. Almost everyone gets filtered out.

The company doesn't mind however because the large number of rejections builds a sense of exclusivity and elitism. This elitism strokes the company ego, reinforcing the value of the overly selective interview process, entrenching the ineffective process further.

Sunday, December 14, 2014

Who's the Google engineering genius behind ultrasonic pairing?

The latest version of Google Chromecast uses "ultrasonic pairing"

Read about how convoluted the process is in this article: What You Need To Know About Chromecast’s New Guest Mode

Google has taken device pairing, which is already much harder than it should be, and made it harder.

Google - here's one for free - the right way to do pairing between devices is based on the device location. When my phone is near my Chromecast, it should become the keyboard and touch controller for it. When my friends phone is near my Chromecast, the Chromecast should just know that. Easy, no silly device pairing numbers or audio tones. To make the phone the controller for any device, be it Chromecast, Xbox or Playstation, just use GPS and the Internet. No need for silly audio engineering tricks and convoluted processes.

Devices know when they are near each other - just pair them automatically please. And if a device (like Chromecast) doesn't have a GPS, then just put a phone near it during its setup and make the setup process find its location from that.

"Ulstrasonic device pairing" - some engineering genius at Google is proud of this dumb idea.

More links:
Chromecast's ultrasonic device pairing is much simpler than it sounds
Chromecast will use ultrasonic sounds to pair your TV with your friend’s phones

Sunday, December 7, 2014

Employers don't want great developers, they want what they want.

When an employer asks me to find them a developer, they almost always want the same thing - smart, passionate, clever. And when we find a great developer, there's a good chance the employer will be reject that candidate for reasons that I find hard to understand.

Employers don't want great developers - they want people who match their image of what a great developer is. They want what they want.

Friday, December 5, 2014

If the product you are developing is not viral, maybe it belongs in a marketplace.

If your product has no viral mechanism, then maybe it belongs in a marketplace. So before you start developing, know which marketplace your product is suited to. Don't get to the end of the development process (as I do) and then  wonder how to get it in front of buyers. Understand marketplaces in advance.

Wednesday, December 3, 2014

When I write no code, that's when I do my fastest programming.

The time I spend actually writing code is the slowest part of any of my projects. Coding to achieve a specific goal can easily take hours, days, weeks and even months, depending on the goal.

So I put a large amount of thought into how to achieve my goal with as little code as possible. Often I sit there for hours and hours starting into space thinking about how to reduce the amount of programming needed.

If I'm really lucky, I'll work out how to achieve the goal with no programming at all. When I write no code, that's when I do my fastest programming.

Tuesday, December 2, 2014

Programming, it takes a long time to find the quick way.

Programming often requires that you take a very long and winding route in order to eventually find the shortest path to your destination.

Sunday, November 30, 2014

Programming - so much of it isn't writing code.

I seem to spend just as much time in working out how things work, tying together systems, understanding applications and servers, configuration and deployment (AWS, docker, DNS, backups, email, database, web server etc etc etc) as I do in writing the code for my whiz bang new idea.

I do wonder how programmers without deep Linux skills manage to get their job done.  I seem to need every Linux trick in my book to manage to get the final system pulled together.

Tuesday, November 25, 2014

When you hear "We're moving support to Stack Overflow" say, "We've moved our business".

Do a search for: "We're moving support to Stack Overflow" (without the quotes). You'll find there's a number of companies making similar announcements.

At first glance it seems to make sense, after all that's where the developers are going to get their technical questions answered isn't it?  So why bother maintaining a separate support presence?  May as well just send all the support to Stack Overflow.

But it's a bad, poorly thought out idea.

Stack Overflow is not a product support forum.  Stack Overflow is a place to get highly specific, tightly defined programming questions answered. Stack Overflow is also run by a community with a reputation for being somewhat hostile and with a reputation for heavy handed moderation.

If you are a software vendor who is "moving support to Stack Overflow" then you should consider a few things:

1: If you think that all your support questions are tightly defined technical questions and answers well suited to the Stack Overflow format, then you are wrong.
2: Have you given any thought to how your customer feels about your company and your product when their question on Stack Overflow is voted down within seconds and then closed within minutes? Are you comfortable with your customers being roughly handled by the tough rules enforcement at Stack Overflow?
3: It is your job as a software vendor to be accepting of the varying levels of your customers technical capability, and to help them regardless of how well they are able to formulate their question
4: Your users will have questions that are not technical but they still want an answer from you. They have questions like "when is this happening?", "what is happening with feature X?", "I'm evaluating your product, does it do Y?", and of course "why the fuck is your product not working, I paid you good money, please fix it now."  How are those questions going to go down on Stack Overflow?
5: Your sales come partly through your support channel.  You've just thrown it at Stack Overflow, brushed your hands and walked away.  How does your sales hungry CEO feel about that?

None of this is the fault of Stack Overflow.  That's the way it works.  It's a technical question and answer site with clear requirements and a tough community.

So if your software vendor says "We've moved support to Stack Overflow" say to them, "We've moved our business".
A place you can ask questions that don't fit at Stack Overflow.

Sunday, November 23, 2014

When choosing a new technology, priority one is documentation and drivers.

I'm looking at graph databases at the moment, trying to work out which one to use.

The thing I'm interested in first and foremost is quality of drivers and documentation.  The better the drivers and documentation, the less painful development is likely to be.  Unfortunately, drivers and documentation for Python tend to be an incomplete half-assed hack job.

Most database developers put all their effort into writing the core database code.  They should put most effort into drivers and documentation.

"Keen to learn" - bullshit or lazy.

Whenever I read a resume that says "I am keen to learn technology X." I always think "Well, why the hell haven't you already learned it?". There's no obstacle to learning some new technology.  Just go do it.

When I read "I'm keen to learn", I think "bullshit or lazy". Close resume.

Why is there no official Go SDK for Amazon AWS?

Amazon has bet big on Docker. Docker is built with Go.

But there is no official Go SDK for Amazon AWS.


Friday, November 21, 2014 launches, a nobel prize for Joel and Jeff and a silver nuke.

Sat 22 Nov 2014

This post announces the launch of Not Constructive (, a place to discuss software development and related topics.

Fred Brooks said that there is “no silver bullet” . What he meant is that in software development, there’s nothing that will give an order of magnitude increase in software developer productivity.  But when Fred Brooks said those famous words there was no such thing as Stack Overflow.

Stack Overflow is responsible for the greatest ever increase in programmer productivity.  I’ve got no science and no numbers to back that up but I can't think of anything that's had greater impact. What could be more powerful than aggregating the brainpower of all the worlds software developers into a carefully curated set of questions and answers and discussion on how to solve problems in software development.  Stuck?  Got a question?  Try asking all the software developers in the world.  It’s truly amazing just how powerful it is.  Stack Overflow isn’t a silver bullet - it’s a silver nuke. Software development hasn’t been the same since 2008 and Stack Overflow has delivered the order of magnitude productivity increase that would have been impossible pre-world wide web.

Stack Overflow has had a greater impact on software developer productivity than anything else, ever. I’m not being facetious when I suggest that the creators of Stack Overflow; Joel Spolsky and Jeff Atwood, deserve a Nobel Prize for Stack Overflow.  That’s how important Stack Overflow is. Given that there’s no such thing (yet) as a Nobel Prize for software, a Turing Award for Joel and Jeff would be well deserved.  These guys have fundamentally changed software development and are amongst the greatest of modern computing groundbreakers. I've exchanged emails with them both for a couple of reasons over the years and it feels like hearing back from Mick Jagger for a Stones fan.

But Stack Overflow isn’t all rainbows and unicorns. I've come to dread using it. Try asking a question on Stack Overflow.  Chances are within a matter of minutes (or seconds) it has been downvoted.  Huh?  What’s wrong?  I thought it was a reasonable question, well written.  Apparently not.  Within only a few more seconds other members of the Stack Overflow community will have turned up to vote you down further.  It seems your question sucks.  Your question isn’t a fit to Stack Overflow.  The community at Stack Overflow feels like a bunch of pedantic rules lawyers. The moderation seems heavy handed.  Downvoting feels like a significant part of the problem. A downvote is a criticism, and people don’t like being criticized.  Criticism breaks down human relationships, and given that downvoting is central to Stack Overflow then criticism of its user base is also central to Stack Overflow. Another glitch in Stack Overflow that doesn’t help is that when you get a message in your inbox, the icon is colored red. For that longest time I assumed that I had done something wrong, that maybe this red icon indicated I had been downvoted.  I’ve worked it out now but red is a color that indicates that you’ve done something wrong and Stack Overflow likes to make it clear that you’re getting it wrong. Stack Overflow has a very negative, judgmental feel to it.   I like the answers that I can get there but it’s no fun participating.

To be successful, Stack Overflow requires this level of pedantry from its community.  It is a question and answer site for answering programming questions, and the questions and answers need to be very clear and need to meet certain standards in order to be valuable.  If Stack Overflow was more open and free wheeling then probably it wouldn’t work.  It works because the community is so rigorous in enforcing correct question and answer structure.  But there are lots of valid questions in software development and computer science that don’t fit the tight criteria of Stack Overflow.  There needs to be somewhere to ask those questions and that is why Not Constructive exists.

The risk of course with Not Constructive is that it will attract only the angry disenfranchised refugees from Stack Overflow, and that the tone of Not Constructive will reflect that negativity.  I hope that doesn’t happen. I’d prefer that Not Constructive be a complement to Stack Overflow, not an angry place.  Some questions fit Stack Overflow well, some questions fit Not Constructive better.  Not Constructive has different goals to Stack Overflow and should be able to be a positive place where people can discuss and ask questions that don’t fit elsewhere.  Our community principles are here.

Ironically, Not Constructive uses Discourse, the open source discussion forum software also created by Jeff Atwood. Discourse is a superb piece of software and extremely well thought out and reliable, a pleasure to use.  It’s a pity it’s not written in Python which is the language I prefer to use, but there’s nothing comparable available in any other language so the pragmatic decision is to just use it. Discourse seems so complete and well written that for once I don’t anticipate I’ll need to dig into the code and futz with it to make basic stuff work, as needs to be done with just about every other open source system.

Not Constructive was first announced onHacker News in Jul 2013.  The exact number is lost now but we had around 14,000 people add their email address to the list of interested people.  An incredible response.  Hopefully we’ll get plenty of people joining in the discussions at Not Constructive. Why has it taken so long you ask?  That’s another blog post which I’ll write soon.

So for now, if you have any questions about software development, computer science, operating systems or deployment please post them at

And if you’re interested in being a moderator please let me know at the address below.

See you there!

Andrew Stuart

Tuesday, November 18, 2014

In recruiting? Just say no to cash refunds.

Recruiting is, for the most part, a commodity in endless supply.  Or is seen to be anyway.

There's only one direction for the value of highly available commodities - down.

The current trend in recruiting is for employers to demand not warranties, but cash refunds.

Is say it's gone too far and its not commercially viable to accept cash refunds as part of the deal. Both employer and recruiter invest significant time and effort in finding the candidate in the first place, and both employer and recruiter carry out assessment to evaluate the candidates suitability.

If the employment deal does not work out for whatever reason, then the risk and responsibility lies with both employer and recruiter. Cash refunds mean the responsibility and risk lies entirely with the recruiter and that's not justified.

The most effective mechanism for dealing with a new employee leaving within the warranty period is that the recruiter gives a strictly-no-cash-refund account credit for the amount of the original invoice.

This means the employer is free to get the replacement from the recruiter, direct or some other source, and still imposes an obligation on the recruiter to find another person for the employer at some time.

If you are a recruiter and an employer requires a cash refund - just say no thanks to that relationship and move on to another employer who wants to do effective business in a commercially balanced way.

Just say no - and send all those great candidates that you find to a company willing to have a sound commercial relationship.

PHP feels in decline.

PHP feels in decline. Despite the fact that PHP remains the primary development language in use at Facebook.

New developers aren't coming through the ranks with a passion for PHP.

If you're an employer with PHP systems it's time to start thinking about how he lack of good resource might impact your future ability to find people to work on your systems.

Wednesday, June 18, 2014

When Apple stops bothering to compete.

When companies no longer feel competitive pressure they stop bothering to compete. Microsoft stopped bothering to compete in browser technology after IE6 effectively killed Netscape. It wasn't till Firefox arrived that Microsoft decided to keep actively doing browser development.

I'm not talking about any Apple product except the Mac Mini. I want to buy a new Mac Mini. The Mac Mini was last updated October 2012. I'm not going to buy a new computer that is effectively well out of date, so I keep waiting for the update. I've been waiting since October 2013 and no new machine.

If they do plan a new Mac Mini then they have left the update way too long - the current machine is now dead technology. If they don't plan an update - i.e. if Apple plans to discontinue the Mac Mini - then they should have announced that so we can make other plans. Either way, Apple has really dropped the ball here.

The impression given by Apple here is that it doesn't care and feels no need to compete. That's a pity, hopefully it's not a sign of over confidence.

Monday, May 26, 2014

Python 2 versus Python 3 a beginners perspective.

I wanted to comment from a beginners perspective on the constant attacks on Python 3 by some people who believe Python 3 was a step backwards and that Python 2 is much better. For example Hacker News recently had a post "Python 3 is killing Python". I respectfully beg to differ.

I'm a new programmer to Python and started about 1.5 years ago. I chose Python 3 because it seemed pointless to learn the old version. Given that I was starting with no prior knowledge of Python, there was nothing to be gained from starting with Python 2, only to have to learn Python 3 at some point in the future.

I'm not a great programmer like Zed Shaw or Mitsuhiko, developers who I very much admire and who are fairly vocal advocates of Python 2. I'm not even a particularly good programmer to be honest.  I'm an adequate beginning programmer and can get the things built that I want and I love doing it.

I love programming with Python 3. I don't experience it as a chore, or complex, or difficult, or broken. When I first started with Python 3, availability of libraries was a problem. The vast majority of libraries were Python 2 only. Today in mid 2014 I would say that apart from Amazon and Google, third party library support for Python is now effectively solved for many common requirements. Amazon and Google do need to have an explicit position on Python 3 and communicate it. Apart from that, there is almost never a problem finding a Python 3 third party library to do what I want. Have a look at this list to see what supports Python 3 If I want to do something in Python 3 then chances are there's a third party library to do it.

I applaud the courage of Python 3 to be backwards incompatible. Whether or not they got it right is open to question but it's not always a good thing for technology to remain completely committed to being backwards compatible.  Infinite commitment to backwards compatibility results in an accumulation of complexity, cruft, strange edge cases, massive testing load, inconsistency and bloat.  Windows is the prime example. Sometimes it makes sense to have a spring clean and leave the old concepts behind.

One of the key complaints about Python 3 is that it is so hard to build code that works on both 2 and 3. Whilst I recognise that vast quantities of legacy code must remain backwards compatible, perhaps try building some new projects purely in Python 3. Maybe that won't hurt so much.

The vocal critics of Python 3 keep saying things like "no-one uses Python 3". I don't believe this. Unless compelling evidence can be put forward to say that no-one uses Python 3. Where is the tangible evidence to support such a claim? Download stats that show lots of Python 2 downloads says nothing about how many program with Python 3.

I don't care if people want to stick with Python 2 - they can do what they want. I do have to say however that yelling about how good Python 2 is sounds very similar to the people who used to yell about what a great operating system OS/2 was, or how fabulous the Amiga was. These are old and dead technologies. It's really irrelevant whether or not some old technology is better than the new stuff. The old is gone. Sure you can fork Python 2 and try to keep it alive, just like Team OS/2 keep using OS/2 and all over the world hobbyists remain committed to the Amiga dream.

Python 3 works for me and I love it. As a beginner it was a great learning experience. I see increasing support for Python 3 everywhere.  I rarely run into roadblocks. Python 3 support seems to be becoming the standard rather than the exception. Looks to me like a bright future as evidenced by the Python Wall of Superpowers