Evolution of a Dev (Part 4)
My most recent career stop was also my longest. With the collapse of my startup dreams,
I had to find employment back in the real world. I took a position with a local company that wrote Credit Union software in Delphi (basically Pascal). The only Delphi I had ever used was in writing InnoSetup scripts, so I really had no idea what to expect. Thankfully, I found out my first day that:
- They had some server components written in C++, and
- They also had a "web" department, which allegedly did internet stuff.
Rather than summarize what I actually DID during my time there, I'll instead highlight some of the issues I encountered, my attempts to solve their problems, and the ultimate reason for my departure. I won't address the fact they were still using Microsoft's Visual SourceSafe for version control. I think it speaks for itself.
Propietary much?
Ok, so this was rampant. This place seriously suffered from NIV syndrome. First of all, they were still using this really strangely concocted pseudo ORM to abstract SQL. I say strangely concocted because it was not really an ORM, nor was it really a query builder. It was this sort of abomination that made little sense to anyone but the guy who created it (who, coincidentally, gave birth to a few of the other monstosities I'll cover later). About its only redeeming quality was that it was written in C++, so I could almost understand what it was doing.
They also had a sort of network API for communicating with the core system. Problem was, it didn't use any sort of standard mechanism of communication (HTTP, SOAP, XML-RPC, etc). It was this really limited and fragile service that needed constant tweaking to stay in sync with the core, and for which no even semi-standard tools existed for interfacing with it.
Standards? I don't understand.
Then there was the web department. First of all, there wasn't a single employee on staff that had any professional experience developing web apps, yet they were offering, as one of their cornerstone products, an online banking solution. When I joined the team, I joined a converted graphical artist (read: ad designer) and recovering DBA. Seriously. These guys were trying to kludge together a cohesive banking application, in Classic ASP, with no real understanding of web technology. I could immediately tell that almost all the Javascript and CSS was copypasta, and simple things like includes weren't being used anywhere. It was horrible.
But the biggest issue was the apparent distaste for anything Open Source. After I got the current web offerings under control (within reason), I set about finding a more modern environment to start building in. Since they were a self-proclaimed Microsoft Shop (seriously? In the 21st century, how can that still be a thing?), I tried to get ASP.NET MVC to work, but at that time it was just too immature to be viable. I proposed moving to Linux as a platform and Rails as a framework for building the new version of the app. I was immediately labeled a heretic and sent to my room.
Let's do this.
Luckily, being the only person qualified to have an opinion, and based on several conversations I had with the President/CEO (who is actually extremely knowledgeable, and highly respected, it was decided that I be given some leeway to pursue the Rails course.
In the course of this decision, I was given my own department (management again?), and, as far as the rest of the management team was concerned, just enough rope to hang myself. I hired a really good dev, recruited another from within, and even roped in my brother to handle PM stuff.
A short list of the technologies we used:
And these are just the administrative type bits. The stack was typical Rails (MySQL, Memcache, Redis, etc). It was beautiful. We were effecient. TDD worked. In essence, we manged to write >100k lines of production quality code in < 12 months. At the time I turned in my notice, JIRA contained a whopping total of 2 bugs, and 1 of those was actually due to an issue one of our partners had with their web service. Considering, for most of us, it was our first real foray into full-on agile, I'm extremely proud of our accomplishments.
We are not impressed.
So after all of that, you'd think that the powers that be would be overjoyed at the success of the "experiment", right? Well, no. As expected, the status quo is difficult to upset. And we punched it in the face. Most of the management team (the CTO in particular) took even the smallest opportunities to undermine our progress.
However, it wasn't all bad. Quietly, certain other groups within the organization borrowed some of our methods. Educational services started using Camtasia to put together tutorials, instead of putting on giant webinars, multiple times, to explain new features.
The other development teams migrated away from VSS to Subversion, and started implementing unit tests in their code. The manager even tried implementing Scrum (short lived, but A for effort).
Since my departure, I've found that the plan is to dismantle everything we accomplished, and migrate back to VisualSourcesafe, with the original ASP code being migrated to ASP.NET (again, by non-web people). Sigh.
There's always a silver lining
It hasn't been a total loss. I learned a lot about mentoring, and about when to stand your ground. There was a point where I threw down the gauntlet, and could just as easily have been unemployed again. The difference this time was that, unlike before, I never made it personal. I merely let the facts speak for themselves, and offered up my job as collateral. Maybe it was maturity. Or I just liked the people I worked with. Whatever the reason, I tried something, and in my opinion, the record will record it as a success.
I also, however, learned even more about the relationship between development and business. Especially in a product-focused company. Every minute I spend at work has to be financed by someone. If we're not turning a profit on the product, or the time I'm spending won't directly raise the bottom line, I'm wasting both time and money, and that's a no-no. In short, you can experiment all you want, so long as there's a profitable product at the end.
The next chapter
I'm moving on to a new opportunity, but on much unlike my last. As a self-proclaimed skunkworks, I don't expect to be required to justify my actions quite as much, and there probably won't be as many rediculous practices in place that need fixing.
I'm also entering with that "Senior" title I coveted so long ago, but it has a much different meaning for me now. Most of my new team is younger (quite younger), but eager to learn. Mentoring is something I've grown quite fond of. Not because I think I know it all, but because I understand the value of someone helping you learn the right way to approach a problem, which is an intangible that usually takes years of trial and error.
More than anything, I'm excited to be moving into an environment where its mostly about the code, which is where my heart still truly lies.