Some Thoughts On Software Development

Before the job interview that I mentioned the other day, the company asked me to answer some questions in writing. I didn’t get the job, but I was pleased with my written answers (and they presumably helped me to get the interview, at least). So I thought I’d reuse them as a blog post. None of this should be surprising for anyone who knows anything about the software development field, but it’s interesting to reflect on how things have changed across my career.

What are some of the fundamental changes in your approach to software development you have adopted in the last few years?

There are two main changes that are fundamental and independent of languages and deployment environments: agile techniques and test-driven development (TDD).

Agile

Moving from waterfall to agile development was probably the most significant change to development practices in the industry. We always knew that breaking work down into smaller units led to better estimating, more modular code, and just better software. The genius of agile was to extend that understanding to the period of time spent on a block of work. A two-week sprint, with its work being specifically estimated, planned and developed, is just infinitely more manageable than a project phase lasting months.

Add to that:

  • self-organising teams which include someone from the customer or end user — or at least someone whose role is to represent the user;
  • accepting that change will happen, and embracing it;
  • and the discipline of saying that some features won’t be developed;

and we have a recipe for success.

TDD

Good developers always understood that testing was essential, and did it. But they used to follow a written test plan, or just have an idea of what needed to be tested and work to that. Testing was manual, hard to repeat, and error-prone.

TDD brought automation. So instead of writing a document listing the required tests, we can write code. That inherently makes the tests rerunnable, so regressions get caught before they become a problem.

But almost more important than that is the idea of writing the tests first. In an ideal world you write a comprehensive set of tests, write functional code until all the tests pass, and you’re done. It may not always work out exactly like that — in particular, adding tests to a mature codebase can be problematic — but writing tests first encourages us to write code that is easy to test, which tends to lead to better-designed, more modular code.

An added bonus is that the tests can help to document the code, by showing our expectations. And of course they make refactoring easy and safe, as long as they are in place before you start.

If you were to start your last project over again, what would you do differently?

The project I’m thinking of involved rewriting the product’s GUI into a modern, responsive, browser-independent form, using HTML 5 and Twitter Bootstrap.

The existing version was an old frames-based web app that only worked fully in Internet Explorer, and had to be tweaked when each new version of that browser came out. We had long wanted to modernise it, but there were always other demands on development time.

Eventually I got a chance to try a proof of concept for the change. The application uses JSPs and Struts action classes, and the brief was to continue using these as much as possible. I decided to start with one of the main display pages, the one that users spend most of their time in. The idea was to give a quick demonstration of what was possible; and it did, to a point. But what I hadn’t realised was that frames are not part of HTML 5. There are ways to keep using them, but it’s not easy, and not good practice.

So while the new look and feel of a single page was clear, it was far from clear how the various pages would interact, how they would be brought together to form the whole UI, without frames.

If I were to start the project again now, my first step would be to work out how to link the pages together into a single interface, in the absence of frames. Most likely I would use one or other of the forms of JSP includes.

However, if there was the budget to do a more complete rewrite — by which I mean one that did not necessarily seek to use the existing JSPs — I would probably make much greater use of JavaScript and Ajax, and use the action classes just to provide data to the Ajax calls.

What is your approach to testing, and how would you test your application?

I would use a mixture of automated unit testing using JUnit, automated GUI testing, and actual user testing, if at all possible.

This fits well with what I was saying above. There are, broadly, three levels of testing: unit, integration, and system. Though writing automated unit tests is a development activity, rather than a testing one. Certainly we wouldn’t expect dedicated QA testers to work at the unit-test level.

So let’s assume that we have satisfactory unit-test coverage and we are interested in testing the application as a whole. Automation is obviously key here, as well, both because it allows us to easily repeat the tests regularly — for every checkin, in an ideal world (and see below); and because it removes the need for testers to manually step through a written script, which is boring and error-prone.

I have used Selenium for automated GUI testing, with some success. It takes a significant amount of development work, because it’s doing a significant thing, but the effort should pay off.

However, even after all that, there is still no alternative to having someone sit down and actually use the application. Automated testing might pick up outright errors in how the user interaction works. But it won’t catch fine details like misaligned elements, typos in onscreen text, or just generally how it feels to use the application.

What are the benefits of Continuous Integration?

Continuous Integration takes us beyond the traditional daily build. It does more than just building, and does it more frequently than just daily.

At the simplest level it ensures that, for every commit, an incremental build of the complete product is made, and all the unit tests are run. In the most advanced case, as well as building and testing, the product can be deployed to test servers and integration tests such as the automated GUI tests mentioned above can be run. Realistically those tend to take longer, so it’s unlikely that you would do them for every commit, but they can certainly be run multiple times daily.

So we get the following benefits:

  • frequent builds catch problems in code integration;
  • unit tests are run frequently, catching any regressions;
  • integration tests are run regularly, catching other problems;
  • general confidence in the product is increased;
  • developers are happy to commit changes frequently.

Brexit Latest Thoughts

In today’s "Brexit weekly briefing" from the Guardian, they say that:

May is soon going to have to choose between a soft and a hard Brexit – one that maximises single market access and minimises immigration controls (which the City wants), or the reverse (which a majority of British voters want)

Now, as we’ve discussed before, you can’t really argue that a majority of British voters wanted any kind of Brexit. But let’s assume they mean “The majority of those who voted,” which is fair. Even then, you can’t really, fairly, state what it is that those voters wanted, since they were sold a pack of lies, and many voted that way merely as a protest.


Self-Hosting

One very good reason why you should post at your own site, and not necessarily trust big companies to look after your stuff: Why Did Google Erase Dennis Cooper’s Beloved Literary Blog? – The New Yorker.


Laurie Penny Rules

Laurie Penny’s “I’m With the Banned” is the best piece of political journalism I’ve read since Hunter S Thompson died.


On Corbyn, Electability, and Compromise

The other night we watched Lincoln, Steven Spielberg’s 2012 film about the US president. It covers just a few months towards the end of the civil war and his life, during the time when he was trying to get the Thirteenth Amendment to the US Constitution through the House of Representatives (the Senate having already passed it). That’s the amendment that outlaws slavery.

It was dramatised, of course.1But what struck me, and what held resonances with our current situation, was the sheer amount of compromising he had to do.

Then I read an article on Vox about Hillary Clinton, which included this:

politics, as Clinton never tires of reminding audiences, is about getting real things done for real people.

This is the problem that Labour is having now. Whether it’s Jeremy Corbyn’s fault or that of the MPs not backing him, in Labour’s current position it has no chance of getting into government. And if we don’t get into government we can’t do those “real things” for “real people.”

However, I’m far from being convinced that Owen Smith, even if he were to be elected as leader, would put us in any better a position. As well as being largely unknown in the country, he has what looks a slightly shady past, with his lobbying for Pfizer and speaking against the NHS. Though to be fair he rejects any talk of privatisation now.

Corbyn is constantly criticised for not building bridges, not reaching out to people within the party – even within his cabinet, as I linked to the other day. I think it’s fair at this point to say that he is at fault to some degree on the Remain campaign. And I’m certainly unhappy with his call, early on the day after the referendum, for Article 50 to be invoked immediately. That does strongly suggest that his support of the Remain campaign was only ever half-hearted at best.

But even if that’s all true, it doesn’t mean he is solely or even mainly to blame for the disastrous result of the referendum.

And the ongoing, slow-motion disaster that is besetting the Labour Party is at least as much the fault of the plotters. In particular, their behaviour at Prime Minister’s Questions the other day was disgraceful. Their point – renewing Trident was party policy, so the leader should not be speaking against it – was a valid one, but the floor of the House of Commons during the most important event of the parliamentary week, is not the place to argue about it.

The idea of Britain still being a nuclear power, and the doctrine of deterrence, are even more ludicrous now than they were during the 80s when I was a member of CND. But like I say, there’s a time and a place to have that argument, and it’s the party conference.

Maya Goodfellow has a great piece about it all in The Guardian:

The coup itself is unique in recent times, but Labour’s navel gazing is not.

The tribalism that grasps the Labour party is part of its problem. There’s an idea among lifelong supporters and MPs that you’re born Labour, you call the party your own and you will never leave it. This makes some sense – these are people whose families for generations have been Labour members, who spend their weekends canvassing and invest all their spare time, emotional energy and money into the party. They want to feel they have control over it.

But it [the tribalism] is also partly responsible for the current divisions. The people who feel entitled to call the party their own have competing viewpoints; some of them want to see a leftward shift and others range from wanting Miliband 2.0 to the rebirth of Blairism.

The idea too often seems to be “Vote for Labour because we aren’t the Tories”.

Instead of slinging insults at opponents or branding them all Blairites, Corbyn supporters would do better to focus on the task at hand – winning a future general election.

That idea of the divisions on the left go further than just the Labour party. I thought it was well summed up by this banner that I saw on the Palestine Solidarity march two years ago: March with banner showing 'CPGB-ML Communist Pary of Great Britain (Marxist-Leninist)'

“Communist Party of Great Britain (Marxist-Leninist),” it says. You can just feel the layers of splits down the years that have led it to such an unwieldy name. Splits on the left are far from new. It’s an old criticism that we spend more time fighting among ourselves than fighting the real enemies.

Or in this case, than working out how to get back into power. Because going back to Lincoln2 and his compromises, to Hillary and her desire to get things done: it’s all for nothing if we don’t get a Labour government into power.

The problem is that Corbyn is “unelectable.” Is he? I’m not sure we know that. He’s sometimes compared to Michael Foot, who famously failed to win an election. But things are very different today from how they were in the eighties. It won’t be easy, but a Labour Party that got fully behind a left-wing leader might well be in a position to win power in 2020, when the next election is due. Or sooner, if May goes to the country over Brexit or otherwise.

In the end I wonder if Corbyn’s biggest problem isn’t just handling the Media. Maybe he needs an Alistair Campbell figure (or hell, why not: a Malcolm Tucker one). Does he even have a press secretary or Director of Communications?

All of this leaves me not knowing how to vote in the new leadership election. My heart is with Corbyn, as most of his policies match my own principles. But if the MPs won’t get behind him again, then we’ll be right back where we are now, with the party not providing a useful opposition, and with no likelihood of electoral success.3

Owen Smith, on the other hand, seems more likely to fight for us to remain in the EU. But can we trust him?

And either way, what will it do to the party as a whole? A party divided against itself, or worse, a party split in two, has no chance of forming a government.


  1. Though I wonder whether anyone with less Hollywood power than Spielberg could have got a film made that was so much about talking and legal and political manoeuvring. ↩︎

  2. No left-winger, of course, though seeing the Republican Party today, it’s impossible to understand how he could have been one of its founders. ↩︎

  3. Because, I contend, of the split, rather then necessarily the leadership. ↩︎


Recent Events

It’s been a strange few weeks.

There was the referendum, and its immediate aftermath. That’s still ongoing, of course, and won’t be over any time soon.

Then there was my leaving do from work, as I’d reached the end of the at-risk period, and am now redundant, obsolete, out of work, etc. The do was good. We had a decent turnout of current and former colleagues. My boss’s boss’s boss, the one who told us the news that we were being made redundant, turned up (he is the only one of the hierarchy who is based in Britain, the intervening layers being in Manila) and paid off the tab at the time he left, which must have been about 7pm. We still managed to spend just over £250 after that, which was optimal, as there were five of us.

I got an Uber home, and accidentally discovered what the difference between “Pool” and “UberX” is. I found myself in a car with four strangers (including the driver). To be honest I don’t think “Pool” was an option when I last used an Uber. I assume the “X” means “Exclusive.”

Anyway, they were all going to Islington, which left me to snooze on to Hackney, so it worked out fine.

And then I was unemployed. It didn’t quite hit me at first, because my beloved and I had a weekend trip to Avebury, which was fascinating. Here’s a picture of some stones. And a sheep.

AveburyCoveAndSheep

But Monday dawned, and I set to with my new daily plan:

  • 8:00 – Get up, go for a swim.
  • 9:00-ish – Home, breakfast.
  • 9:30-12:30 – Job-hunt things.
  • 12:30-1:30 – Lunch.
  • 1:30-5:00-ish – Side projects (indie dev/writing).

As you might imagine, I haven’t exactly been sticking to that 100%. But the idea is that it’s going to be important to have some structure to my day now that I don’t have one imposed by full-time employment. And job-hunting can be very time-consuming, so treating that as my job for at least part of each day seems like the right thing to do.

The first day was strange, because I kept having this sense at the back of my mind, “I’m working from home today, so I’ll be in the office tomorrow,” which would have been true on Tuesdays and Thursday afternoons for the last few years. But then of course it would hit me: no office; no job.

I’m enjoying the experience, though, so far at least. I’ve managed to do pretty well with the schedule, and even extended the swimming to using the gym at the local leisure centre. This is the first time I’ve ever used a gym, except for a few years ago when I had physio after injuring my leg.1 The guy who did my induction managed to hide his disbelief of this fact quite well. And now that I’ve done a few sessions I’m thinking, “Why didn’t I do this years ago?” Oh well.

So all in all, a time of change and newness – which would generally be good, and some of it is. But see the first point, above, and the debris from that. An unknown new Tory government who don’t seem to be quite willing to accept that parliament is sovereign, and so it needs to decide whether or not to invoke Article 50 of the Lisbon treaty. And Labour too busy tearing itself apart to hold the government to account.

As to the Labour leadership business, I’ll have more to say about that when I’ve worked out what I think.


  1. I’m wryly amused to see that at that leg link from 2004 I’m expressing bafflement about people who would want to leave the EU. ↩︎


He is not a team player let alone a team leader

As I vacillate on the Labour leadership business, and try to decide what's best for party and country, I keep coming upon things that increase my feeling that Corbyn might not be the right one for the job.

Specifically today, two posts by MPs suggesting he is poor at communicating and building bridges with people.

First, Lilian Greenwood of Nottingham on how he undermined her on transport policy and the referendum.

And then Bristol MP Thangam Debbonaire’s Facebook post about the chaos around her being appointed to, and/or sacked from, a shadow-cabinet post.

And yet there’s also this article claiming that those two posts are part of a “scheme to knock Corbyn.”

What’s a person meant to believe?


Pamela Constable on her parents' WASP values

Great piece in the Washington Post by one of their correspondents whose Republican parents would have hated what the party has become:

it occurred to me that our cerebral and courtly African American president, struggling against the tide of an angry, visceral age, had more in common with this elderly WASP gentleman than did many white Republican leaders of the moment.

Source: I rejected my parents’ WASP values. Now I see we need them more than ever. - The Washington Post


After Nice, Don’t Give ISIS What It’s Asking For


Putting the "Mental" into Governmental


Pokémon Gone

I am so not a gamer.

Oh, I loved Asteroids back in the day. I solved Monument Valley, and I got on fine with Alto’s Adventure. But I’ve never got more sophisticated modern games. There’s a whole big post about that that I’ll maybe write one day.

But Pokémon Go has lit up the internet for the last week or so, and it sounded kind of fun. So I thought I’d give it a try. Probably more healthy than arguing about the Labour leadership crisis on Facebook, anyway.

I was just out at the shops, and I remembered I had it, and sure enough, there was a wild Golbat outside the local supermarket. You’ve got to throw the pokéball to catch them, right? I’ve seen enough of the TV series with my kids to get that.

A hovering Golbat superimposed on a shop called 'Local Supermarket'.

But could I catch it? Could I buggery. No matter how many times I flicked up on the screen to send the ball towards it, it just would not connect. I must have tried like fifty times, standing outside the shop like an idiot.

This is why I never get into games. I soon hit upon something frustrating and get bored with them. No doubt I was doing something wrong. I’ll try again, I suppose, but it’s very discouraging.

Oh, and I couldn’t get the name I wanted. “Devilgate” was taken, but so was it along with just about every suffix I could think of, including just random strings of numbers.

Kind of cool to see the pokéball rolling off under the vegetable racks, though.


How in the World are they Making that Sound?

OK, so why did no-one tell me that Jonathan Richman -- of whom I am, or used to be, a fan -- released a song back in 1992 or so, called “Velvet Underground”? I’ve been a fan of them since long before it was cool, as you know.[^fn1]

OK, so though Jonathan wrote the mighty “Roadrunner” (and apparently was called by some, “The Godfather of Punk”, though I thought that was Iggy), he later moved to a much more mellow, quieter sound. And that’s fine. There’s nothing wrong with that. We don’t always want to to be listening to the loudest stuff.1

But anyway, it turns out that there’s this song about the Velvet Underground, which is cool as fuck, as you might expect. Jonathan, of course, has been associated with the Velvets since the early days, roadieing for them and whatnot. So who better to write a song that tries to evoke the startling, shocking effect they had on people, on the music scene, back in 1966 or so?

Here’s his description of John Cale in action:

A spooky tone on a Fender bass
Played less notes and left more space
Stayed kind of still, looked kinda shy
Kinda far away, kinda dignified

They were “America at its best,” he says, and who could disagree? If you haven’t heard it, it’s on Apple Music, Spotify and even YouTube, where I understand the younglings like to go.

Both guitars got the fuzz tone on
The drummer's standing upright pounding along
A howl, a tone, a feedback whine
Biker boys meet the college kind

After one of the choruses where he sings, “How in the world were they making that sound?/Velvet Underground,” he says, “Like this,” and launches into a verse of “Sister Ray.” It’s all very, very cool.


  1. Though let’s face it, we mostly do. If there was a god, and it didn’t want us to listen to loud music, then why would it have invented amplification? ↩︎


All the Birds in the Sky by Charlie Jane Anders (Books 2016, 9) 

This is an infuriatingly brilliant book. Or brilliantly infuriating. It’s about the tensions between magic and science in a world where both exist. The characters are great and annoying (which only adds to their greatness). The scientists don’t think of investigating magic scientifically, even when a witch helps them rescue someone from an experiment gone wrong, which is annoying. But not very, because it’s so lovely. I predict it will win awards.


Sixty-Three Percent

Future

Yesterday was the strangest day.

Anger, of course. Sadness. And confusion: how could this happen? Why did it happen?

What the hell is wrong with people?

But above all an overwhelming sense of change. Of everything having changed, and not in a good way.

I went out for a walk at lunchtime, and it all felt so strange. What it felt like was that the future had changed.

I know that sounds odd: how can the future change when it hasn’t happened yet? But that’s exactly how it felt. Like some time-meddler had taken the future and given it a twist, so that it was off by forty-five degrees or so.

It’s not like I’m constantly thinking about the future normally, but I guess we just have a kind of background-hum sense of where things are going, and that hum stopped in the early hours of Friday, or changed frequency.

Sums

Enough of the metaphors and similes. I did some basic arithmetic. On a turnout of 72%, 52% voted to have the UK leave the EU. That means 37% of the electorate voted to leave the EU.

Which means 63% of the electorate did not choose to leave.

It’s true that you can’t really assume the desires of the non-voters. But my thinking is that the decision to leave the EU is tantamount to a constitutional change. I don’t know what rules countries with written constitutions have regarding amendments, but my guess is that they will have a higher bar than a simple majority of the turnout. A two-thirds majority, or a majority of the electorate at least, I would expect and hope.

I had this conversation on The Guardian site yesterday, wherein the people I was discussing with were saying in effect, “You knew the rules when you went in.” Which is true enough, but unhelpful. My real point is that the rules should have been different. Now we, the voting public, obviously were not paying close enough attention back in 2015 when the legislation for the referendum was passed. But we have representative democracy, and our representatives – our MPs – should have been on top of this. The referendum should never have been brought with such a low threshold allowed for leave.

I’m surprised that Cameron himself didn’t ensure that it was hard to leave. Maybe he was a secret Brexiteer.

Or maybe he just didn’t believe that the public would ever actually vote to leave. I think with hindsight that that’s where I was: in my heart of hearts I couldn’t believe that this would happen. And that is probably the root of the cognitive dissonance I felt yesterday.

It’s too late now, of course. There’s not much we can do (though there is this petition, which has enough signatures already for parliament to consider it). I wonder if someone could mount some sort of legal challenge, maybe get a judicial review.

Because from where I’m sitting 63% of the UK electorate are about to be dragged out of the European Union without asking for it (or having actively stated their opposition). And that’s not even to mention the people who aren’t in the electorate, who will be most affected of all. My fifteen-year old daughter came home fuming yesterday; her whole school was in turmoil over this.

We’re failing a whole generation if they see possibilities being closed off before they’re even old enough to to vote.


The Reinvigorated Programmer on the Referendum

The Reinvigorated Programmer has some good thoughts, including blaming Star Wars:

Folks: turn on your targeting computers. Use the facts.

Source: Let’s Take Back Control! We Want Our Country Back! | The Reinvigorated Programmer

His followup posts, about bedfellows and fear, are also well worth a look.


More Referendum Thoughts

A few more thoughts to follow on from last night's post:

Turnout

Turnout is crucial. If the majority is narrow, and especially if the turnout is low, the losing side will have a very hard time accepting the result.

For example, imagine if the vote goes 55% for Leave, and the turnout is only 60%. That means that only 33% of the electorate has said they want to leave. 27% would have expressly said they don’t want to leave, and 40% abstained.

But abstention can – and in my view should – be considered as being happy with the status quo. Yes, you can argue that it means that the abstainers are happy to go with the will of the majority of voters, but for such a major change – effectively a constitutional change – I don’t think that’s a safe assumption

So there ought to have been a requirement for a minimum turnout, and/or a majority of the electorate. In fact, for something this major, I’m inclined to think that a mandate to leave should require something like a two-thirds majority – of the electorate, not just of the turnout.

Something like that was the case in the original Scottish independence referendum – approval had to be by 40% of the electorate, not just a simple majority – though not in he 2014 one. I have criticised that fact in the past, but thinking about it now it seems right.

Parliament

Of course, this referendum will not be binding on parliament. If it goes to Leave, it’s possible that a majority of MPs could vote against the legislation that would have to be enacted to start the actual departure. That would have interesting results.

And if the majority is very slim in either direction, there will be calls for another referendum. Whatever happens on Thursday, we won’t have heard the last of this for a long, long time.


Referendum Thoughts

I have, of course, been meaning to write about the referendum almost since it was called. And let’s go right back to that point: of it being called, and why it was, and whether it should have been.

It was called, as anyone can tell, because David Cameron wanted to finally end the feuding in his party over Europe. The Tory party has been at loggerheads about it for decades. I have never known a time when they weren’t fighting about it.

So Cameron promised a referendum, thinking that if they were elected he could lance the boil, as they say. In fact what has happened in the end is that the boil has grown alarmingly, become infected, and is poisoning its host.

But we shouldn’t gloat. The Tory party in its death throes could take a lot of good things down with it.

I read one piece recently that suggested that he didn’t actually want to do this. That he made the promise fully expecting a hung parliament in 2015, and then he’d be able to say that coalition partners had insisted on no referendum.

Which may well be true, but it doesn’t help us where we are now.

The poison has spread into the body politic of the whole nation, and we are all in danger of becoming infected.

Or am I stretching this metaphor too far?

So much for that. The decision we make on Thursday matters, probably more than any visit to the polls in my lifetime. A decision to leave will be irreversible.1

Not that I think we would be utterly unable to survive and thrive outside the EU. We’d get by. But we wouldn’t be the best we could be, nor in the best position we could be in.

The EU is far from perfect, but so is the Westminster parliament, the Scottish one, and every other democracy.2 But above all, if we’re inside it, we are able to influence it – specifically, our democratically-elected representatives can – but if we’re outside, all we can do is look in.

While having to abide by its oh-so-terribly-onerous regulations if we want to trade with it.3

The Guardian’s editorial today advises us to “keep connected and inclusive, not angry and isolated,” and I think we can all get behind that, surely?

Oh, and don’t let me hear any of that “both sides as bad as each other” nonsense. The Remain4 campaign has been lucklustre, certainly, and I’d have liked to see more dynamism from Jeremy Corbyn and the rest of the Labour leadership – if only to reduce the impression that it was all about Tory infighting, or that anyone should vote Leave because Cameron wants the opposite. But lacklustre does not equate to vicious, poisonous, and lying.

“Project Fear,” they called it. I even heard one of my colleagues accuse the Remain campaign of fearmongering. But fear is not being “mongered” when we have a genuinely scary situation.

To end on a more cheerful note, if you only watch one video about the matter, make it this one from John Oliver:


  1. Well, Conceivably we could, at some time in the future, petition to rejoin; but if we did do that, it would be on quite different terms from those that we’re on at present. For one thing, we’d have to join the Euro, as all accession states do. For another, we wouldn’t get the rebate that we currently get. Loath her or despise her, Thatcher did renegotiate our country’s position into a more advantageous one. We won’t need that if we’re out, of course, but we won’t get it back if we ever have to crawl back. ↩︎

  2. And the EU is democratic, despite all the lies of the Leave campaign. ↩︎

  3. Not that onerous, and if they are they’re mostly for good reasons. ↩︎

  4. And shouldn’t the opposite of “Leave” be “Stay,” anyway? ↩︎


The Apocalypse Codex by Charles Stross (Books 2016, 8)

The latest of Charlie's Laundry Files series, and Bob Howard is being considered for promotion. To management. He has to go on a course.

As you can imagine, he doesn’t stay on it for long. And soon things are looking pretty bleak.

It’s the usual Laundry fare: magic manipulated by technology, horrors from beyond the stars, intrigue, form-filling.

It’s great stuff, as always.


A Day of Infamy

Sometimes rhetoric has consequences. If you spend days, weeks, months, years telling people they are under threat, that their country has been stolen from them, that they have been betrayed and sold down the river, that their birthright has been pilfered, that their problem is they’re too slow to realise any of this is happening, that their problem is they’re not sufficiently mad as hell, then at some point, in some place, something or someone is going to snap. And then something terrible is going to happen.
From The Spectator. Something terrible did, of course, happen. I hadn't heard of Jo Cox before today, but she seems to have been a thoroughly decent person.

Who Killed Sherlock Holmes? by Paul Cornell (Books 2016, 7

Some books take weeks or even months to read. Others slip down in just a few days. This was the latter kind.

Paul Cornell’s Shadow Police series is part of a thriving subgenre now. He and Ben Aaronovitch started out at a similar time, I guess, and they’re friends, so I don’t know if they came up with the idea together, or what. Maybe it was just steam-train time. But London cops who deal with the magical, occult side of the city’s problems are very much of today.1

This latest volume picks up not long after The Severed Streets finished, and our characters are in some dark places personally and professionally. But then the ghost of Sherlock Holmes is found murdered at the Holmes museum, and a serial killer starts murdering people in ways inspired by the Holmes stories. The game is afoot, obviously, and our heroes must take part.

This is really, really, good, and highly recommended. Though if you haven’t read them yet, start at the beginning with London Falling.


  1. Though I can’t help but wonder if Charlie Stross started it all. His Laundry Files series is about secret agents with occult dealings, rather than police, but there are obvious similarities. ↩︎