Edd Grant is a freelance Software Engineer who has been designing software professionally since 2003. He is passionate about designing great, maintainable, software in the simplest and clearest way possible and enjoys taking on new challenges in software development. He has a keen interest in the effectiveness of development teams and how different methodologies and processes can be leveraged to improve team effectiveness. He is not a fan of bureaucracy.
In his spare time Edd is almost always working on at least one personal project. He is an adamant supporter of open source software and open standards and has recently founded the ‘qunit-test-runner’ open source project. He is also co-founder of an exciting new project called ‘Stretchr’. Edd also has a blog which he sporadically updates when he gets the time (http://www.eddgrant.com/blog) and has a passion for mountain biking and tea.
Title – What is your job title?
I’m a Software Engineer – I design and build software. My clients call my job various things such as developer, technical lead, team leader, build manager, technical architect, software consultant etc. I prefer Software Engineer since it encompasses the narrower roles and more accurately explains what I do.
What is your role about?
It very much depends on what the client/ project need; at the core I design and build software but there is also a wealth of fascinating work away from the development itself such as planning and mentoring junior colleagues. This aspect of my job can be really rewarding as it allows me to use and develop my people/ soft skills as well as developing my technical expertise. I also believe that having a broader involvement in a project allows me to make better project related decisions by providing me with a more comprehensive exposure to different project aspects, which would usually not be visible through development alone. Hence I like to get involved in as many of the following aspects as possible, obviously as the client/ project requires:
- Building the team : Interviewing and recruiting new team members as and when the team needs to grow. This provides an opportunity to build a team of people who will compliment each other’s skills and work well together.
- Designing processes : Designing and refining the team’s development build and release processes, selecting appropriate and productive development and project management tools.
- Planning the development : Turning business requirements in to chunks of technical work (user stories, use cases etc) and planning how this work will be distributed out across the team.
- Technical design : Taking the requirements and turning them in to a coherent technical design. Evaluating the most appropriate technologies, designing what our system(s) will look like, both in architectural and lower level coding terms.
- Mentoring : Day to day mentoring of developers, answering their questions, assisting them in their design and implementation work. Helping them stretch themselves and grow in the process. Reviewing work for both quality and appropriateness and ensuring it adheres to what we think we’re implementing (sanity checks!).
- Writing the code : The really fun bit! Implementing the design, writing the tests, working both alone and alongside other developers in actually ‘building’ the system.
- Dealing with problems : Being able to understand what’s really going on when things don’t behave as you’d expect them to and keeping a cool head when doing this in a time pressured environment. Being able to design and implement successful fixes to identified issues is also important.
- Integration : Liaising with system owners when integrating systems in order to design interfaces between the 2 systems.
What are the best/most positive parts of the job/industry?
- The excitement of being responsible for designing and building a system from scratch.
- Getting to work with great teams of talented, passionate and driven people, making some great friends in the process!
- The great feeling you get when you figure out a complicated problem, then the even better feeling when you identify the solution write the tests and prove your idea works.
- Pushing and developing your own limits, both technical and personal terms.
- Working on different projects with different clients is a great way of getting exposure to a wealth of different technologies, businesses, methodologies and people.
- Getting involved in technical communities both online (e.g. JavaRanch/ StackOverflow) and in the real world (e.g. London Java Community/ Android Community). Meeting new people and sharing ideas together. This is something which simply does not exist in many other engineering related disciplines and it is a great benefit for the software community.
- Attending interesting conferences, getting to speak and share your ideas in front of other developers.
What are the negative parts to the job/industry?
- I believe keeping your skill set up to date is vital – technology moves very fast and clients often want skills in specific technologies. Sadly, some employers don’t place value in allowing staff time to develop their skills, so to excel as a software engineer this sometimes has to be done in your own personal time.
- When stuff goes wrong: It doesn’t matter how meticulous you have been or whether it’s even code that you/ your team has written, At some point in your career something uber-critical will go wrong with a live system, senior people will get involved and someone may not treat you with an adequate level of professionalism. At this point it is your responsibility to remain calm, rise above it, give up your evening or weekend without fuss, assess the issues and fix the situation. Actually this can be an incredibly rewarding activity but it can also be a good test of someone’s mettle!
- Family, friends and extended family wanting you to fix their computer every time it breaks
Career Path
What is the standard career path/qualifications?
A typical route would be to study a computing/software engineering/computer science degree, either at BSc or Masters level. Some degrees offer a year of industrial placement as part of the course – personally I think this is invaluable since it offers an opportunity to obtain real-world work experience and also to find out what you enjoy doing. Many employers also look favourably at candidates with placement experience over those without it, particularly in the current job market.
What are the prospects?
The prospects for a successful software engineers are exciting and varied. As time moves forward so does our dependency on computers, hence software engineers are in demand in all sorts of industries in both the private and public sectors. Work is often exciting and can reward creativity and achievement. Work is also generally well paid. One caveat I have seen is that some companies have a tendency to push their most talented technical people in to managerial roles irrespective of whether it’s appropriate for the individual or not, however this is not the case across the industry and many employers have dedicated technical capabilities right up to the most senior levels.
Reflection and The Future
What was it like coming into the industry?
Exciting! I wanted to learn, demonstrate my potential and get involved in creating software. What I really wanted was the opportunity to own a piece of development – something I could put all my effort and creativity in to and something I could take pride in. I don’t think that has changed much – I still have a passion for learning new things and I still find each piece of development just as exciting as the first one!
Do you have any thoughts on the future of your role/industry?
I hope that Java and the JVM are able to weather the storm that has recently beset them, they still remain fundamentally relevant to modern software development and have a near ubiquitous presence in software projects across the world. However I would like to see Java become more independent moving strongly toward existing in the open source space and with fewer ties to companies who have more proprietary interests at heart.
Whereas a few years ago we were seeing huge CPU clock speed rises, more recently we are seeing rises in the number of cores per chip. Those wanting to harness this power will need to be well versed in concurrent programming so I would imagine there will be a strong need for developers with these skills in the future.
We are also seeing an increase in the need for systems which scale to degrees which would not have been easy to achieve without very expensive infrastructure. With this in mind I believe that the way we store data will be challenged more widely in the future, with more systems making use of schema-less Databases over their traditional ‘relational’ counterparts. It seems that several cloud APIs are already beginning this movement which I believe will yield some very interesting projects in the future.
What advice would you give someone entering your industry?
- Dabble: Start your own personal projects – learn new technologies, patterns, languages and stimulate your own creativity in the process. Try writing a blog or designing your own website. Don’t forget that anything you create which might be worth sharing can potentially be added to your CV to differentiate you from other candidates when applying for a job.
- Open Source: Open source software is critically important in the larger world of software. Get involved in an open source project, meet the other project developers, contribute a bug fix or a feature and you’ll understand how important it is.
- Get involved in your local technical communities; they’re a great way to meet people and to further enhance your skills.
- Investigate: A good software engineer knows why something works, not just that it works. Don’t be afraid of investigating issues yourself but also of asking questions of your senior colleagues to enhance your own knowledge. Be scientific in your approach and prove your doubts empirically through testing.
- Enjoy yourself: If you’re going to do anything for a number of years then you need to make sure you can enjoy yourself whilst doing it.
Have you come across anything or anyone that has helped you move forward in the industry?
I have found inspiration in several colleagues and mentors over the years. Through our ongoing interaction these people have nurtured and challenged my thoughts and ideas which has in turn inspired me to learn new things and develop my skills and ideas. This has been of great benefit to me so I try to continue the cycle wherever possible with my own colleagues and mentees.
Open source software inspires me. Open source stimulates healthy competition amongst projects, this leads to technological progressions which in turn lead to better software for the masses. Furthermore open source provides free access to software for those who can’t afford or do not wish to use the equivalent proprietary products. Personally I find the Ubuntu and Spring Frameworks open source projects particularly encouraging since they demonstrate models of good practice and both sustain successful businesses through which they deliver free and open software.
I am particularly inspired by Google’s efforts in pushing the adoption of open software and standards. Google is raising the availability and accessibility to data and software across the world, they also put a lot of money in to open source projects and support the software community to an extent that I seldom see elsewhere. I wish there were more companies who adopted this approach.