I know this has happened to me at times. In a previous blog, I posted a bit about software burnout and what it sort of feels like.
Mostly, I feel our corporate cultures can frequently become painful, and they shouldn’t have to be. Part of it is because it feels we can never win and appreciate our success, that we are always behind, or there is always a decision or political situation where we can’t come out ahead. More so, I realized corporate development often feels very unlike the reasons I started programming and doing software.
Looking back, I enjoyed programming most at several specific points in my career:
* when I was just learning (before school) and was making weird games and music programs
* college, particularly in large group projects with lots of fun whiteboard design
* work situations where things were almost purely an engineering culture, with good requirements handoffs from business/marketing, then large blocks of time to simply get in the zone and execute day after day, collaborating with sharp colleagues on design and implementation details as needed.
* when I was working on some really new area where a lot of previous work had never been done, or working on a really interesting tuning problem
It’s a little scary to think what I think of my happiest time in software occurred eight to ten years ago, which was a while back, though I won’t say I was unhappy those other times. Those peak times were at a cool embedded startup and an R&D group at Red Hat that was very great but unfortunately didn’t live forever.
What happened? “Agile” for the most part. Given, I like the idea of the agile manifesto a lot, but I worked at a lot of places that didn’t really understand what was agile, and really got iron-grippy with project management. Others had strong power structures where “what to build” wasn’t proportioned well throughout the company (heck, I’m guilty of this as a manager) and as such what folks decided to build wasn’t well distributed throughout the company.
Agile is not the enemy, but what happened was some tech got easy, and management started treating software developers like labor, rather than say, creative geniuses.
There was a feeling that project management was “over” software developers, that developers were things that were “managed”, rather than creators. Before, it really felt like we were treated more like the lifeblood of a tech company – and somehow, tech companies became marketing companies that employed tech because, well, that is what you had to do.
Red Hat in 2008 had some issues, but mostly had it right. Hire a bunch of smart people and let them decide what to build – all on their own and without supervision. Productize some things. Out of that came libvirt, Cobbler, and Func – which would later inspire a portion of Ansible. My other embedded startup had it right too, and I believe it was closer to a good early-Apple style garage shed in the early days.
As software has evolved, we are increasingly making it feel like labor in some ways. Agility has really become about a way of getting developers to design less and others to have more constant hands on views correcting things. I am not a graphic designer (though I can pretend to be a UX designer), I’m foremost a software designer and architect. We have also probably made it a little too safe – that is, how many web/database consoles do we have to write and how many more will we write? Where is the tech fronteir?
To make software fun again, we must remember what it was like when we were learning and loved it the most, and encourage that to grow in our friends and colleagues. We must worry less about getting ahead and learn to celebrate everybody’s leaps in innovation, both elsewhere at our companies and in other companies. We need to seek more to create than to compete, and ensure everyone has time to both create and dream as well as merely assemble.
Business must realize software engineers are designers, and not just implementers, and rejoice in not only what they build, but in what they decide to build. We must enable surprise and creativity as well as greater control and burn down graphs. Plus, we need to encourage crazy side projects in art, music, games, and whatever else – because ultimately these connect us with technology more and I think give us an interesting way to get our brains away from the CRUD/REST/repeat sandbox that we are often trapped in.
We also need to get non-tech departments to celebrate developers, and not look down on them as some sort of weird geeks (aside: did this happen because of ageism forcing most software developers out early and then being treated as if they were children? I don’t know – happens too much). Business departments do not ever run the company. They perform a function at part of a company, and most frequently, they hawk the innovations that come from the tech side. Giving them exclusive creative control about what gets built and how often limits possibility and imagination. But they can be too far removed from where the magic happens.
When I look back about how I felt about programming in those particular times, and when I was first learning and in college, I thought computers were basically magic. They are. They are basically a way to take an idea and make it real, to try anything.
Computer Science is about having crazy ideas and making them come true. It’s not about venture capitol, 5% performance increases, or JIRA status meetings. So I’d call upon corporate shepherds everywhere to let people embrace their inner hackers – something that I feel, we have made a little too hard to do.
It’s not a hack day every month, though that may help a little, only doing that occasionally usually left me feeling jaded. Every day should feel like a hack day, and a few hours to be creative shouldn’t feel like a patronizing reward for surviving another deathmarch. For the true meaning of being agile is not responding to requirements change, but enabling surprises to come from everywhere – which is, I believe, the true magic we learn from open source software – that we can start things, and by enabling people to propose and do mostly anything – we can never be really sure what things can come.
Software development should be fun, and I think in many places, it stopped being fun, and we may have stopped remembering how fun it used to be. If we remember that – that we are basically wielding focused magic that makes ideas real, and need to dream about more crazy ideas –I think we’ll all be a lot more energized and create much higher levels of awesome.