Imagine this scenario: the night before you launch your app your team finds a blocker on the site’s checkout flow. They can’t continue to the next page because of a CORS error. I was an iOS developer; I did some backend and I wrote HTML code as teen but I had no clue how to tackle a browser-side issue like that. Our intirim VP of Engineering coded the web portal and should’ve been there to take care of it but he flew out on vacation with his fiancé that week. He booked the trip in advance and we were supposed to launch back in July, but of course you can’t roll out a brand-new ecommerce platform in three months, and somehow we OK’d moving the launch date to when he was away. We couldn’t delay the launch again because we had a Wired article say the app would be out tomorrow.
Scrambling to find someone well-versed in Node.js (this was five years ago, before Node ramped up in adoption), we eventually pulled in a dev half-tipsy from a tech meetup. Instead of putting out the tech fire we argued about whether we should host the website on Heroku or our own servers and why an HTTP response would say
Cannot GET /. (Dude, it’s the root path of an API, it’s not supposed to return anything.) We thought we could fix things by pointing the production servers to the staging database and vice-versa, and by some miracle the CORS error disappeared. Our CEO Ellen satisfied, I took an Uber home at midnight (apologies to the lady we almost ran over), and I broke the website from home after increasing the number of Heroku dynos to handle the morning’s web traffic.
Our VP had to rewire the website from a castle in Germany a couple of hours later.
The biggest quality I had at my previous position wasn’t my intelligence – recent whiteboarding interviews could be used as evidence to the contrary – nor my “eye for product” as Ellen would attest, but rather my tolerance for BS. Tolerance for nigh-impossible deadlines. Tolerance for constant tech fires. Tolerance for not being able to go back and fix glaring problems in our app. Tolerance for not being listened to when bringing up the possibility that things weren’t working out for the team.
When my startup was acquired by a big-name retail company in 2015, I knew that one of our keys to future success was to start building up a world-class engineering team. Instead we were given a Rails engineer who was more interested in talking about chatbots (not developing them, but speaking about them in conferences), and our parent company’s other subsidiary made us hire him since he would operate from their office in Vancouver. We also struck a deal with a dev shop in Pakistan, and while they were great people they weren’t equipped to handle our messy and volatile platform. It was always awkward “mentoring” their developers since they were technically not our employees, they were located nine time zones aways, and they would be shipped off to a Fullbright program a year later anyway.
Our parent company was able to breathe in life for another three or four years, but it didn’t amount to much in the end. The startup went through several pivots, each with varying levels of success, but never enough to transform into a self-sustaining business. The strategy shifted to doing what we can to convince the higher-ups to give us the resources necessary to build a product users actually want. We thought our relationship with our parent company improved when we created a logo creation tool for them, but then the team got caught in a corporate restructuring and we were forced to close business at the beginning of this year.
When the team said their farewells, Ellen likened us to a collection of parked Ferraris a billionaire refused to show off. She knew our potential, but our parent company didn’t know what to do with us. Many of our initiatives were stuck in development hell, and the ones that did cross the finish line were missing the marketing power needed to draw an audience in. Management took a hands-off approach, which provided some benefits, but when time came to end our relationship we departed to little fanfare.
As much as I loved my previous team it was in our best interest to part ways and find opportunities that were better fits for us. After a lengthy job search, I ended up landing a position at a large marketing and PR company. Their web product is profitable, meaning there’s no pressure to cobble something together with duct tape and staples (whoops, did I just reveal who my previous employer was) or to plot a whole company pivot halfway into your core product’s rebuild. Instead, my new manager values TDD principles, information sharing, and clean sprints.
While my previous team was able to evolve into a more remote-friendly environment, I always felt something got lost in the transition. My new employer provides me an opportunity to build that world-class team in house. I’ve met each member of the squad I’m in and it’s been positive; they have not just the talent but also the freedom to challenge things and set a gold standard. There’s little chance I’ll encounter the same dysfunctions I witnessed in the past. I’ve been given an opportunity to make a positive and profound impact on my squad, and in exchange I’ve promised to stop being a cowboy coder.
Time to get out of the garage and start driving.