1 Automation means fixing it once.
Although please note that fixing it once doesn’t mean always fixed. I’ve got a 20 year old Mandelbrot generator that still works but I’ve had to tweak as the C compiler evolved. The algorithm is the same, but I had to modify the implementation slightly as GCC changed how it handled the standard library.
2 Working with smart people.
If you’re scared of learning, this isn’t the job for you. Experienced people will show you solutions you’d never thought of, everyone will ask you questions that cause you to re-evaluate your decisions, and you’ll find yourself saying “I don’t know” more often than not. If you think you know everything, you haven’t even started.
Once a problem is fixed you move on to new domains and new problems. You need to grok new domains, learn new technology, analyse how you work and adapt.
4 Alternative perspective
Software development reaches into many aspects, and covers a variety of topics, so allows healthy discussions across disciplines. (commit strip cartoon?) How you see a process or a program is likely not how the users see it. Human processes are messy and full of holes. Sometimes we can fill them, sometimes we just have to let the users work around them.
(Disclaimer: I realise I’m talking from a position of privilege, and this may not reflect everyone’s experience)
All the teams I’ve worked in are judged on their ability to deliver good software, not colour, gender, age, disability or otherwise. People are praised on their ability to deliver and to work worth others, and criticised when they fall short. I realise I only see a small proportion though, and I did work as a STEM ambassador and a youth club volunteer to help broaden the pool. There’s a lot of work to be done, but good teams benefit from the diversity, and recognise that. If your team doesn’t, fix it. And help get out there to fix it for all teams.
6 Pride in seeing our work being used.
I’ve worked on projects to distribute EU funds to projects around the country, to track prisoner learning to make sure they could get qualifications, to model factories and save companies millions, to help people navigate their bankruptcy, to help nurses and managers find inefficiencies in hospitals. The software I’ve worked on its being used by people for whom it makes a real difference. There’s few jobs that allow you to impact so many people, in so many different ways.
Software development touches on many disciplines, and successful software projects provide opportunities to discuss ethics, psychology, politics, law and other areas. There’s a lot of specialism, but if you want to understand your users, and understand security, and understand the requirements, you often need to dig in and uncover answers from many disciplines to truly understand what you’re building.
It’s clear when a problem is solved. It might not be clear when a project is finished, but each step on the way should be a clear, this is Done. If you don’t have that on your team, define Done. That’s your route markers so you know you’re making progress.
It’s great to see others catch on. See them awaken to the fact that there’s so much more to learn, that software development is a rich, diverse discipline, and then see them run in a direction to become the expert you seek advice from in their chosen area.
Sometimes the satisfaction from development comes from tackling hard problems with no easy answer. Knowing that no-one has solved it before. Land on your own moon.
There’s always someone interested in what you’re doing, and there’s multiple international communities. There’s websites and forums, user groups, conferences. Lots of opportunities to engage with others and learn and teach outwith your company circle.
12 Changing the world
Software has become the driver for most of our daily lives. Without it, there would be no smartphones, no Internet, no social media, no video calling, no Uber. If you want to change the world, first you must understand it.