At a previous startup, I had a great idea that we could improve our product by getting realtime updates from the server. At the time we had implemented long-polling in the client. After failing to get everyone on board I decided to take a weekend and create and example with socket.io and Node.js.
On Monday morning I was proud to show it off around the company. The CEO liked the idea and agreed with me. We got on a call with the CTO and I proudly explained my work.
He looked at it, then asked me to go into further detail about my choices. How did I implement this in websockets? Well, sort of, I used socket.io and it uses websockets.
He probed a little more and then started to get impatient. I couldn't believe that he had become dismissive. And worse, the CEO followed his lead. I hadn't figured it out yet but I had made a critical mistake.
Would we now be implementing the socket.io abstraction? Is this what we want? What trade off does that mean for us? Is this the only way?
I was afraid to learn how the technology actually worked and I was asking the company to take in several major dependencies in order to implement this.
I stubbornly maintained my position. Why would we skip over an existing answer? I had proved it was working. They could see it working. Why were they not as excited as I am?
We were at an impasse and I still hadn't figured it out yet.
Fast-forward to now, and I am a first time CTO. I've spent a lot of time thinking about lessons learned from my friend, the CTO in the previous story. I do my best to consider why he made the choices he did.
I'm interviewing candidates and I'm starting to see a similar pattern with other developers. They gladly accept dependencies and baggage that limits options and forces a direction. They'll make a terrible choice to avoid doing something that. Ames then uncomfortable.
Coders are afraid of writing code.
A fiend of mine recently described how their company need to do multiple events from an external webhook. Not enough people understand a simple web server so it got pushed to DevOps to build using salt. Salt isn't a horrible answer but when he was telling me about this I could see a little of my inexperienced self in the story.
On another project I was dealing with an Indian iOS developer that needed to sort an array. They fought me when I filed a bug that the sort order wasn't correct. A week later they had it working but had implement it in the worst way possible. They had pulled in SQLite as a new dependency and were using that to sort the array. When I saw this I was furious. They were very cheap but after this they weren't worth keeping around at any price.
In conclusion, we ended up implementing websockets. I was the champion for this feature and after our CTO guided me in the write direction. We read through the spec for websockets, we came up with the right fallback strategy, and the product improved significantly. We didn't have to blindly add dependencies, we understand the technology we use, and we found the right fit for our needs.