Chris O’ Dell is a Software Engineer with 8 years experience favouring server side web development such as REST APIs and Services and who is passionate about developing clean, maintainable and tested code. Chris has a BSc in Computer Science and is a member of the BCS and the ACCU. You can find her on Twitter @ChrisAnnODell or her (“rarely updated”!) blog at www.chrisodell.me.uk
What is your job title?
We have a very flat structure at 7digital and believe that working as team removes the need for having individual titles. So, I could call myself whatever I like, but I’d probably choose Software Developer.
What is your role about?
I’m part of a team of 8 people working on 7digital’s public API. We work in an agile manner aiming to pair program as much as possible, using a TDD approach. We break down our work into the smallest releasable feature (also known as a Minimum Marketable Feature) and use a Kanban board to track progress. Each morning we have a 15 minute stand-up where we talk through the items on the board, as a team, and update each other on our progress. At this point, we can raise any problems we’re having and even swap pairs with the aim of spreading the knowledge of implementing the feature throughout the team. The pair working on a feature will analyse the requirements and note down the Acceptance Criteria for the work to be considered complete. Then, we go through a Ping Pong Pair Programming pattern, where one person will write a test, based on the Acceptance Criteria, and the other person will write the code to make the test pass. It can be very demanding to work in this manner, but we found that the overall quality of the code produced is far higher and far less likely to contain bugs. We also have the build and deployment system fully automated, so on average we will release a feature to Live at least once a day. This makes us very responsive to change and also, as a developer, it feels good to see the changes you made going to Live regularly and having an impact.
What are the best/most positive parts of the job/industry?
As I stated above, I enjoy making an impact; seeing the changes I’ve worked on being useful to others using the API. Also, I enjoy the fact that a programming role encourages you to keep learning and pair programming has taught me a lot about how others work and think – there’s a lot you can learn from you teammates and a good discussion is always welcome. I also enjoy the ability to be able to tinker with code. There’s so many Open Source and cool technologies out there that you can easily just pick up and start playing with – in fact, I find that I want to play with many that I often don’t know where to start!
What are the negative parts to the job/industry?
There is a tendency in the industry to see software development as something that you can just chuck more people at and crank out solutions, no matter the cost to quality and time and often resulting in burnout – the infamous Death March project. I’ve had a role just like this, it was one of my first development roles out of Uni and hence I was fresh-faced and eager to impress. The timescales of the project were woefully optimistic, the specifications lacking and allowing for huge amounts of scope-creep, and a constant threat from “above” that if the project failed that we’d all be out of a job. I remember working 80 – 90 hour weeks, including weekends and overnights all in the vain hope of meeting the ludicrous deadlines. It’s a strange position to be in; you can see the failure happening, everyone around you can, but you are urged to push on, no matter the cost, even bribed with promises of bonuses that never materialised. Before long you are in it to help out your teammates (how can you go home and leave them working?) and this then reinforces to the management team that this dreadful pattern of working is acceptable. We worked on the first project in this manner, and a second one, by the time the third project came round the whole development team had quit. It took me months to once again enjoy coding, but I am far more aware of the warning signs of a Death March project and will not allow myself to be in that position again.
What is the standard career path/qualifications?
I think people can get into Software Development with all kinds of backgrounds – it’s the passion which is important. I personally started off with the “standard” route; I took “A” levels and then a BSc in Computer Science, but my first role was not a development one but a junior project management role. It was not what I wanted, but I was happy to have a job straight out of Uni. My time in that role reaffirmed my desire to be Software Developer and soon enough I moved into the Development team in a Junior role. My Team Lead was helpful and he took the time to get me up to speed with programming in a commercial environment. I also read books, blogs and travelled down to London regularly to attend User Group events – I learned everything I could and I believe it is this desire to keep learning and better myself which enabled me to get the role I have today.
What are the prospects?
There is a strange perception that in order to progress, one must move out of development and into a management role of some sorts (either people or projects), but I feel that this is incredibly wrong – programming is what I love to do and it is what I am good at. I could of course move into a management role, but I have no desire to. Alternatives, are to continue to gain more skills; a deeper understanding in technical areas and become more of an “expert”. At 7digital, there is no pressure to move away from what you are good at, in fact becoming more skilled is the preferred way to progress.
In your experience are you aware of any differences your role has between industries/sectors?
One big difference is our ability to release often. As a web based client, we can push out changes with great regularity, with no need to package up the product and send it out to users. Also, our clients are very varied; from bedroom developers using the api to hack together a mashup application, to commercial users such as Samsung using our API to build their app into a wide range of mobile devices and we interact with both directly.
What was it like coming into the industry?
I didn’t know what to expect, and as I stated above, my first role was not in Development, but the advantage this gave me was to be able to see the role of a Developer in the industry before I moved into Programming. My first year as a Programmer was filled with a lot of learning and re-learning. I knew all about Object Oriented development, but I had no concept of Design Patterns. I could write code, but knew nothing about Source Control or how to effectively work in a team on a single project. I was afraid I would get it all wrong, afraid I would break something, or accidentally delete the production database (I’ve actually done this once – so, ensure you have backups!), but I had a supportive team and a desire to learn and so I read everything I could on the subject areas I was missing and soon enough I was a productive member.
Do you have any thoughts on the future of your role/industry?
There is a lot more scope in the industry these days for individual developers to create Apps, such as iPhone or Android apps, but I personally feel that there is a lot to be gained from working in a team. Also, Open Source is becoming a bigger part of everyday development, with more Open Source tools being used in commercial development.
What advice would you give someone entering your industry?
If I was to enter the industry today I would try to take advantage of all the resources out there to learn all of the bits that a degree does not cover (design patterns, pair programming, TDD, source control). There is so much information and code out there for people to look at that they can try to reduce the big learning hurdles in moving from Uni to the industry and feel far more confident in joining a role. Also, I would look for roles specifically aimed at Juniors with mention of mentoring, or at least pair programming which will get you up and running rather quickly. Also, take advantage of local User Groups – go along to learn new areas and to make contacts. Also, watch out for Death marches!
Have you come across anything or anyone that has helped you move forward in the industry?
The London .Net User Group exposed me to TDD and other technologies and are well worth attending. Also, the ACCU are a great group of developers who have generally been coding for a long time – they are primarily C++ coders, but I find it good to have a different perspective, which is another point I want to raise: try not to get sucked into any echo chambers. It is easy to find a group of like-minded developers and believe that theirs is the only way to view the world. Join groups using technologies and languages you are unfamiliar with, stay open to new (and old) approaches and try to read as many viewpoints as you can.