Today I wanted to take a break from the regular technical posts to talk to you all about something I feel strongly about…humane software. I’m not referring to ethical or morally sound software, but the process by which all software gets created. The industry is not unlike the lands of law and medicine where residents work 16 hours a day and lawyers bend laws while burning the midnight oil. The world of software is full of cut corners, unprofessional quality, and inflated egos. Maybe you write software, maybe your direct reports do, or maybe you’re a CEO trying to find out how to “do it right”. This post won’t tell you everything you need to know, but it will tell you some common pitfalls and some ways to help improve the world a little at a time.
Are you wondering why you should care? If I didn’t write code for a living I might wonder that too. You should care because software controls most of the world. That respirator keeping your family member alive, that plane you flew to vacation recently on, and even that car you probably drove to work today…run on software. What could happen if there was a bug in your car’s accelator? What would happen if that airplane’s engine control went out over the Atlantic? These things have actually happened. Check out this article on Boeing’s outsource scandal. If you want to help prevent these kind of things from happening, please…read on.
Heroism is one of the most common manifestions of malpractice in software. It is the act of celebrating when people work 100 hr weeks to meet a deadline. It’s celebrating when coworkers give up a family vacation to deliver a feature. If you have worked in software like me you probably see this weekly. Companies are often clever though and don’t require it. Instead they promote employees or give them public accolades. They take these folks out for beers on the company dime or give them a day off the following week. These types of rewards for poor working conditions and work-life balance causes many people to act like the celebrated individual. Instead of respecting the employee’s right to a family life, sound mental health, and quality sleep…they are instead encouraged to be a Hero.
Don’t be the hero. Instead encourage everyone to share their lives and celebrate their personal victories. Rather than promote people for working 80hr week, how about promoting those who are spending time mentoring and teaching their coworkers? Work can be “just work”. It’s OK to be passionate about what you do, but remember you are a human first and humans have real needs. Humans need sleep, companionship, and a breadth of knowledge. You have the right to be a well-rounded individual as do those around you. Help each other to grow, be a good human.
Check Your Ego
As a software engineer and someone people have labeled as “smart”, I can tell you how rampant this is. I can also tell you that I suffered from this early on in my career, and probably still do. It got so bad that my best friend and manager had to take me out to lunch just to share how poorly I was behaving and the work atmosphere that I was forcing on others. It was eye opening. I’ve seen that inflated ego at all levels of an organization. Whether it is one engineer verberally berating another on Slack for a security mistake, a project manager forcing processes they prefer, or even a CEO taking only the highest paying work regardless of condition.
Want to help? Take that ego and deflate it. Instead be opinionated, but hold your opinions loosely. Instead of forcing a preference, seek understanding. Instead of ridiculing a coworker’s solution, help them to create a better one. Try to be a good citizen on your team, rather than the smartest.
We all know that all software isn’t ethical, but that’s not what I’m here today to talk about. Today we are talking about your ethics and letting them fall by the wayside at work. Maybe it’s a project you took even though you know the deadline will be murder on the team. Maybe it’s some tests you didn’t write because you were tired of working on the feature. Maybe your boss asked you to buy a bunch of domains and ransom them. Our industry is not unique, many others suffer from the same issue. But we are here to talk about where we work…software.
You can be the example! Today you can decide that your ethics are more important than your job. When your boss asks you to compromise them you can refuse, gently and with respect. You can be honest with your colleagues. You can dismiss unreasonable projects that will kill your team. Today you can take the time to finish those tests so the next engineer can solve future bugs more easily. You might find that defending your ethics garners respect from your peers and managers.
Stop Forcing Dates
Deadlines in software is a frequent reality and a topic which has been talked about to a great length. The crazy thing is that even though lots of people in software know this…they still accept and force them! Sometimes deadlines can’t be helped, but then you compromise somewhere else such as in features required so that the team doesn’t have to burn the midnight oil. Sometimes people just want dates. In these cases try to be more general and give you and your team(s) a chance to succeed. Instead of agreeing to finish a feature by next Monday, tell them you think you will be done in about a week, but will keep them updated as things change. Dates are a funny thing. Often times they are just a control mechanism to monitor progress.
How can you help with deadlines? Try being more communicative with management and project managers. Give them reasonable estimates, and let them know and see progress continually! If you really want to throw them for a loop, start deploying your software piece as each item get’s finished. You might just find that by delivering value often…people stop asking for dates so much.
Be An Expert
This one is for you software engineers out there. It’s time we stopped accepting being told how to do our job. It’s time we refused to skip tests. If you were a mechanic would you accept your customer telling you to skip verifying that your fix worked? Of course not! Somehow in software this is not how the world works. Instead our manifestos about how to deliver professional software get turned into bureaucratic processes managed by folks who don’t produce software. We are asked to justify why we spent so much time writing tests. We are even asked not to spend time cleaning up (gardening) our code bases.
As software engineers we know how to create professional quality software and we should defend the tools and processes that allow it to happen. The next time your managers ask you to skip tests…say no. The software that you produce is not the company’s…it was made by you, and you know that when something goes wrong the blame rests on your shoulders. Take ownership and don’t let others make your choices for you.
All of these opinions and advice have accumulated over more than a decade of working in software. Most of it is advice I wish I had heard before getting into this profession. It wouldn’t have stopped me though, I love this field and I hope that by sharing this I help at least one person keep their joy a little longer.
With all off these talking points it is important to remember to be gentle, professional, and disciplined. If you demonstrate expertise, if your approaches deliver quality, and if how you work brings real value…you might just find that people will start listening.