I was about to change the name of my blog to “Diary of a Mad programmer” after venting to my buddy this morning about my many frustrations. Yes, I’m frustrated. I’m angry, annoyed.
“Tell ’em why you mad son…” I… I… I’ma tell you why I’m mad, dog! I got Jon-blaze programs and they just ain’t rekognizing…! I’ve been coding a long time and I know the in and out’s. That legacy system the we’re replacing, it’s aight. I mean, you got your order entry, inventory management and all. But my stuff is more Jon Blaze than that! I’ma calm down, though cuz it’s aight…
(The above is a parody from the old Notorious B.I.G. interlude with the Mad Rapper, if your confused.)
I love my job and my co-workers. I appreciate my boss too even as he is the source of my frustration. He’s done nothing wrong. He took a bum like me from the street and employed me adequately. He allows me to innovate like crazy. He even supports the majority of my failing hair brained ideas. (That’s why I respect him so much.) So how could he be the source of my frustration? The disjoint comes from two diffeerent vantage points on the same project. He’s down looking from up high while I’m staring upwards from down low. He’s got the classic management horizon scope of the ocean while I’m looking out from under water. That’s where we clash. More specifically, he sees the project as a necessary complex piece of software where I see the project as an unecessarily complex piece of software. When I come up with one of my stoopid ideas like storing Java objects in the database each of which knows how to upgrade the schema from the version prior to the one it was assigned then that sounds like innovation. It involves more code, more complexity, more of what is percieved to bring value to our project. However when I strive to reduce the number of integration points to something as complicated as our order entry EJB or pricing entity manager bean he seems to be totally against it. (That statement is slightly unfair, only slightly.)
In my unknowingness (can I get away with such an absurd term as unknowingness? It’s my site so I guess so!) I’ve contributed to a complicated mess that I now want to completely refactor. When I started I had no idea how important certain agile practices were, or how important simplifying code was. Now that I’m making the turn around the vehicle is moving too fast to change direction. I’m at the point where everything I do for simplification must either be undone to integrate with the project or require a huge refactoring of a major piece of the project. Without getting “the man” on board it feels like all of my efforts are in vain. Getting “the man” on board is akin to fighting City Hall. Years of preconceived ideas about the best development practices coupled with our no-doubt-complicated legacy cash-cow system that he initially created have hardened “the man” against any idea that the average agilist would promote. Now I’m in the thick of a report that must log into the system and actually start an order (via RMI/EJB) in order to determine the price of products. My prestine XSLT stylesheet that has served even the most complicated report in the system will cough up a hairball when it see the light of the latest layout that “the man” has dreamt up for this beast of a report. Yes I must do the unthinkable, put a report specific hack into my general purpose stylesheet which has remained thus far clean of such debris.
On top of all of that, I don’t even think I’m practicing best practices in the best way. Isn’t that funny? These are the best practices that I could find and I’m not the best at practicing them. In many areas I question if I’m practicing them at all! I mean, I’ve got a good chunk of code managed as individual Maven2 prjects, I’m using TDD and intentional programming, trying to separate data acess from business logic using th DAO pattern, organizing my business objects in a package separate from my general purpose utility objects which are separate from the silly framework code we all get bogged down in. How the Hell could I be wrong? I’ve also managed to desing an insulation tier separating the DAOs from the fact that JDBC is being used at all narrowing their job to asking questions (queries) of a data store (data source) and mapping the results to POJOs. Still I have many problems. I somehow got myself into a corner where some DAOs depend on other DAOs. I backed myself into a test and an implementation that’s littered with generics syntax sugar and looks more like a framework than a practice removing framework code from the business logic.
It’s during these times that I feel out of control, helpless. As a professional I’m supposed to have the answers but my answers only seem to turn up more questions than they solve. Regressing to the typical dated practices of yester-year appear to hold a huge advantage to the complexity that I’ve added in only the past 7-8 days. That’s why I’m mad!