As we live through the Digital Revolution I see software development in a similar place, professionally, as mechanical engineering was at the turn of the last century. My hope is that soon we will see software engineering attaining the same status as other engineering disciplines so that we can deliver software as respected professionals, but first that will require us to act more professionally.
The way we get such a status will undoubtedly be incrementally and though many iterations – that’s as much what engineering is about as the practical application of learning – but I believe for many software developers the next iteration should be to bring professionalism to their industry.
Software Development Must be Performed with Professionalism
In my experience professionalism is generally overlooked in most software development houses yet it is attainable and brings many benefits; what follows are the traits of a professional that I believe to be most important.
Continuing Professional Development
If you are a professional, then you are responsible for your own career. You are responsible for reading and learning. You are responsible for staying up-to-date with the industry and the technology. ‘Uncle Bob’ Martin
If you are a member of a professional body you will probably be familiar with CPD, but few in our industry take it seriously*. This leads to developers being ‘left behind’ technically, in turn leading to developers doing a poor job. You wouldn’t imagine a doctor or civil engineer relying on methods and techniques superseded 10 years ago but I have witnessed first hand development teams which are not using continuous integration or unit testing, both of which are proven to deliver increased productivity and quality.
*Why it is not taken seriously I am unsure but my guess would be that either software developers are in short supply and so employers overlook CPD when recruiting or that since employers are not demanding that candidates have a professional accreditation (which would require CPD) developers need not do it – unlike an electrical engineer in the UK who must follow CPD in order to retain professional membership of The IET.
Most (all?) engineering bodies have professional codes of conduct written in to their bylaws (e.g. The IET). While some of the rules will cover conduct towards the professional body most are concerned with matters such as treating people fairly, acting with integrity and working responsibly. Our industry lacks any commitment to such bodies.
In my own work and in talking to other developers I find our professional conduct towards others to be terribly lacking: sexism and a boys club attitude are common. Insensitive, sexist or homophobic language in the workplace are too widely tolerated. Bullying and arguments in meetings and online are considered normal while prima donnas are accepted and cliques normal. Treat people with respect and courtesy.
It is even common for developers to steal code when they leave a job. Quite how such dishonesty and unprofessionalism ever became commonplace I have no idea but I have worked with software contractors who have arrived for their first day of work with the entire codebase and documentation of their last project stashed on their laptop to plunder at a later date.
For an industry which is so in demand, which does just as well in hard economic times as good, an industry which is at the heart of the modern Information Age it is staggering how little effort is made to coach, encourage or instruct the next generation of software professionals in the workplace. This is less about teaching graduates CSS, more about helping them understand what it means to be professional and helping them attain that.
The desire and the ability to mentor others in your field is as much a part of professionalism as producing working code.
Seeing Beyond the Code
While your title may be “Software Developer” it is not your job description. A professional must have a greater understanding of the business they are in and of businesses in general. An appreciation of finance, HR, coaching and your company’s industry sector are all things that a professional should have.
The professional software engineer is not simply a code monkey.
Facebook at work? Constantly checking email/twitter/snapchat/IM…? I’ve never seen anyone try to read a newspaper or a novel every 5 minutes throughout their working day but it seems that browsing Facebook, checking the news or messaging friends after each completed line of code has become almost a modern developer’s right. It’s unprofessional, it’s improper in the workplace and it ruins productivity, flow and team interaction.
It is the duty of a professional to be value for money, to produce, to discuss, to inform and not to waste.
Work delivered by you is your responsibility. You should not attempt work or agree to work that is beyond your ability. What you deliver should work.
When agreeing to take on work you are agreeing to be responsible for all aspects of it, not just the parts you enjoy or that you care to do. If, for example, you write new software it should work on all environments through to release and include all other relevant artefacts, whether that’s build changes, written documentation or a lengthy test plan if that’s required, whether you personally think it’s necessary or not.
Compromise gets things moving. Compromise delivers on time. Compromise listens to and understands others; it is a skill that is required in any branch of professional engineering.
I want our industry to be rid of ninja coders, prima donna developers and stubborn software architects who will not compromise then bemoan decisions that don’t go their way or refuse to be involved in tasks which have not followed their dogmatic demands.
Change will come and the professional will be prepared to deal with it. New projects will require new skills, new roles may require a change in how you work and what is required of you. The professional does not avoid or ignore these changes.
Your professional body will also help you. It will aid you in becoming a better engineer and support you when you have professional or even personal difficulties.
Learn, act responsibly and deliver high quality software.
Is this what professionalism in software development means to you?