When we last left our hero (me), he was basking in the wonderment that is pure software development. "I wanna go do this fo realz!" So I set about finding a new job, one that would allow me to throw off the shackles of ops and focus solely on writing code.
Luckily for me, I didn't have to spend very long looking. All it took was moving 300 miles away from everything I had ever known, with a wife and our 2 children in tow. An easy decision for me, and since I'm a pretty good salesman as well, they followed with little resistance.
I accepted a position as an RPG IV programmer (because that's still where my only real professional experience lie) and learned what it meant to do real programming work for a real product that was to be purchased by real customers. And I hated it. It was boring.
Well, that's not entirely fair. Some of the problems we had to solve were quite complex, and the solutions were sometimes ingenious. But all in all, it wasn't quite as fulfilling as I had hoped. In hindsight, however, this was a good thing. I was getting paid to write code. While it might not have been exactly what I had expected, it was still better than any of the alternative means of supporting myself I could think of. Major lesson: every programming session isn't a rock-star moment.
On the brighter side, I discovered that I was actually pretty good at it. In some ways, I was slightly better than the others, who were in some cases twice my age. This is where I started to lose some humility, which again, might sound like a bad thing, but will come into play later on.
There was also a group within the shop devoted to PC and mobile device development. No, we're not talking iPad's and smartphones here. This was old-school 5250 emulation on warehouse barcode scanners. We're talking C, Java, and TCL. I love C. I mean, I love it. I hear people say you should use the best tool for the job, but I still think that, from a puritanical point of view, C is that tool. For every job. But I digress.
I befriended the manager of PC development and he sort of took me under his wing. I say sort of, because he was a windows guy, and I was predominantly Linux. So there was a bit of a language barrier of sorts (ipconfig vs. ifconfig, etc). Nevertheless, he introduced me to real-world development of complex systems using software. The term he used was "architecture", and I've been obsessed with it ever since.
When he decided to move on, I was offered his position as manager. Given I had little humility (see above), I obviously accepted. I figured I was the best dev in the shop, regardless of the platform or language. No big deal.
Boy, was I wrong. Managing developers and being a developer almost require entirely different skillsets. I was not horrible at the job, per se, but I did realize it was an either/or proposition. Either I was one of them, or I was above them. You can't be both. Anyone who has tried to make that transition knows what I mean.
Then there was the administration side of things. Interfacing with upper management was extremely frustrating, because they didn't care about the code, only the bottom line. Results, no matter how much had to be sacrificed, were all that mattered. I found myself agreeing to things as a manager that my developer side would have given the middle finger to.
Over time, I started to realize that it wasn't quite as bad as my naive self wanted to believe. Business pays the bills. Paying customers allow us devs to do the things we love, even if there are limits. I'd say this was when I entered my teenage years as a budding software engineer. Next time, I hop on the startup train, and experience development in its purest form.