One of the frustrating things about starting a new job is the time between starting and the time I’m actually productive. I’ve had 6 jobs in the last 10 years and the process usually goes something like this (in a sort of rough order):
- Say hello to everybody then immediately forget their names.
- Find out what the product or products I’ll be working on actually does and start trying to understand the field I’ll be working in (be it financial, sales, electronics or whatever).
- Figure out how the source code for the software is organised and have a look at it to get a basic idea of the quality of the software, how it’s organised and what not. Nothing too in-depth.
- Try to understand how the team culture works: do they have friendly banter? are they all-business? are they all prima donnas? (if so polish the CV and get out).
- Get my first piece of work. To do this I need to…
- …work out who “owns” each system or sub-system. When working on a system there’s always someone who understands it intimately and has some sort of ownership of it (whether they want that glory or not). Since software is a complex beast you can’t always understand all of it all of the time and when you’re working on it you’ll invariably have to interrupt this poor person quite a lot while you learn about it.
- Following on from that I need to know who the business brains are. They are either customers or colleagues who are less techies and more business types. These are the people who appreciate the software from the user’s perspective, understand the problems the software has to solve and I need to build up a relationship with them. Doing this means less of me misunderstanding what I’m doing and having to go round the houses again and again.
- Slowly get up to speed with the business as I do more projects / pieces of work. Writing software is the easy bit, working out what the software needs to do and all the nuances of the business that the software operates in is the tricky part and takes time.
As I progress through those stages I become more and more productive and the quality of what I deliver gets higher and higher. But it takes time and when you hire new people you have to appreciate that despite having to pay recruitment agents you also have to pay for the time it takes for them to get up to speed and the impact on their colleagues as they learn the business before you see a healthy return on your investment. I always find it frustrating because I know I can gather requirements, write specs, build and deliver software, but like I said they’re the easy things.
However this time it’s been a lot easier. Since I’ve joined a team I’ve worked with before I already know the people and I know the culture they work in. I’ve already worked in the industry (financial) with them and have done all the learning about what the market entails, what the software we’re building needs to do and enough to be effective when I worked with them last time (it’s amazing what knowledge gets buried in your brain but can come back when you need it). I know how they organise their code as I helped them choose the systems to do it. Since we’re working from home most of the time and I know the guys so well I don’t hesitate to pick up the phone or use IM to talk things through – whereas if I was a new-hire who’d never worked with them I’d probably feel a lot more isolated as it’s hard getting to know people via non-physical communication channels.
As it’s a new product we’re building I still have to learn about the software (how it’s designed and where everything lives) but that’s a much quicker process than getting to know people and learn about the industry you’re working in. All in all it’s slashed my start-to-productive time. Although that’s a double-edged sword as it means I’ve got no excuses for delivering pretty much straight away! I better get back to it! 😉