I disappeared for quite a while there. Distanced, out of it, unfocused, and yes sometimes unresponsive too. I'm sorry. Things just got out of hand. Bear with me; this is likely going to be a long letter. It's not easy to sum up 6+ years of life.
Where I've Been: Tyler Technologies
Tyler Technologies hired me almost exactly six years ago (Feb 22, 2016) to work on Munis, an Enterprise Resource Planning (ERP) system used by schools and local governments around the nation. It's an ancient program that was started back in the 80s (or 70s? earlier?) and is written in an obscure language called Genero (very reminiscent of COBOL). I was a little scared to get back into the workforce after so many years on my own. But I found I liked the language and the pace of work there. For my first two years, I was able to comfortably do the work assigned to me (and then some) while only working about 45 hours a week. More than anything, I liked the people there.
One of the ancillary programs in the Munis suite is an old, behemoth web application called Employee Self-Service. It's an application for people who work at schools and local government offices. It lets them perform actions like looking at their paychecks, requesting time off, entering time (for jobs that track hours), and enrolling in benefits. Another program called Manager Self-Service worked in the same framework, but provided managers with tools to approve time off requests, review time sheet submissions, and manage evaluations and training of employees reporting to them. Another program in the same suite is Applicant Self-Service, which provides an interface for potential employees to review job postings and fill out applications.
The problem is that all three are based on early 2000s technology that has long since been unsupported. People have been keeping it up to date with patches ("baling wire and duct tape" as a former boss used to say), but the fundamental core technologies these applications are based on have serious performance problems in the modern web. The entire suite had to be replaced, and soon.
Enter Employee Access
About four years ago (April 2018), a project proposal was approved for a complete ground-up rewrite of all three applications. Tyler's corporate development team had put together a cloud application platform, and we were going to rewrite the Self-Service applications with modern tech – Angular, .Net Core, Docker, Typescript – and deploy one application to the Tyler cloud platform in Microsoft's Azure cloud environment (which they've since migrated into AWS). But we weren't just going to do this for Munis; no, this was going to be ONE application suite for employees, managers, and applicants... ONE app for client sites regardless of which Tyler ERP system they use (Munis, Infinite Visions, Incode, New World, and Energov... there's maybe another by now... Tyler can't seem to stop buying companies). And, more importantly, ONE app running in the cloud for all the users who will access it, nationwide.
You see, each of the Tyler ERP offerings also has their own version of "Employee Self-Service" to maintain, and they are all dated and need to be replaced. So rather than have all the products take on the task of rewriting their own software, someone had the brilliant idea to rewrite it ONCE and use the same front end not just for the five or six ERP systems, but to have multiple versions of each integrate. We had to design the product from the ground up to provide an API for integrations. We had to lock as many front-end changes as possible behind feature flags, so the integrating products can essentially pick and choose which features they want. And at the same time, we had to create a framework to let them describe their fundamental differences. Examples:
- The first line of an address can hold 65 characters in Munis. That field is only 50 characters in Infinite Visions. Go back a few versions and Munis has the same character limitation.
- Munis has no concept of an "Effective Date" on an Address record, but New World does.
- Some sites need to display four digits of precision for time-related data, while others require two, or three, or six. Settings like this can depend on the union doing the negotiations.
The list of differences goes on and on. Combine all those requirements, and I'm sure you can see this spirals out of control very quick.
I could see on Day One that this project would be the most technically demanding piece of software I've ever worked on. By definition that makes it one of the most interesting as well. So of course I was all-in. I was especially looking forward to learning modern web technologies, and building something to run in the cloud.
While putting together a team for this project, my boss selected me to take on the role of "technical lead." Basically, I would be performing the duties of a Software Architect (but without the paycheck of one, ugh).
For the past 4+ years I've been making technical decisions, mostly regarding the architecture of how this program would be constructed for the cloud environment. I've been solving the hardest problems, coordinating with several other teams across all of Tyler, and overseeing the work of the other engineers on the project. But I don't want to give the impression that I've done all this single-handedly. In fact, I've had the pleasure of working closely with quite a few excellent engineers while in this position. But after four years, and being the only remaining original team member, I think it's safe to say that the overall design and implementation is mostly my work. I've presented this work to Senior Architects and tech leads at both Tyler and Amazon; all of whom have approved of what we've designed and built.
At the height of the project, I was in charge of seven engineers – mentoring, guiding, code-reviewing, and even pair-programming when necessary. Recently that number has dwindled to two engineers, mostly because we're finally "done" with the initial development and starting to enter the maintenance phase of the project. But those two engineers moved on to other projects a few months ago, and were replaced by four engineers – two of whom are new to Tyler, and two who have been here a while but are new to modern web tech.
Which means that not only do I have all my usual work, I was also the primary point of contact for technical issues during the impending roll-out of the software, and also required to train four people. Talented engineers, for sure, and really nice people. But they have a lot to learn and the learning curve for modern cloud apps is steep.
The End Result
It gets worse.
During those four years, two other similar projects – Vendor Self-Service (now called Vendor Access, for businesses selling products and services to schools/governments) and Citizen Self-Service (now called Resident Access, for residents in those districts to do things like pay real estate taxes) – were started and completed.
Both projects were at least initially based on code I wrote, tech I created, and recommendations I made to the teams developing them. Even combined, their two products don't hold a candle to the scope of what I was working on. But those projects got to cut their projected development time at least in half (an unconfirmed but logical projection number I heard a few years back) because I and my team had already designed and built the infrastructure. We paved the road, so to speak. We were there to assist with every aspect of their development, which meant that I was also answering questions, troubleshooting, diagnosing, and even mentoring some of their engineers as well.
After four years in development, "Employee Access" is finally ready for the prime time. Here's a preview from last June, with a short video:
Here are some more recent posts about the product:
Despite the "coming soon" narrative, this software has been deployed and in use for over a year now.
Our first integrating system (Infinite Visions, which primarily deals with schools) has about 200 client sites online right now, with thousands of users. Incode has integrated with us and is starting to go live with our applicant / job board offering. Munis has integrated several versions with us and is preparing to go live in the next few weeks, and to start bringing their 6,000 or so client sites online. We're on track to have over 2,000 client sites (last number I heard) using this software by the end of the year. Within the next few months, we'll likely exceed one million people using this software every month. One application – one version – integrated with about twelve total versions of three ERP systems... with another ERP system (New World, based in Troy MI) scheduled to start integrating with us later in 2022.
So, Sorry, I've Been Busy...
So I'm sorry, especially to those who have tried to keep in touch during all this. Please don't take it as dismissive when I say "I've been busy"... because I've been working about 60 to 100 hours a week for 4+ years now. I've been answering emails and Slack messages at all hours. Sleeping very little. Sometimes an hour a day. Occasionally as many as four. Coding early in the morning, and late at night. Waking twenty minutes into a rem cycle because my dream-self solved a problem and I felt compelled to record that solution. I've been working 12 to 20 hours a day, 5 to 7 days a week, for over 4 years.
My indie author bio sums it up perfectly:
In short, Jamie is a workaholic who is rarely more than two days away from having a meaningful conversation with his toaster.
In retrospect, yeah, working a schedule like that is brutal. I occasionally joked in meetings that this project had "blurred into one continuous beating," but I was really only half-joking. I tend to get tunnel-vision and hyper-focused on what I'm doing.
But if I hadn't done that, there's no way this project would have finished on time. There's no way we would have hit any of our deadlines. And we did – we hit all of our deadlines. In fact, I have never missed a deadline in my life. In school, in my professional career, in my freelance jobs. Every deadline. Every time. Somehow, some way, I push myself to the completion line, and sometimes beyond it. Even when I get roped into someone else's deadline, I manage to push myself hard enough to hit those too. That's not to say I've never failed at something; just that when given a deadline (regardless of how insane or arbitrary it was) I've always reached the goal.
Ultimately that's the problem: my work ethic is insane. Combine that with the insane pace of modern cloud-native development and it's a recipe for personal disaster. If given the chance, I will literally work myself to death. At least, that's what my toaster said the other day. 😜️
I certainly don't mean to diminish the contributions of those on my team; in truth, my contributions were mostly behind the scenes, on the infrastructure and architecture of the program, and as a supporter of their roles – the designated troubleshooter, de-blocker, and tool-builder who ensured they could do their assigned work. Many of their contributions were on the surface – building the pages, and the features, and the pretty charts, and responsive interface – but in no way is that to mean their contributions were lesser than mine.
You can't have a good app without a good interface, and a good interface means nothing if it's slapped onto crappy plumbing.
I also got to work with some very talented project managers, user-interface designers, and quite a few very knowledgeable people from product analysis, support, and integrations. All iterations of the Project Avalon / Tyler Employee Self-Service (TESS) / Tyler Employee Services Portal (TESP) / Employee Access team were great. I truly have been honored to work with such amazing people over these past four years.
Am I exhausted? Yes. Physically and mentally and emotionally.
Did I hope to be compensated with a promotion and nice raise? Yes.
Did I expect that? Honestly, no. Tyler is kind of cheap (unless they're buying a company).
So why did I go through all that? Um... I'm a dumbass? Honestly, I think it's because they presented me with a chance to build a new product from scratch – one I could foresee would be the most challenging undertaking of my career (so far). The technical hurdles and learning curve both inspired me to push myself to achieve something great.
Like I've always said to my nieces and nephews:
If you do good work, you will be rewarded... with more work...
And in that respect, yes, I was rewarded in spades.
So... What Happened?
After putting up with that pace for four years, I finally hit a point where I had the proverbial holy grail within my reach:
I'm the key person on this project.
Tyler can't afford to lose me.
And that wasn't by design – I've been trying to teach the engineers on my team what I do precisely because I don't want to be such a key person. It's a lot of stress. But every engineer who worked with me on the most difficult parts has either quit Tyler, got promoted to another position on another team, or were reassigned. So I was once again in a position where nobody else understands the deepest bits of code. Since the other two projects basically cloned our infrastructure, that means the entire suite of "Community Access" programs depend on my knowledge and ability whenever something goes wrong. And things do go wrong, occasionally, because there are so many moving pieces and technologies, and because I'm human and make mistakes (despite the overwhelming evidence that I may be a robot).
Aside: I used a robot's image everywhere at Tyler, and was mostly known for using Claptrap from the Borderlands game series. I first used a robot as my icon in Jira just before a team meeting. Someone asked who the robot was, and I said it was me. My boss responded, "That's appropriate"... and this combined with my stellar work output started the assumption that I might just be a robot.
That puts me in a position of great power. As the last-man-standing, I'm the only one who can do what I do. As the only experienced engineer left on the team, I'm the only one who can train the new engineers. I'm the only one who can diagnose any issues that come up, and deal with support, and coordinate with engineers on the ERP system side. I have a lot of difficult work assigned to me, and on any given day I'm having conversations with at least a dozen people in multiple divisions from all around the country. Somehow I manage to help all these people and still check in well-tested, completed code in a quantity you'd expect from three engineers.
Of course that also puts a lot of pressure on me. And I was already at the point of breaking.
But, yeah, holy grail time. The absolute perfect conditions to ask for a meaningful raise.
All Or Nothing
So I looked at all the events that lined up, and then I looked at my salary. I don't want to get into any specific numbers here, but what I saw upset me. I spent about ten minutes doing research and got even more upset. Then I thought about my position and realized that the situation was even worse. I had the title of Lead Software Engineer, but was performing the duties of a Software Architect, a position that is two ranks higher. Factor that in and my pay was even worse than my initial research revealed. And the more I thought about this, and what was going on inside the company, the more I realized that my personal compensation was just the tip of the iceberg. I was unhappy with several other aspects of Tyler.
So I threw down a literal double-or-nothing gauntlet. That sounds bad on the surface, but they were paying me half what every salary survey site on the net said I should be earning. I asked for a promotion / title change too, to reflect my actual job duties. They said no to that part quickly due to what sounded to me like political reasons (a limited number of Architect positions, and you need a certain level of manager).
At first I shrugged that off because it wasn't all that important. Everyone knew what I was doing. The title was just a formality. But that refusal also made me realize that my entire career was stalled – I was too valuable to promote, too important to lose, and I'd be working on (and supporting) Employee Access for years. Sure, maybe I'd occasionally get even more work to help advise and guide newer projects, but I'd never be able to move up the corporate ladder. I was stuck.
Then I got a response on my request for a salary correction, and that was decidedly negative as well. They didn't even have any interest in using that as a starting point for a negotiation. Zero discussion of alternative forms of compensation. Just a flat-out no.
So I quit.
Well, technically I resigned because I'm a professional and responsible person.
No other job lined up. No backup plan.
I filed my two-weeks notice and my last day was Friday March 11th.
Truly A Great Resignation
Then something strange happened. Once I finally made the decision and submitted my resignation to my boss, I had this complete Zen moment.
Once I had taken the very scary step of writing and submitting a resignation letter, several things became very clear. And what I saw actually frightened me even more: all the parts of me that had gone neglected for years.
I have 783 tasks on my personal TODO list. I'm not even going to count the sub-tasks. Must be thousands. I have about 18 first drafts of novels, plus a bunch of stories, all of which I wrote years ago but have not had the time or wherewithal to focus on.
Over the years, I have also sketched out tons of ideas for games and applications that I want to create. I used to love dabbling in photography, but I have barely touched my camera in half a decade. Last year I started playing with the Godot game engine, and liked it, but sort of wandered off. Ditto for the Campaign Cartographer program that I know will let me finally create nice maps of my fantasy world. There's songs I've partially written, and short films I've scripted but haven't figured out how to actually film yet. Applications and websites I intend to create because I can't find existing ones that meet my expectations. Heck I even have a few businesses I would love to start.
I'm a very creative person. Or, rather, I used to be.
If nothing else, this experience with Tyler Tech has forced me to come to the realization that I want to be that creative person again. It's kind of funny to see all these articles about the Great Resignation, and then to join it without even realizing I was doing so.
At this point I really don't know my next steps. I doubt I'll have trouble finding another full time position. But I know myself all too well. I'll just end up in the same place: overworked, stressed, and burned out. My original gripes about compensation at Tyler Tech should be trivial to solve. I get a few unsolicited messages a week from recruiters who often quote huge salary numbers. I can take any one of those jobs, and then I'll have more numbers in my bank account. Yay? What the hell is the point?
If I'm talking purely about personal happiness, then working on my own projects full-time is the right choice... but that comes with almost no numbers, and we all need those numbers to pay bills. Ugh. Whether I'm earning exactly what I need, or double, triple, or more is ultimately irrelevant. My original argument over salary was, in retrospect, just the logical part of me looking out for my future self. The more I earn now, the less I have to work later... as long as my work ethic doesn't literally kill me first, I will eventually get the time to focus on what I really want to do in life.
It's a common problem in our society that people are just now starting to see: you work your butt off for 50 years so you can kick back and relax for your final 10-20. Don't question the narrative. It doesn't matter that you'll likely be dealing with health issues, and certainly won't have the physical or mental energy you once had. What idiot thought that was logical or fair? And why the hell do we accept it?
While attempting to correct my salary, I've managed to put myself in a position where I have no income. I know that should scare the heck out of me... but it doesn't. I've been down this path before. I'm a Scorpio, and when us Scorpios see something wrong or unfair in our lives, we see nothing wrong with burning that thing to cinders. We know that we'll rise from the ashes, like a phoenix, and that we will somehow manage to win in the end.
For now, I just need to dump the stress of the last four years. Focus on myself. Get back into exercising regularly. Meditate. Go on a trip with my camera. Write something. Publish something. Honestly I don't even know the last time I actually talked to one of my friends. That's gone way past the awkward stage. It's all too easy to get sucked into a company's mono-culture and let everything else fall to the wayside.
Next thing you know, six years have gone by, and you realize that you weren't really living at all – you were merely existing. I've talked about that distinction before. Creating and sharing something is scary. Doesn't matter if it's a book, a film, a song, or a blog post. Putting your creation into the world and sharing some part of your soul with others is frightening. Will they appreciate what you've made? Will they understand it? Fear of their response is at least part of why it makes me feel so alive.
I really want to feel alive again.
I can figure out my next career / financial move later.