Byte 2 – bottlenecks

Working as a developer one of the things that helped me grow was the ability to discover what’s blocking me from achieving my goals and constantly assessing how to have a continuous stream of work.

I’m a freelancer and I get paid by the hour, so an hour of waiting for someone to answer a message or someone to give me an endpoint is an hour that I’m wasting.

In general resolving any bottleneck has multiple steps:

  1. Identify the bottleneck
  2. Optimize the flow that goes through the bottleneck
  3. Check if any other bottleneck appeared and repeat

One of the first bottlenecks that I’ve hit multiple times and on multiple projects was the API.

In our workflow, we had a lot of unplanned work coming to the developers that should handle the API endpoints, be it urgent business requirements or firefighting happening in the live environment.

After around two releases that got delayed because of this, I decided to implement a kind of “buffer”, basically a mock for the API endpoints that I could use. It didn’t have to be fancy, at first it was just two endpoints that received a static list of objects and another one that would respond with different error codes based on the sent body but that was more than enough.

Thus when working with backend people I always start the API discussion by agreeing to a contract and mocking the response as I described here or using an API service like Apiary.


Later thoughts

I wrote this thing some time ago but never got to publish it. It was before reading The Goal and finding out about the Theory of Constraints. Gonna add some other stuff that I discovered since then and other notes that I wrote while reading the book:

  • sometimes when looking in detail at stuff you tend to miss the bigger picture, always check where the bottleneck is at a macro level as well. The whole system could be flawed
  • moving the whole system takes time and a lot of effort. When you don’t have the time or the resources to invest in resolving a bottleneck, you have to look where else in the flow you can improve the system so that you can help release some pressure from the bottleneck
  • sometimes it’s enough to just prepare the “machine” in front of the bottleneck for future work so that when work will be released it will go through the system at a much higher speed
  • Resolving a constraint actually has 5 steps as described in the Theory Of Constraints:
    • Identify the constraint
    • Exploit the constraint
    • Subordinate the constraint
    • Elevate the performance of the constraint
    • Repeat
  • we all need a Jonah to challenge us and our ideas, and finding a Jonah is sometimes as easy as having a talk with the stubborn junior in your team.




Leave a Comment

Blog