Jerry Doyle — best known for his role on Babylon 5 — died Wednesday.
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).
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.
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.
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.
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.
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’s “I’m With the Banned” is the best piece of political journalism I’ve read since Hunter S Thompson died.
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:
“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.
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.
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.
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. ↩
The hottest day of the year, and I end up having an interview. Glad to have it, but gladder to be home and into cooler clothes.
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?
I’m having trouble with WordPress not wanting make a “Link” format post if I have too much other stuff in it.