The Year of the Struggle

For those who know me outside of the context of my ranty tweets and occasionally-lucid blog posts you will know that I am an avid simulation baseball game player. I'm about to start my 15th season in my current league and it has taught me a great many lessons about myself and the importance of having a set of skills that turn independent bits into a cohesive team.

(If you care the league uses a game that it creates itself using freely-available data from Retrosheet and if you've ever come across Strat-O-Matic-Baseball you might have an idea of how game-play works)

I've had middling success in that league: some really crappy seasons where I clearly did not know what I was doing along with making the playoffs 3 years out of 4 complete with a trip to our league champsionship series. Many times I've had teams where the skills of the players (who are merely statistical representations within the confines of the game rules) simply aren't a good fit.

If you have lots of power, a good bullpen, but guys who don't get on-base you will find yourself winning by a lot or losing by a lot because power comes and goes. If you have great pitching but a bad offense (similar to what I have for our upcoming 2012 season) then you will find yourself in many close games but you will probably lose more of them than you win because your offense will be unable to come through when needed.

I've also learned that I am a decent field manager (in terms of playing the games and understanding strategies), lousy at evaluating hitters in our draft (my past 4 first-round picks have been hitters who have been injured and/or underachieved), great at evaluating pitchers, and very impatient in the trade market when trying to improve my team.

I went through a terrible season last year due to a combination of bad luck and impatience in making trades to keep a fringe playoff contender in the playoff hunt in 2010, then crashing to lose almost 120 games in 2011. So I struggle to find ways to build a better team, and better identify the combination of skills I need for my team to achieve success.

So what does all this have to do with programming? I feel that my current set of skills are a terrible match for today's programming environment and it's making me feel a set of emotions I thought I ditched when I left high school: jealousy, fear, angst and regret.

I've always prided myself in thinking that I have spotted trends in programming before everyone else. I first saw the value of frameworks in 2003-2004. About the same time I discovered SimpleTest and thought that it would be a very valuable tool. It's almost 2012 and I still feel the same way, but I feel like the programming community I belong to still doesn't give a shit.

In February of this year I jumped on an opportunity to work with some people I respect in the PHP community and joined Moontoast. It had been a while since I had done the startup thing and thought it would be a good change for me. At my previous employer I had to do everything myself for my projects and I looked at Moontoast as an opportunity to work with a team again.

Instead I struggled. Struggled to cope with two applications written using heavily-modified versions of two frameworks. Struggled to understand the business that relied on these applications. Struggled with the idea that the things I felt really, REALLY mattered simply don't matter to the business as a whole. It's not a lie when I say it hurt. Hurt a lot to miss deadlines and let down team members. Hurt a lot to struggle to make things like automated testing and simpler product development FUCKING WORK and not achieve anything. Struggled while wondering if I was getting honest feedback from fellow employees who might not want to really say what they feel because they are not an asshole like I often am.

On top of that, I felt like the volume of tweets and blog posts I cranked out achieved nothing that I could hang my hat on and make my ego stop screaming at me in my head. I still care immensely about best practices, automation, and building applications that can be easily tested. All too often I feel like I am the only one who wants it so bad I pound my fists on my desk like a little boy having a fucking temper tantrum.

The feedback loop I want just isn't there any more. Perhaps my troll-like existence in my home office is wearing me down and making it more difficult for me to actually get along with people. My ego is getting in the way of success in a team setting and I am struggling to find a way to figure out how to change things for the better.

PHP is the tool I've been using pretty much non-stop since 1998. It won the web battle. It really did. But things are changing and expectations are changing amongst the next wave of programmers. Elegance in code matters. Ability to support concurrency at the code level matters. Perhaps it shouldn't but it does. I think of all the investment I've made in PHP and I find myself constantly asking the question "did you do the right thing?"

I have found that the PHP community is very supportive of me and my ideas, so I'm probably not as terrible a person as I make myself out to be. But the PHP community as a whole really seems to think that much of the stuff I consider to be important is just a waste of time, getting in the way of getting things done so you can go home after work.

The crowd I follow online is a self-selecting one. Most of them care about the same things (except there are those who disagree with me on the importance of automated testing as a critical part of development) but what about those who aren't there? How many of them give a shit about clear, concise code? How many of them have actually created an application for their employer that had a complete testing suite (in 14 years I've been able to do that ONCE) for it? How many of them have automated their deployments as a result of a merge of code in their version control system?

It's more likely that I am being selfish and demanding recognition for the things I've done and don't really deserve that recognition. I joke with my wife that I am a "big deal on the Internet" and #internetfamous on Twitter, but am I really? Or am I just loud and repeat myself over and over again. Am I just being tolerated or are there people for whom my thoughts are resonating and they are going out and kicking ass in a way I have been unable to?

Maybe this old saying is true: those who can, do, and those who can't, teach.

2011 was the year of the struggle for me. I don't want 2012 to be like that but I am not sure how because I'm scared that I'm becoming useless and irrelevant and that the things I am passionate about have no place in the modern PHP community, the only one I've ever really been a part of.

Hope you have a good 2012. I'll be here, struggling.