So yet another interview with me is available, but this one is in written form. It's for the Graduate Developer Community, the aim is to show undergraduates and graduates what real techies jobs are like, and how people doing them they got there.
It's long, but if you know anyone just starting out their career who wants to get a feel for where they might want to go, please point them at it. The site has a number of interviews with people in different roles so it's quite a good way to showcase the diversity of what's available.
(Update: 15 Dec 2020: Original article doesn't seem to be around any more, so I've reproduced the content here)
What is your job title?
What is your role about?
I’m a Java programmer for a financial exchange, in a company that runs in a very Agile way. We’re a small-ish company, about 80 people, half of whom are in technology. Because we’re trying to create the fastest retail exchange in the world, technology is absolutely fundamental to our business.
We’re pretty much a pure Java shop, we do use some libraries and tools, like Spring and GWT, but fundamental computer science, domain driven design and mechanical sympathy are more important to us. What that means is we’re constantly challenging ourselves to write code the “right” way, so it’s easy to maintain and quick to run (turns out those two things are usually the same thing) - well designed, well tested code is key to creating the sort of platform we need.
We use agile techniques like pair programming, which keeps us honest. It’s quite tiring, and sometimes goes against what you want to do as a developer - sometimes you want to sit alone with your headphones on and just churn out code. But pairing tends to lead to better thought-out code, and forces you to do the right thing like writing your tests first.
We’ve worked quite hard to create a culture where developers spend most of their time writing code - meetings are at a minimum, interruptions are restricted to those that are vital, for example production issues. It’s also recognised that the bottleneck when creating good code is not the typing - it’s not about sitting and bashing out as many lines of code as possible. It’s normal (and encouraged) for us to spend time discussing design, drawing on white-boards, and chatting to other developers who might know an area of code better - this works much better for us than having formal design sessions or meetings, but it does take a bit of getting used to. The office is not silent by any means, and you’re free to jump into another pair’s conversation if you have something to add - it’s a really great way to learn and develop but it takes practice to switch contexts and to be able to filter out what’s not important.
We generally work 40 hours a week. I’m involved in recruitment as well, because I’m obsessed with finding the right people for our team, but that means that sometimes I do stuff out of hours like attending LJC/GDC events, but this is as much for my own development as for my company’s development. One week every two months I have to be on call, which does mean phone calls late at night, but it’s voluntary and we get paid extra for that , so that’s a sacrifice I’m willing to take.
What are the best/most positive parts of the job/industry?
I love the coding, the problem solving. There’s nothing more satisfying than seeing a test go green, or the output you expect on the screen.
In this place, I love the guys I work with. There are about 18 developers split over 4 teams, plus BAs, QAs and systems guys. Regular rotation between teams means not only do you get to know lots of different areas of the system, but you get to work with everyone at some point. Every here is really smart, and you can learn from all of them - the senior guys always have experience that I can benefit from, and the juniors are great at asking questions which actually get you thinking about your assumptions - is it really the right way to do something?
In general what I like about working in financial markets is that most companies in this area really understand that technology is a differentiators to their business - having smart people working with the best tools can directly impact the money the company makes.
What are the negative parts to the job/industry?
One of the things I don’t really like about many companies in finance is the arrogance - sometimes they think simply because they do have smart people and money they are naturally doing thing the best way possible. In fact, quite often they are producing code/products as fast as possible, which leads to a maintenance nightmare.
Something I wish I had understood much earlier in my career is that it’s quite different working for a company where you are in the IT department (i.e. technology is a supporting role to a business that does something else, like manufacturing or media or banking) vs working for a company where technology IS the business (for example, a software firm, a technology start-up, a gaming company). If you’re lucky, you can find companies in the first category that really understand the direct impact technology can have on their business. But if you work for the second category of business they have no choice but to work out how to leverage technology to the full potential, it’s their business differentiator. The reason this is a good place to be is that the technology part of the organisation can a) see how their work is valid and b) is empowered to have conversations about better ways to do things, stuff you can buy/do to increase developer productivity etc.
What is the standard career path/qualifications?
My career has been:
Undergraduate placement -> Graduate -> Developer -> Senior Developer
I’ve had a number of titles over the years (“Web Engineer” - what’s one of those?? “Principal Consultant” - which means very different things at different consultancies).
As “just” a developer you don’t need anything to get started. A degree in a technical-ish subject (e.g. Computer Science / Computer Science with ...) is useful, but your degree will not prepare you for the Real World. In fact, it was only when I started working at LMAX, nearly 10 years after I graduated, that I started using the real Computer Science knowledge I learnt back then.
I have friends who have started as developers or systems guys straight from school, and there are only a few companies who will discriminate against you for that.
I think the most important thing that set me up for my career was my undergraduate placement. Some companies offer paid internships / year-in-industry jobs, I did mine at Ford - I worked for them for three months between first and second year at uni, and I worked for them for 15 months between second and third year, taking a year out. My course was not a sandwich course but most universities (like mine, Sussex University) will allow you to take a break, especially for work.
I learnt far more about how to manage my career at Ford than I did at university. I learnt the difference between theory and practice; I learnt that being a great coder is not enough (sadly), you need to show people you’re great somehow; I learnt that you need quite a different discipline to be able to code 9:00-5:00 on a weekday rather than in the hours you feel creative. I was lucky because Ford takes investment in their undergraduates (and graduates) very seriously, so we were encouraged to make time to network, to meet people, to be mentored. There was very little in the way of formal training, but that’s how work usually is. Instead, they gave us the tools for building our careers - that usually involves connections with real people, not going on training courses and passing exams.
What are the prospects?
I graduated in 2001 and I’m still “just” a developer. I’ve been a team lead, I’ve been a consultant, I do evangelism, but in all that time I only ever had a formal promotion once, from Senior Consultant to Principal Consultant (it’s just the amount of money they can charge for you). But for all that, every job I’ve taken has also given me a payrise. So you can continue with the same role but earn more, simply for being better at it.
I can do anything I want though - I can start my own company; I can be a contractor; I can go back to consulting; I can stay permanent but work at any number of companies (big/small, in pretty much every business domain you can think of); I can step back from the code and move into architecture; I can progress through team lead to management; I can move sidewise into business analysis or automated testing. The only caveat I would say though is that if you don’t drive your career in those directions, you will probably continue to be some form of developer for as long as you enjoy coding.
Making the leap into any one of those other areas needs you to try that out a bit (many agile teams, for example, let you pick up some responsibilities that aren’t coding), see if you like it and push that side of things on your CV or within your organisation. Sometimes this needs you to invest your non-work time in it, whether it’s by reading books, joining user-groups and meetups, attending conferences - anything which will let you find mentors in the area you’re interested in.
In your experience are you aware of any differences your role has between industries/sectors?
The biggest difference that I’ve noticed (and I mentioned this earlier) is being a developer in an organisation where their business is not technology vs being a developer in a technology company.
For example, at Ford I was in the IT department. Ultimately the company makes cars, and our job is to support the company in making high quality cars efficiently and sell as many as possible.
In a company like a startup where the technology is the business, a developer has a fundamental, direct, and usually visible, impact on the business - a new feature on the application, functionality working faster, improved usability etc.
To me, the difference between these types of roles is that at the end of the day, when you work in an IT department, you need to do what “the business” needs. There is scope for innovation if it will clearly improve the business, but you’re quite far removed from the people who actually give money to your company (e.g. customers who buy cars). When technology “is” the business, there is much more of a demand to try out new stuff and think of ideas which will drive that business.
Personally I prefer working for a technology firm, and not because companies with an IT department are bigger. I’ve worked for small firms where technology was an enabler but not the core business - these are cool because your users sit in the same office as you and you have scope for innovation, but it’s still not as cool as seeing the feature that you worked on being directly responsible for bringing in more customers/money/etc.
What was it like coming into the industry?
This actually deserves a blog post on its own, so I can’t do it justice at all.
Being a programmer is not sitting in a darkened room coding alone for hours. It’s not munching pizza and talking geek, although actually that’s a perk I rather like if I can get it. It is being sat at a computer for 8 hours a day, which was not my idea of fun when I was 17 and on the basketball and athletics teams. But then, accountants, architects, marketing gurus, customer service people... they’re all chained to their PCs these days too. The only people who get a respite are managers, and that’s because they’re forced to sit in meetings all day.
I didn’t realise programming was collaborative - it’s a team game. I didn’t know that you need people skills to get on in this job. I had no idea that actually, because your output is limited to the little box on your desk, it’s more important than a lot of other roles that you go out there, make contacts, meet people, and look good at your job - whether that’s because you’re inside a massive organisation where the people who decide your promotion don’t even know your name, or if it’s because your small organisation needs you to go into the wider world to shout about what you do to bring in sales or new recruits. Most importantly, you need to do that to nab your next Perfect Job. Or Good Enough Job.
Do you have any thoughts on the future of your role/industry?
Not really. I like to wing it - if I’m not enjoying myself, or not learning anything, I try something else. There’s always new technology and always new companies. You’ll learn the next big thing when you need to, that’s what we get paid to do.
What advice would you give someone entering your industry?
I wish I knew earlier that all jobs are not created equal. My Java Developer job at Ford was very different to my Java Developer job at Touch Clarity. Interviews and probation periods are for both you and the company - you’re there to see if you want to work for them. And do not be afraid of moving - there’s always another job, another thing to try.
Have you come across anything or anyone that has helped you move forward in the industry?
Yes, lots of people. Some are colleagues I met along the way, some are people I met at the LJC, some are friends of friends. Books, blogs and conferences have also inspired me. People, whether they’re your peers, mentors, or people you are mentoring, are more important to your career than any technology or skill you learn.
Please give a short description of your experience to date.
See my linkedin profile, that’s the best description: