TLDR; I just quit my first “corporate” programming job last week, after working there for about six months and I regret nothing. They responded to me bringing up issues with our process, and providing potential solutions (something they'd asked me to do) by making one of my goals for next quarter “be a good teammate” a.k.a. “Sit down, shut up, and just do the tasks we assign to you.” This is a long and rambling tale, and it is mostly just me venting so I don't blame you if you want to bow out now, but if you're looking for a tale of corporate incompetence, or want to avoid the mistakes made read on for the full sordid tale of how I was hired, misled, insulted and then left my first corporate programming job after 6 months.
So a little background on me before I get into the meat of the story. I'm a full stack web developer, mostly focused on JavaScript, but I can also hack things together in Ruby, PHP, or Python if it's called for. I've been programming professionally for about 5 years now, but until recently I'd never worked for an actual web dev company (still haven't but we'll get to that). I learned to program through one of these “web dev bootcamps” that trains you up with just enough knowledge to get a job, and be a productive junior developer. I freelanced for a bit after that, and then the same bootcamp I graduated from hired me on as an instructor. That job was not without it's difficulties, but I was the first non-founder hired in, and ultimately I enjoyed the work and felt like I was making a difference in peoples lives. After 3 years there, working 50-60hrs a week, and rarely getting time off (I was the only instructor, and also responsible for maintaining and developing our curriculum and LMS) I was completely burned out and with a perfect storm of shady business moves, and an absolute refusal to give me equity in the company (which had been promised verbally when I was hired, and then every few months after for years, but never put into writing) I left.
There were a couple very valuable skills I picked up while working as an instructor which will be relevant later. I'm very good at explaining technical concepts to non-technical people. I'm really good at debugging, and reading other people's code. Also for the last 4 weeks of the 12 week bootcamp the students would work on actual projects for real clients which I would act as the project manager for. Because of this I also did some training in Agile methodology and project management.
Almost immediately after I quit my instructor job one of my former students reached out to let me know his company was hiring for a backend developer, and to see if I was interested. It was too convenient not to jump on, and I then went through one of the least painful hiring processes I've ever been a part of, so even though I wasn't feeling fully recuperated, and the salary was ~15-20k lower than industry standard (it was still 20k more than I had been making) I accepted the offer without too much thought. This was my first mistake. They were obviously desperate, and I shouldn't have undervalued myself, and should have asked a lot more questions about the role. Now there are a couple things about this company I was a little worried about and did ask about. They are a platinum tier Hubspot partner, and I hate templating systems so I asked if most of the work I would be doing would be primarily in Hubspot. They told me I might have to do some Hubspot work, but as the backend developer I'd mostly be setting up servers outside of Hubspot to handle the functionality that Hubspot can't. This was a lie. They were 100% Hubspot based and weren't actually a software company. I would quickly learn that they were primarily a design and marketing agency that dabbled (incompetently) in web dev.
I was also worried about being the only backend dev they would have, and the first backend dev they'd ever hire. It's worth noting that while I was the only backend dev they had I was not hired as a senior dev, and had the same title/payscale as their frontend “devs” (in quotes because half of them I would say are not real devs, since they barely know HTML/CSS, and don't know JS). The CEO of the company assured me that he had some backend programming experience, and could help if I got stuck. He would later confide in me (when I reached out for help) that he didn't even know JavaScript, and had learned PHP about a decade ago and hadn't used it since. Not ideal.
At this point I made a pretty critical mistake. They were all so nice, and the application process was so easy (I didn't even have to do a coding test! Which in hindsight should have been a red flag) that I stopped asking questions, and I didn't ask about what their development/project management process looks like. I mean why would I ask about that? They're a software company, surely they use some agile techniques! They did not. It was 100% waterfall process.
If you know the difference between agile and waterfall processes feel free to skip this paragraph it's just explaining the difference between the two. For those who aren't in the software (or software adjacent fields) agile methodology focuses on integrated teams, communication, and iterative problem solving. There are many different agile techniques/frameworks which companies will often mix and match to create the processes that work best for their teams, and it is by far the best way to manage software projects. Waterfall has separate teams based on role, and tasks are passed from one team to the next under strict deadlines. e.g. You'd have the dev team, the design team, and the marketing team. Marketing promises the client a whole bunch of features, design creates mockups that represent what those features look like, and then toss the designs over to dev to actually build, and make work. This seems okay on paper but doesn't work very well in a real world setting since the deadlines are set by marketing who are farthest away from the actual work, and usually have absolutely no clue how difficult something will be, or if it's even possible (software is weird) which leads to very stressed out overworked developers.
I did set forth a few boundaries with them. I let them know that overtime would be the exception to the rule. I was looking to put in a cool 40hrs/week of work and not a second more. Their continuing education stipend was important to me (I'd always asked for one as an instructor and there was never room in the budget so I was ecstatic it was part of the package), and I wanted to make sure I'd have time during the week to actually use it for professional development. I also did not know Hubspot at all, so wouldn't be able to help out with a lot of the front end stuff. They agreed that this was all reasonable, and since I had experience as an instructor, and a lot (at least double) more experience than any of the other devs they also asked me to identify weaknesses in their processes and provide solutions. They also let me know that I was coming in at a particularly hectic time but they'd keep everything off my plate for the first couple of weeks so I could get familiar with their processes and learn some Hubspot stuff.
3 hrs into my first day I'd been assigned to 3 different projects, and was tasked with ~45hrs worth of work with no onboarding for any of the projects, and no training. One of the tasks was to create a Chrome extension to track time on Hubspot tickets, and the other two projects were all front end Hubspot work. I should have quit at this point, but figured “fuck it, I'll give it a shot” and got to work. I was able to get the Chrome extension up and running that day which earned me a bit of a “rockstar” status, and another 2 projects added to my plate the next day. At this point it's my second day at the job, I told them I wouldn't be working overtime not even a week ago and I've already got >50hrs worth of tasks assigned not including meetings, trainings, or helping other devs debug their JS. I reached out to my supervisor at this point, she agreed it was ridiculous and took me off of all but 2 of the projects. (remember how I wasn't supposed to have any projects for the first 2 weeks? I did, but they apparently forgot about that less than 24hrs after saying it…)
Over the next 4 months I would become the go to guy for help debugging things, and I got really good at front end Hubspot stuff because 90% of my work was front end Hubspot work (despite being their only backend developer), and was being assigned 50-70hrs of dev tasks in addition to meetings (average 6hrs a week) and debugging (average 5hrs a week, 10 before I told the other devs I really needed to start focusing on my own tasks). Now I feel it is worth noting that these tasks didn't take me that long, so I was still only working 40hrs a week, but the fact that they kept piling on the tasks (and front end tasks at that!) was starting to really get on my nerves.
During this time period I did also identify the main weakness of our current process. No one was talking to each other, because it was a completely top down, waterfall process! So I reported to my manager every week for months that the way we were handling these projects was unsustainable. I provided resources for how we could improve things, which all basically boiled down to “waterfall sucks, use agile techniques, and actually train your PMs so they know how to manage a project, or at least know what I mean when I say I want the 'acceptance criteria' for a task.” Remember how before this I was an instructor, and I'm actually a certified agile coach (Kanban, and XP if anyone's wondering)? I had a lot of resources to share, so I gave them new articles, courses, and sites they could look into every week. I also suggested that we maybe start onboarding devs when they get assigned to a new project rather than just throwing tasks at them (which were often things like “Update properties” with no further context) so they actually know what they're supposed to build. During this interim I learned that the CEO “doesn't believe in Agile, but I'll see what I can do” and “the project management team is going through process changes so we have to be patient and understanding with them.” Mother FUCKER the PM team is assigning me 60-80hrs of work a week (after meetings, and support time) and I have to be understanding of them! Also those process changes can't have been that drastic since the process didn't change at all (as far as the Dev team was concerned) for my entire time there.
And then I get the crap icing on this shit cake: my quarterly review. I was assigned 3 goals for the next quarter:
- Track 40hrs per week in our ticketing system. Seems reasonable until you realize our ticketing system only tracks billable hours for our clients on tasks, so if I'm tracking 40hrs, I'm working 50+.
- Get an additional backend certification of your choice. Totally reasonable if they give me time to actually take a course to get the certification (never going to happen)
- And the kicker that almost caused me to quit on the spot “Be a good teammate.” Just those 4 words, no specifics
Now I did not quit on the spot, because this company offered great benefits, so I got them to pay for part of my ski pass (health and wellness stipend), upgrade my computer setup (work from home stipend), and foot the bill for some typescript courses (continuing education stipend). Once those had all been approved and gone through (a little over a month later) I put in my 2 weeks notice. During my exit interview with HR I let them know how absolutely ridiculous their quarterly goals were, and that “be a good teammate” is incredibly passive aggressive, and straight up offensive, especially to someone who has become the de-facto senior dev/QC department (we didn't have any official QA/QC testers) for the entire dev team (all 6 of us). It's how you would talk to a misbehaving child, and it implies that I'm not a good teammate for pointing out the flaws in their system (something they asked me to do) and asking questions when I don't get enough information on my tasks (also something I was asked to do) even though I'm going out of my way to help the rest of the dev team (not an assigned task, or anything that was asked of me, but instructor habits die hard). It's not my fault the PMs don't know what they're doing. I gave them links to resources, and courses that could have helped, and asked very direct questions when I needed more information, but c'est la vi. If that makes me a bad teammate I'm happy to leave so they can find someone who won't ask questions.
After submitting my 2 weeks I had a <50hr week for the first time since being hired almost 6 months prior. They all of a sudden realized they needed me to stop doing front end work, and start doing backend work (like I was originally hired to do) since no one else at the company knew how to do those tasks. They managed to hire a new "backend" dev a couple days before I left, and instead of having me do a proper handoff they scheduled a ~1/2hr meeting between me and him to give him a quick rundown on all the servers I'd setup, what difficulties he'll run into with Hubspot (a lot, it's a great system for marketing/design, and a steaming pile of shit when it comes to backend programming, or any serious front end dev work). I spent the last day at the company ignoring all the tasks I was assigned and writing as much documentation as I could for him. Good luck buddy!
There were also a lot of just vaguely annoying things that they'd do at this company such as
- quarterly awards with prizes most of which would go to marketing, with a couple going to managers
- “we're like a family” mentality
- managers “forgetting” to schedule check in meetings, or follow up on tasks
- no code review, ever
- each developer usually tackling 5-6 projects simultaneously
-
and many more
Should I have left in the first week? Yes. Should I have waited longer between my last job and jumping back into the workforce? Also yes. Do I regret leaving the company? Not even slightly. I've got a bit saved up, and am going to take the next couple months to work on some personal projects, and just relax before the unfortunate necessity of “I need money to survive” forces me to start looking for jobs again.
For the employers out there, treat your workers as the professionals they are, have them do the job you hired them to do, listen to their feedback (especially when you asked for it), and remember overtime should only be necessary once in a blue moon, especially for salaried employees. For my fellow workers, good luck, may you always get what you're worth, and if an employer has you doing something different than what you were hired to do just leave (but if they do have benefits, use as many as you can before you go). It's not worth it.