Author Archives: simonveal

Teams of Three

I’ve worked in a number of different software development teams, and some of the best have been when I’ve been part of a team of 3 people. In this post I discuss some of the features of such teams, what helps them work well, what can harm them and my subjective experiences of working on such teams. I can’t say categorically that 3 is the optimum team size. Clearly, the right size of team is going to depend on many things. But if you happen to be on a team of 3, or you work with one, this might be helpful.

Teams of 3 Are Self-Organising

A long time ago, in a book I’ve long since forgotten, there was a diagram about team size and the number of communication channels required to keep each member informed. It looked something like this:

As the number of team members goes up, the number of communication channels increases exponentially.

As the number of team members goes up, the number of communication channels increases exponentially.

Continue reading

Office Noise Workarounds

I’ve always struggled with the noise in typical office environments. It’s conversational noise that’s the problem. If there is any kind of conversation going on within earshot, the part of my brain that deals with language just tunes in to it. I can’t help it, I just have to listen! Of course, that part of my brain is also used for reading and writing documents and code, so it makes it very difficult to get work done. I suspect I suffer from this more than most other people. Every office I have ever worked in was too noisy for me, even the so-called quiet ones. In fact, the quiet ones can be worse. If everyone is talking at once, the individual conversations become part of the general background noise and it’s hard to distinguish each conversation. But in a quiet office where there is one single conversation going on you can hear every word clearly.

I may have a particular problem with this, but I think the problem occurs to some extent for all developers. The effect of noise and interruptions on programmer productivity was covered extensively in the excellent book Peopleware. I’d love it if more companies recognised that developers need quiet time to get their work done, and gave them private offices. But I’ve never seen this in any of the companies I’ve worked for, and I don’t really expect it to start happening any time soon. If anything, the problem’s getting worse, as more and more offices get built or renovated in an open plan style. Continue reading

How to Find Bugs

Your code has bugs in it. Here are some ways you can find them.

Test It Yourself

I do two things to test the code I write before anyone else sees it. First, I tend to write automated unit tests as I go along, in a kind of test-driven development style. These don’t so much find bugs as prevent them from occurring in the first place, as they force me to think about the requirements the code must fulfil before I write it. They are probably at their most useful though when you discover a bug through other types of testing. Then you can use a new unit test to reproduce the bug, fix it, and be confident that it will stay fixed through future versions of the code. Continue reading

Multitasking and Focus

Recently I was working on a tricky problem. It was one of those problems that only occurs on a test server but not on a development box. Since the test server was hosted on Azure (the same as our live server), this made it really tricky to debug. Doing a manual deployment to the test server takes about 40 minutes. So my write-test-debug cycle was about an hour! To make things worse, it was an intermittent problem, so I could never be 100% sure when it was going to occur. And to make things even worse, I discovered that the only way to reliably get the problem to occur was to do another deployment. Simply stopping and restarting the server, which would have been much quicker, didn’t have the same effect. Yet another complicating factor was that the error that occurred wasn’t in our own code, but instead it seemed to be in some other code that was executing when a page was loaded, before our code ran. So the call stack in the exception was a load of functions in the .NET framework that I couldn’t get at.

All of this meant that I had to treat this like a science experiment: Get as much info out of the system as possible, with some hacked in debug logging, to try and find out where the problem was occurring. And try various things to see if I could get the problem to occur consistently and (eventually) to make the problem go away consistently. This involved a lot of deploying of slightly different versions of the code! Continue reading

Bletchley Park

Bletchley Park was where Britain’s codebreakers, including Alan Turing, worked during World War II to crack the German’s encrypted communications. As well as providing vital intelligence to the allies, they also developed techniques and equipment that helped kickstart the development of computers after the war. The site is now open to the public as a kind of museum. I’d been meaning to go for ages and in September this year a weekend came around where I didn’t have anything else on. This post contains some thoughts on my experiences there and a few tips for visitors.

bletchley-park-lake

After entering and buying your ticket you can pick up a multimedia guide, which is a customised iPod Touch inside a rubberised case, with an app that offers various video clips. These clips are supposed to be watched at various points around the grounds. I actually found that the clips didn’t bear much relation to the locations. But the videos were well produced and were very interesting, with a mixture of technical information about the work done at Bletchley Park, personal recollections from people who worked there, background information about the relevance of their work to the war effort, and other information. There is also a map in the app, but it’s not very good, so I bought a guide book for £5 which has a good map on the back. The guide book is also really interesting and full of extra information. Continue reading

Why I Prefer Fixing Software Than Hardware

I was having a conversation recently with someone and we got onto the topic of how someone who’s smart and good at building things in software isn’t necessarily good at making or fixing hardware (by which I mean anything physical, including home improvements etc). I’m one of these people. It seems like many of the skills should be the same: the ability to visualise the desired end result, putting smaller pieces together to make the whole, the curiosity and intelligence to figure out how things work, the patience and concentration required to complete the job. But they are still different skills and both require different types of practice to get good at them.

Generally I believe that anyone can learn any skill if they’re prepared to practice. However there are many aspects of working with real physical things that I just plain don’t like and, when compared to software, annoy me too much. So I’ve never really been motivated to practice and get good at them. Continue reading

Premier League Race Animation

Sometimes football TV pundits talk about “the Premier League race” as though it were an actual race between the teams, rather than just a list of teams sorted in descending order of points. I thought it would be interesting to see what a Premier League season would look like if it actually was a race, so I decided to make a little animation. This post is a write up of how I did this. If you want to go straight to the animation for the 2011-2012 season you can do so.

I chose to implement this as a web page, with the animation stuff written in JavaScript. I wanted to use it as a practice project for getting good with web technologies like HTML, CSS, JavaScript and jQuery. It turns out I also used some PHP to process the result data and generate the web pages (although I could have used any language for this part because the PHP is just used to generate static html files; there’s no dynamic server-side code running). Continue reading

My Handwriting Has Got Worse As I’ve Got Older

I mostly hand write these blog posts initially. I think there was a time when my handwriting was neat, perhaps in school, but not now. From a distance it looks OK; fairly small, consistent in size and mostly in straight lines on plain paper. But up close it’s messy. It’s not properly joined up, although some letters flow into each other a bit. The main problem is letter definition. This deteriorates the faster I try and go. If I try really hard to slow down and pay attention, I can usually get the letters to come out OK. There is some pleasure to be gained in slowing right down and really making an effort, but it’s also very frustrating. Usually I have got a whole load of ideas I’m trying to get down on paper as quickly as possible, and going slowly doesn’t feel right. Continue reading

Web Design Templates and the Purist

While I’m reasonably skilled at working with HTML and CSS code, I’m a hopeless graphic designer. I have tried to make nice looking websites in the past, but they always end up looking ugly. My attempts at minimalism come out boring, and my attempts at exciting look busy and confusing. And besides, I’d rather work on code than design anyway.

So I make use of the many available web templates from sites like ThemeForest. These always look amazing in their demos on the site, and I can usually find something that suits whatever project I’m working on. But it’s not quite so simple when I come to work with these templates for my site. Continue reading

Generating Business Ideas

I’ve been trying to come up with business ideas. Some will say the idea isn’t important, and that it’s the execution that matters. But you still need an idea to start with, and preferably several so that you can choose the one that you can execute best with your current skills and knowledge.

Staring at a blank sheet of paper and hoping that good ideas pop into my head wasn’t very productive, so I came up with a more structured approach. Since I’m a software developer I’m mainly interested in software ideas. A while ago I came up with a list of the general types of problems that software is good at solving: Continue reading