Professionalism in Software

I want to talk about professionalism in Software Engineering. I’ve been a ‘professional’ – by definition, getting paid to write software, for 12 years, but it’s only in the past 5 years that I feel I’ve been taking a proactive approach to honing my craft; working on being more professional. I’ve always strived to be professional, but until recently I hadn’t really thought about what it means to be professional or how to approach honing my professionalism. In today’s modern society, people are touted as ‘experts’ because they know more about a topic than many others – and on topics that have little history, an expert could be in their teens with 12 months’ experience. Professionalism however, is not exactly the same as expertise. Professionalism is a discipline in itself, and has many cross-cutting qualities that are universally true, no matter what industry you’re in. Being an ‘expert’ in a particular programming language or technology stack, does not make you more professional than someone who is new to that technology. Sure, it means you should know enough about it to make working with it faster and produce better results in the time available, but are you a professional?

Being a professional does not mean having the most professional tools, collecting the longest list of certifications or working for the most prestigious organisation. Certainly these things are often symptoms of being a professional, but they are the result rather than the essence.

A professional software engineer does much more than write code. To be a professional, you spend your life communicating, planning, organising, testing, evangelising, mentoring, fire-fighting, debating and above all else, learning.

When I was 19 I assumed by first management role, working in a contact centre for a major telecoms provider. About half of those in my charge were a similar age, and the rest ranged up to their early 60s. I remember the challenge of commanding respect as a manager at such a young age. Some people resented being managed by someone so young – but many, especially those my age or younger, didn’t know that I was 19. I felt a sense of responsibility to be more professional. I had to show that I deserved respect, and most importantly – that people should trust me, and follow my instructions. I built my managerial persona on three things. Knowledge, courage and integrity. I still believe these three things are the cornerstones of professionalism; let me explain a little more.

In my role in the contact centre as a Team Leader, my main responsibilities were to coach my team – providing feedback to them regularly and developing their skills and knowledge to help them achieve their targets; to perform normal ‘line manager’ duties such as approving time-off, conducting return-to-work interviews after team members had been off sick for example; and taking charge of situations as they developed – such as customer complaint escalations or incidents in the call centre during the evening shift, where I might be the only manager in the building. Having only worked in the company for a few months, it would be impossible to call me an ‘expert’ in anything that I had to know about. But I made it my obsession to know the systems, procedures and the company as well as I possibly could. In doing so, I had worked my way up from a very brief spell on the phones, to being a ‘floorwalker’ – a designated helper who walks around attending to technical or procedural queries from the staff manning the phones, through to being a trainer – which aside from requiring detailed knowledge of the subject, carried its own team leadership duties. I firmly believe that it was my knowledgeability in my work that first earned me the respect of my colleagues. People knew if they had a question, they could ask me and I’d either know the answer, or know how to find out. Being a fountain of knowledge is the baseline requirement for most professionals. Having enough knowledge of your particular subject area to be the go-to person for your colleagues on the subject will undoubtedly carve out a position for you as an ‘expert’ – but it’s only one of a number of pillars of professional discipline.

As my career in software has developed over the past 12 years, an obsession with knowing things has helped me to be in this ‘fountain-of-knowledge’ position in many of my roles, but there have been many situations where I was not the most knowledgeable, or most experienced person on hand, but still commanded the ‘go-to-guy’ role. This is because, in my opinion, knowing things is only part of the picture. If you are fortunate enough to have absorbed a wealth of knowledge, it is your responsibility – your duty – on a team, to make yourself amenable to your colleagues. I have worked with many incredibly smart people who behave in a way that makes them unapproachable by less experienced colleagues, meaning their value to the team is significantly depleted because they are ‘hogging’ the knowledge.

We’ve all met people who delight in their superiority thanks to the incredible wealth of knowledge they’ve amassed, and guard jealously. These people are the ones who come to fill roles like Technical Lead or Principle Developer in organisations on the strength of their knowledge, but whose team-mates see them as a one-person team of their own, rather than a hub of knowledge and experience for the team to lean on. They enjoy this revered, untouchable position, and cannot see the problem it creates. I’ve been here too. I’ve found myself in situations where the knowledge gap between my junior team-mates and I was such that it was sometimes easier for me to just assign myself chunks of work and do them without any input from the team and then bask in the adoration and praise for what incredible work I’d done. This is dangerous, selfish, and counter-productive. In emergency situations, these ‘heroics’ can seem essential, but left unchecked this behaviour creates toxicity and stifles growth, productivity and team spirit. It’s unprofessional.

For me, integrity is what makes the difference between the arrogant, know-it-all technologist who performs seemingly impossible feats of endeavour, while the team tip-toes around them trying to contribute, and the professional technologist who takes the time to document, teach and encourage. Nobody gets ahead in their career entirely through their own making – we all have help. We have documentation to study, we have prior art to reverse-engineer and we have opportunities to participate in things that grow our knowledge and experience. As your career progresses, if you find yourself being ‘the smartest guy in the room’, it is your professional duty to document and teach what you know. If you’re participating in a short-lived project with a couple of seasoned veterans who are as experienced and knowledgeable as you, then perhaps you can afford to knuckle down and churn out work at a rate of knots without giving knowledge sharing a second thought. But it’s extremely unlikely you’ll find yourself in that position for any length of time – and you are probably missing an opportunity, even if you do.

Integrity for me in my 19-year-old Team Leadership role in the contact centre in 2005, meant treating my colleagues with respect. I never asked any of my team to do anything that I wouldn’t be willing to do myself. I led from the front, demonstrating the behaviours I wanted to see. I was respectful to those older team members who felt a little irked at taking instructions from a teenager, and tried my best to suppress the teenage sarcasm and know-it-all attitude that comes naturally when someone older disagrees with you. I always tried to be fair and demonstrate to people that they could trust me. If I needed someone to do something a little extra, I always made sure to return the favour. For example when someone called in sick at the last minute, I found a way to fill the gap by asking another team member to stay late. They didn’t particularly want to, but because I’d gone out of my way to get a short-notice day off – inconvenient for the company – approved for them, they didn’t take much persuading.

Another important aspect of integrity is doing the right thing in the best way you know how, with a view to the impact your actions will have on others. An electrician wiring a house can choose to do so using any ‘code’ of wiring they choose. As long as they are consistent and do everything safely, the whole exercise will be a success. Not so in 5 years time when a different electrician needs to repair or modify the circuits which have been installed with non-standard colour coded wires. By following the standard, the electrician is setting up the person who comes behind them for success. This is professional. It seems a no-brainer, but the idea of ‘paying it forward’ is what sets professionals apart from experts. A highly knowledgeable person who carries out any task with no consideration for those who may have to deal with any future consequences is not a professional. Knowing and applying industry standards is a non-negotiable trait of a professional. So too is assessing risk, documenting anomalies and specialist approaches, and appraising the impact your work has against the lifetime of the work product. In the contact centre, this quite simply meant keeping up to date with changes in processes – published on the internal knowledge-sharing tool, and conducting appropriate handovers to successive duty managers. In software, it’s more complex, but usually boils down to following code standards, implementing well-documented patterns, documenting any gotchas or ‘getting started’ instructions and thinking through the consequences of your approach on the whole lifecycle of the software.

Above all, the most valuable approach I learned was to make time for everyone. From the receptionist to the cleaners, the cafeteria staff and every manager and team member in the building, I made it my business to speak to them. You have to take a genuine interest in people to obtain a long-lasting respect, and I’ve always found that taking the time to have conversations with people about what matters to them is the key to honing these relationships. Having relationships across the organisation is a sure fire way to cement your professionalism. These relationships are an opportunity to learn more about the subjects that are tangental to yours and be able to successfully pull together in sticky situations – and it is this that delivers the ultimate level of professionalism.

Courage to take charge in the hairiest of situations, backed-up by a wealth of knowledge and a network of carefully nurtured relationships is what really makes a professional. When the brown stuff hits the twirly thing, can your colleagues count on you stepping up to the plate and using the knowledge and experience you have to limit the damage and help weather the storm? Leadership is important in any team – but you don’t have to be the leader to be professional and contribute enormously to the effort. When soldiers are under fire, they may look to their commander for leadership – but they depend on the professionalism of their comrades to feel confidence in getting out alive. The leader may set the course, but without the professionalism of the individuals on the team, success may be very difficult to achieve.

“Over the years, I’ve realised that in any new situation, whether it involves an elevator or a rocket ship, you will almost certainly be viewed in one of three ways. As a minus one: actively harmful, someone who creates problems. Or as a zero: your impact is neutral and doesn’t tip the balance one way or the other. Or you’ll be seen as a plus one: someone who actively adds value.”

Chris Hadfield in his book An Astronaut’s Guide to Life on Earth

As Chris Hadfield says, you should aim to be a zero. Do no harm, and don’t get in the way. But strive always to be that plus one – add value to any situation you find yourself in and you’ll be viewed as a valuable professional.

My first programming was on an Amstrad PC2286

Professionalism became very important to me as my career developed because I had a significant disadvantage. I learn obsessively, but I have never been particularly academic. When I was a teenager, I was locked in a battle between my academic education and my vocational education. At my school around the turn of the millennium, IT meant 2 years of learning spreadsheets and word processing that ended before you began to study towards your GCSEs. In year 9, when we first started IT classes, I asked my IT teacher who was also a careers teacher, how I could become a computer programmer. His response was “how should I know? I’ve only studied the textbook that I have to teach”. I was by then already obsessed with IT, having began writing programs in QBasic on MSDOS on an old hand-me-down Amstrad PC2286. In July 1998 I got a free copy of Borland Delphi 1.0 on a CDROM that came free with a computer magazine, and I started writing Windows programs. By the time of my GCSEs I was a full-blown computer and electronics nerd with 3D animation, website design, databases, TCP/IP networks and even a little RF engineering under my belt. I had very little interest in my studies, and was bullied at school. I didn’t fit into the cool kids or the misfits camps and drifted around all of them as a chubby, awkward nerd who was prone to lashing out.

My GCSEs were not a success; I achieved 5 passes of C or above in Maths, English and Science, but just about. At the grammar school I attended, this was not enough to return and do my A-levels, and when I asked a senior teacher on results day how I could take my results and study towards being a computer programmer, he laughed and told me that with those grades I would have no chance. I decided that if I couldn’t be a programmer, perhaps I could be an RF engineer, and I studied a National Diploma in Engineering for a year. Nine months of hand-written notes later and I was disillusioned with the whole thing. I wanted to make things, to do things, not to read things. I quit and took a job at a local radio station where I could get my hands on all manner of tech, and the same year I began learning PHP and MySQL. For me, in 2003, these two things were a game-changer. Suddenly I had a realistic chance of being able to write software that people could use – because it was on the web. I decided to try my studies again and this time took an Advanced Vocational Certificate in ICT. I found that almost everything this course covered, I already knew. Spreadsheet design, operating systems, presenting information – it came very easily to me and I lacked a challenge. Again, I quit and decided to get a job.

This is when I ended up in contact centres. Working in contact centres is an incredibly powerful way to start your career. There is always a shortage of skilled people and there are lots of opportunities to take on responsibility. If you’re motivated and responsible enough, contact centre work, far from being a dead-end job, can be a career catalyst. While working in the radio station, and in the contact centres, and later as a trainer on a government IT project, I always wrote software in my spare time. I always found ways of solving problems with software, and eventually I found someone willing to pay me to do it, despite my lack of formal qualifications. Once you’ve had a job in the field, it’s not so difficult to grow a career from there. The problem is, you will regularly find yourself excluded from applying for roles due to your lack of academic qualifications. I desperately wanted to work at Google in my early twenties, but the fact that at the time two-thirds of Googlers had PhDs and a degree was required to interview for any role at the company, meant my dreams were dashed. I was asked at a number of job interviews “you don’t have a degree, so why should we hire you?”. I’m known for my ability to talk, and I could usually persuade people pretty easily. But it was frustrating to be looked at with derision for my lack of academic qualifications.

What I found out quite quickly when I became a manager in software, is that many graduates begin their first day on the job without the first clue about software development, and my handful of years of experience set me head and shoulders above ‘qualified’ people when it came to my ability to do the job. What I didn’t recognise at the time, in my arrogance or naïveté was that my on-the-job learning meant that I lacked disciplines and skills that you only get from formal study.

When I did finally begin to identify my weaknesses and understand what it meant to be a professional, I suddenly began to experience a wave of imposter syndrome. I found myself uncomfortable advertising myself as a software developer. I have since come to understand imposter syndrome a little better – which is for another post – but my solution was to validate my position by joining a professional body. I chose to become a Professional Member of the British Computer Society, the Chartered Institute of IT in the UK, which entitled me to use the post-nominals ‘MBCS’. At the time, I saw this as a validation of my experience and expertise. To join the BCS, you need to submit evidence that you’ve worked in a technical position in the IT industry for a number of years, and receive references from your employer, so it was the ‘rubber stamp’ I was looking for. Membership of the BCS carries with it an obligation to abide by the society’s code of conduct, and it was this that actually turned out to be the most valuable aspect of membership for me. Adhering to the code meant refocusing my attention on my professional disciplines, and I’ve since spent years obsessing over refining my craftsmanship and professionalism.

There are so many resources out there to help you develop your skills as a professional, not least of which is almost any of the books, videos or courses by Software Professionalism Guru ‘Uncle’ Bob Martin. But I have read and studied materials across many fields – an example of which is Chris Hadfield’s book, mentioned above.

Being professional is a career-long pursuit and, in my humble opinion, it boils down to these principles

  • Obsess over knowledge of the tools, materials and and practices of your profession and take pains to know and implement your industry standards.
  • Be aware of your actions and their impact on the project, the organisation, or those who may follow you in your work.
  • Be respectful of anyone with whom you have professional contact. No matter your level of expertise, accept that everyone has a role to play and good relationships are crucial to your ability to do your job.
  • Be courageous and step up in tricky situations. Your knowledge and experience, even when you’re not in charge, or responsible for the situation, is vital and everyone will benefit.
  • Know yourself and your strengths and weaknesses. Understand the disadvantages you have and seek opportunities to overcome them. Look for ways to demonstrate your experience and professionalism if you feel you need to. It will boost your confidence and open up new opportunities for growth.

I’m on a journey of professionalism, and I’ve made it my mission as a leader to instil professionalism as a discipline in my teams. Integrity demands honest appraisal and I always seek feedback to ensure I’m getting it right. I don’t always get it right! I’d love to hear your thoughts and experiences on what it means to be a Software Professional.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s