A couple of years ago, one of our technical architects at the Hut Group ran a few code dojos to give the team experience of TDD and Pair Programming. The team has grown massively in the meantime, so I thought it would be a good opportunity to try it again.

To quote from codingdojo.org a dojo is:

…a meeting where a bunch of coders get together to work on a programming challenge. They are there have fun and to engage in DeliberatePractice in order to improve their skills.

So, I booked the boardroom, setup an Intellij project on my MacBook and waited for the developers to arrive. In the end about 10 people came, with a range of development experience from less than a year, to more than we’d care to admit to.

The exercise I chose for the group was to implement the “fizz buzz” game. Basically for a given natural number greater zero return

  • “fizz” if the number is divisible by 3
  • “buzz” if the number is divisible by 5
  • “fizzbuzz” if the number is divisible by both 3 and 5
  • otherwise return the number

The first comedy moment was when we went round the table and tried to play “fizz buzz”. You’d have thought a group of highly skilled IT professionals would be able to do simple mental arithmetic, but this is apparently not the case…

The problem itself isn’t all that complicated, a decent developer could write the code in 5 minutes, but the point of the exercise isn’t really the end solution. More important is how you get to it. A pair of developers worked at the laptop. The driver types, focuses on tactics and writing clean code that compiles and runs. The navigator focuses on strategy. How the code fits into the overall design, which tests will drive the code forward, and which refactorings will improve the entire codebase.

We also wanted to build the solution using Test Driven Development. You write a test that fails, write some code to make it pass and then refactor. With a problem this simple it is quite difficult to force yourself to follow these steps.

We started with the simplest case we could think of, i.e. if you pass in 1, you get 1 back and built from there. We managed 7 iterations in the time we had available and got to a reasonable solution.

Going through the exercise prompted a lot of interesting debate. We talked about how you identify test cases, different ways of implementing the algorithm and even got into some OO design. I think the group found the exercise useful, I guess the proof will be when I see how many people come to the second code dojo.

There was one thing that I didn’t think worked too well. The navigator didn’t really get to contribute as the entire group chipped in ideas so effectively we had 10 navigators, but I’m not sure if this wasn’t a good thing.

Next time I may try using cyber-dojo which would allow pairs to work at the same time. It is a pretty neat site where you select a exercise and can code it online in a huge number of languages. One thing it does prove is that Java is a bit of a nightmare without an IDE, Ruby is the future!

As discussed earlier I have been playing with bootstrap for a few weeks and I’m beginning to get into in now. Below is an example of a screen I re-developed to replace a horrible accordion control with tabs and pagination from bootstrap.

I think it looks much better now and it was pretty simple to implement.

Before
After

So it’s been more or less three years (actually 17th Nov) since I joined the Hut Group, and it’s not going to be all that long until I’ve been here longer than I was at IBM (although still a long way to go to overtake Atos). I’d thought I’d take this opportunity to look back over the last three years and reflect upon what I’ve learnt.

I joined the Hut Group because I was getting bored at Atos Origin. I was working on a project for a large government department and although some of the things we were doing were interesting, it felt like I was destined to work on the project for the long term. A former colleague, Tim, was at the Hut at Head of IT and he asked me to come over and help him sort things out. I turned down the initial offer, but eventually decided to take the opportunity. The main reasons were that I knew Tim, and I wanted to try my hand at web development.

I joined the Hut Group as a Senior Developer and worked on mostly back-end projects. I integrated with a flowers supplier (not a great success), wrote a backup payment system and made lots and lots of changes to our back office system. I also made a good few changes to the website, including replacing the password reminder system.

At Atos Origin I had a number of roles as a configuration manager and it seemed natural that I would attempt to sort things out in this area at the Hut as well. We use subversion and I used to police the developers to make sure that they were using it correctly.

During all of this the development team grew pretty quickly. We I started we had 10 people in the IT department, including the TA, Head of IT and support team. A new CTO joined us, and we went on a recruitment drive that hasn’t really stopped.

As the team got bigger I moved into a TA role so that we could provide some technical leadership to the developers. I worked alongside the Chief Technical Architect (James) and helped get some pretty major changes to the platform in. I also spent a lot of time improving our monitoring so we could tell when the platform was having problems.

About 2 years ago Tim decided to take a new role, so I became the Development Manager and later the Head of Development. Our current CIO (Gareth) joined shortly afterwards and under his leadership we started to introduce agile development.

Our original process for getting work into the team was for a business stakeholder to fill in a work request form which one of the team would look at and estimate the effort involve. We would group a few of these together and form a project to be delivered. This was the theory in any case. What actually happened is that the work request forms sat in one of several large folders on my desk and pretty much got ignored. What the team actually worked on was whatever a few senior people in the group decided was important. The process wasn’t very transparent and we had a tendency to start work and not finish it. Things were not great, and nobody was satisfied with performance of the team.

The first thing we did to more towards an agile methodology was to get control of the work coming in to the team. I went round all the business to talk to them about what work they wanted to be delivered over the next twelve months. These were all written on index cards and James, Gareth and I gave t-shirt size estimates to them all (S, M, L, XL) and fitted them on to a rough plan. We moved away from 15 developers meaning 15 projects on the go, and organised everybody into small teams. We recruited a number of tech leads to lead the teams and they worked with the teams to get the agile practices we want embedded into the team.

Things began to improve pretty quickly, but it became clear that the Tech Leads were struggling to balance the management side of their role with the technical leadership of the team. We already had a business analyst working with us, and he moved into a project management role and we recruited two more PMs. The PMs work closely with the business to understand their requirements and act as Scrum Master for the project teams. They basically make sure that the developers can concentrate on developing and they remove any impediments that stop them.

I think the best change we made was decreasing the number of teams. We ended up with 7 teams with a couple of people in them, and this caused a few problems. There was a limit to who people could pair with, and limited the amount of work a team could do. If anybody was on holiday, work basically stopped until they came back. Worst of all it was difficult to get the team to self organise and engender any sort of team spirit. We cut the number of teams down to 3, each with 6 or 7 people in them. We’ve kept these pretty constant for about six months and they are now very productive. The teams organise themselves (to a certain extent), and we’ve got a good spirit in all of them.

The final change we’ve made is to create a “Rapid Response” team. This team handles all the day-to-day requests that come in to the development team. These range from fixing defects, to delivering new pieces of functionality. We aim for a piece of work delivered by the team in 3 days or less. We manage the work of the team using a kanban board, with the business prioritising all the outstanding requests twice a week. The prioritisation meetings take about 15 minutes and we have some really good discussions about what is important to the business. We’re delivering on average 5 tasks a week and the business like it as they have very clear visibility of what the team is working on now and next. The best thing is that they can see things being delivered.

So what will the future hold? I personally think we will move away from delivering “projects” to delivering features. These will be smaller pieces of work that we can deliver constantly. There will always be projects to deliver, but a lot of what we do is already feature based and a lot of the time we use scrum and sprints to mark time.

The biggest change on the horizon is that we are recruiting a number of test engineers. These will work with the development teams to promote best practice and help us automate our testing process. We’ve done some work in this area, but we have a long way to go. I’m quite excited about some of the things we can do with tools like Cucumber to aid automated acceptance testing.

What about me? It looks like I am going to get more involved on the technology side of things. We have a number of interesting challenges coming up to make the platform scale to support the continued growth of the business. The good thing about the Hut is we can react quickly to new opportunities and making the IT do this is good fun.

At work we use a kanban process to manage our small change requests with the development team. These requests are pretty much a 50:50 split between new features and defects. We have always used about 15% of our resource to do these requests, but have we only really made any progress once we had a dedicated manager (me!) running the process and dedicated developers doing the work [let's face it, it's the developers who made the difference]. The team is known as the BAU team, and the developers work on it for a 2 week stint and everybody gets to have a go. This has good points and bad points and I’m still not sure where I am with this. On the good side, it is a great way to spread knowledge through the wider team as the BAU team work on every part of our systems; but as the developers only work on it for a couple of weeks you don’t really have time to build a team that is self organised and committed to a goal. Having said that, the team have delivered some great pieces of work and I think they have enjoyed the experience overall.

Anyway, the “BAU” name is pretty dull and undersells both the value of the work that the team does and it’s complexity so we’ve decided to rename them the Rapid Response Team. I have even done a logo!

Apologies in advance to our entire Design team and anybody with a modicum of taste for the abomination that am I about to release on the world. I did maths at Uni and I absolutely hated art having realised at an early age that I completely suck at it.

Anyway…

I’ve just read a very interesting article about recruiting software developers in the Guardian, which pretty much mirrors my feelings on the matter. I do a lot of recruitment and have encountered many of the frustrations described.

I’m going to quote from the last paragraph:

To be honest, if someone wrote to me with a nice covering letter and spoke about open source projects that he or she liked, pointed me at a Twitter feed where they were intelligently engaged in the problem domain, and sent me some code that they’d written, they’d be more or less hired at this point. No one wants to see a list of technologies with some random skill level or years experience.

If you’re interested in joining the Hut Group, check out our careers page and get in touch. I can be reached directly via my twitter account @typingincolor.

 

 

 

As I’ve mentioned here, I’m the Development Manager at the Hut Group. We are one of the UK’s fastest growing technology companies, and the third largest online retailer in the UK.Our goal is to be the largest online retailer in Europe over the next couple of years. We have an excellent development team already but we need to grow to deliver the systems the business needs to support this level of growth.

We’ve successfully changed the way we work as a team. We’ve introduced Agile development to help us work more closely with the business and to enable us to deliver higher quality software more quickly; and it’s worked really well.

We develop all of our systems in house, from our websites, through buying, content and finance, to our warehousing systems. As you can imagine, there is a huge breadth of systems we use. We are also building a retail platform that we can offer to our customers to enable them to power their systems.

It’s an exciting time to be working at the Hut. We’ve grown massively over the last few years, and this growth is accelerating. We’re looking for expert developers to work with us to deliver this growth. We develop in Java, but getting the right person is more important. Whilst we are looking for strong developers, equally important is the ability to communicate effectively.

Find out more!

I have worked in IT for the best part of 15 years, most of that in technical roles. I started as a Trainee Programmer in the IT department of a large bank, and have ended up as the Head of Development at at one of the UK’s fastest growing technology companies. When I started work I developed in C and a 4GL called  OpenROAD, and I was pretty good at them…

I started using Java in around 1999, back when applets were still used. I quite liked it, and I’ve used it pretty much ever since. I last worked on a C project in 2000, I could probably remember how to compile a program if I had to, but I suspect I would just cause servers to core dump if I was allowed any where near them now.

I’ve not really written any  serious code at work for probably 18 months and to be honest, doing anything in Java doesn’t really appeal as I’ve been there and done that.

One of the things I want to do is get a picture of how much my team actually know and then track any improvement over time. One of my colleagues produced a skills matrix for his team where there is a list of skills, and everybody gives themselves a score from 0 to 4 based on how they perceive their skill level. It is a really useful tool when you collate all the data, and I thought I’d have some of that.

Now, my colleague did his skills matrix using Excel; but as a one-time code monkey I thought it would be a good excuse to dust off the old development skills and build a web application to do it.

I looked at a few options to build the app. Groovy on Grails and the Play framework are basically java, and I really can’t be bothered with that; so in the end I went for Ruby on Rails.

I quite like Ruby as  a language. It is weakly typed which makes things a lot easier and the syntax pretty easy to follow. Rails as development framework is ridiculously easy. I have written less than 100 lines code to build the app. The hardest part was the css so that it didn’t look like a dogs dinner. I’m not sure I am entirely in favour of how easy it is, there is a bit to much magic for my liking; things work when I think they shouldn’t and then I spend 10 minutes working out why it works. All-in-all though it has been a pretty enjoyable experience.

There are a few things a really do like though:

  • haml – I didn’t really see the point at first. It is a templating framework to generate html. You still need to really understand html (this is why I didn’t see the point), but it does make you write properly formatted code. It also stops you doing some of the more horrible things you can do in jsps or erb.
  • sourcetree – it’s a client for git (and mercurial) for OS X and it makes it soooo much easier. Git is a brilliant source control tool, and sourcetree makes it really easy. I know the guy who developed it and he’s done a great job on it.
  • heroku – makes it stupidly easy to deploy your rails app to a production environment. You just push you git repo up to it and it just works. If only java was so easy.

Maybe it is time for me to stop going to meetings, planning projects and get with the program and do some proper development. Skillz version 1 (great name eh?) will be unleashed on the development team next week, and I’m already planning the features for version 2.

The one fly in the ointment is that Rails development on Windoze truly sucks. Git doesn’t work properly, the tools suck, windoze sucks and the whole experience is just rubbish. If you’re going to do Rails buy a mac.

 

From the company that brought you the zavvi iPhone App

It’s…..The Hut iPhone App!

The second iPhone app from the UK’s fastest growing technology company.

You can browse thehut.com site, add your favourites and the visual search is particularly nifty…

Rating: ★★★★★ 

Download from the Apple App Store

If you’re a developer and are interested in joining the UK’s fastest growing technology company then go to http://www.thehutgroup.com/careers.

I’ve written before about how we are building a world class development team at the Hut Group. One of the things we are doing is setting objectives for everybody in the development team. We are doing it for a number of reasons but the main objectives are:
  • to help us work more effectively as a team
  • to help us build the best software we can
  • to help the team develop their careers

So with these aim in mind we came up with the following objectives:

Deliver Highest Value by:

  • Working on the highest priority task
  • Doing the minimum work to get the job done

Deliver Fast by:

  • keeping it simple
  • continually improving the speed of delivery
  • understanding technical debt
  • always knowing the team’s velocity

Deliver Quality by:

  • having no bugs
  • no rollbacks
  • delivering a supportable solution

Provide a quality of service by:

  • responding quickly and positively to incidents to achieve a quick resolution
  • understanding the root cause of the incident

Continually Improve by:

  • sharing knowledge
  • supporting the team
  • speaking up!
  • being agile
  • improving yourself

We will all have commercial objectives based on delivery on top of these, but I think these show where we want to go. This is a new endeavour for us, and I’d welcome any insights that people have…

As I’ve mentioned here, I’m the Development Manager at the Hut Group. We are currently the UK’s fastest growing technology company, and the third largest online retailer in the UK.

Our goal is to be the largest online retailer in Europe over the next couple of years. We have an excellent development team already but we need to grow to deliver the systems the business needs to support this level of growth.

We are also changing the way we work as a team. We are in the process of introducing Agile development to help us work more closely with the business and to enable us to deliver higher quality software more quickly.

We develop all of our systems in house, from our websites, through buying, content and finance, to our warehousing systems. As you can imagine, there is a huge breadth of systems we use. We are also building a retail platform that we can offer to our customers to enable them to power their systems.

It’s an exciting time to be working at the Hut. We’ve grown massively over the last few years, and this growth is accelerating. We are looking for expert developers, web developers and testers to work with us to deliver this growth. We develop in Java, but getting the right person is more important. Whilst we are looking for expert developers, equally important is the ability to communicate effectively.

Find out more!