Decisiveness amid Uncertainty
This is part eleven of a series on Extreme Ownership. View the previous parts if you haven’t already: Part 1 Part 2 Part 3 Part 4 Part 5 Part 6 Part 7 Part 8 Part 9 Part 10
In a previous part I talked about the logo design tool Makr created for Staples in 2018. The project had one key requirement I omitted last time that I’ll go into now: the logos that were automatically generated by the tool also had to be editable in Makr’s logo builder. Makr for Web was based off of the Fabric library, but our devs stacked tons of functionality on top of it to make it fit our use cases. Due to the number of logos we wanted to create simultaneously, and with existing performance issues in the application, the team wanted to generate the logos server side. However, our application, Fabric, and HTML5 canvas were built with the web browser in mind so there was a huge question mark over whether a pure server-side solution was even possible.
I brought this issue up at the beginning of the project to little response. There was an unspoken assumption that someone (i.e. myself) would be able to figure this out along the way. Makr told Staples we would ship in the fall, but if the underlying technology wasn’t there we wouldn’t have a product to deliver. We had a habit of putting the cart before the horse, and while the consequences were never immediate or terminal it meant that every move we made was done under duress.
Regardless I started the prototyping phase of the project. It turned out there was a Node package that was a server-side implementation of the Web Canvas API. This was a long shot from bringing the logo builder to the server, but my focus that month was on writing an algorithm for choosing assets to use for the logo designs. For the output I wrote a simple method for putting text below an image to generate thumbnails. Initial feedback was positive.
And then I went down with appendicitis.
I took couple of days off to have surgery and recover to a well enough state to get back to work. I imagine most people at this point would just ask for the whole month off, but not me. The assets algorithm needed to be enhanced to give users enough variety - or at least the illusion of variety - for it to be useful. There was no one else on the team who could work on this feature. Our software architect and our UI engineer were swamped with their own assignments. The offshore team in Pakistan we hired to create the web builder continued to work on Makr proper. Besides, I was the only engineer who operated in our home office in Brooklyn and who had an intuitive understanding of what our non-technical staff wanted. Acting fast meant that our art director and our UI/UX designer needed someone who could put two and two together and make adjustments immediately.
There was still the question of bringing logos to the logo builder. Without this there was no way to take logos out of the tool. Here’s what we needed from our existing application that wasn’t present in my protype:
- The method for positioning elements was completely different between canvas and Fabric.
- Makr icons used SVG format, but the canvas can only display rasterized images (PNG and JPG) out of the box.
- Makr also needed to export to SVG, but the canvas only rasterized a fix-sized image. Fabric managed an intermediate state that can be rendered into multiple forms.
That Thursday our product manager told me the team had a meeting and committed to launching in two months. That was insane! I was pissed, not just because we were diving in without my consultation but also because I misled the team into thinking we were all set. Maybe I could eventually get server-side rendering in, or find another way to fake it, but there was not enough time for me to work on both that and the assets algorithm. Our product manager had to quickly figure out a way to complete the logo tool before our launch date.
Completing the Staples project was our highest priority, so we had our Pakistan team drop whatever they were working on and work on the logo tool. I outlined the different solutions I was exploring and passed the torch to the other engineers. They figured out what dependencies were missing, got the builder to work on both browser and server, and wrote new code to translate high-level logo designs I generated to Makr projects. That freed me up to collaborate with our art director and our UI/UX designer to bring our design system to perfection.
My product manager betrayed my trust. This wasn’t the first or the last time this happened, but I’m not going to go into that now. In this scenario she executed Extreme Ownership in a crucial moment and made a decision that helped the project, and I thank her for that.