Yesterday morning, I enabled a feature-flag in production that quietly released a new feature to all of our InVision customers. This was the culmination of a week's worth of incremental builds and deployments. And while a week doesn't sound like a long time, every day leading up to it was exciting—every line of code that I wrote was exhilarating. And when it all finally went live, I was dropping party parrot and rocket ship emojis all over the place! But, when the dust settled, the post-deployment depression set in. As it always does.
This is the cycle that I consistently experience in product development. Excitement. Deployment. Depression. Repeat. My former engineering manager - Rich Armstrong - called this cycle R.O.P.E.:
The days and hours leading up to the release of a feature can be the most thrilling part of my job. A lot of the low-level grunt work has been completed; most of the concepts have been fleshed out; and, all that's left to do is to wire the various pieces together and birth my vision into the world. The anticipation is exquisite! Like the butterflies you get as a roller-coaster muscles-up to its first point of inflection. Release is inevitable! It cannot be stopped! The world is about to be changed forever!
And then I deploy.
And it feels victorious.... for maybe an hour. And then the elation fades; and the reacjis stop coming in; and I sit there in the silence feeling alone and empty and sad.
This is where Rich would say I have to go back to the R.O.P.E. cycle and start over.
Once a feature has been deployed, and the endorphins get consumed, I have to be kind to myself. Instead of comparing my depressive self to my most effective self, I just have to focus on being present - on reliably showing up to work day after day and have faith that doing so will eventually lead to good things. This gives my mind and my body a chance to compensate for the stresses and strains of the previous cycle.
In this phase, I often like to work on small bug fixes or deleting dead code. Things that don't require too much thinking. Just something to get the blood flowing and the machinery lubricated.
Once I start to regain some equilibrium, it's time to get organized. I start looking for opportunities - places in the product where I might be able to add some value. I look in the backlog, troll the #Support channel(s) in Slack, look through Feature Requests in Zendesk, and consult my notes. There's always a million competing priorities; so, I need to find something that strikes the right balance of business need, personal interest, and level of effort.
Eventually, I land on something juicy. And, I start to think through the implementation. This typically starts with an Epic in Jira and then a bunch of high-level Task tickets that roughly outline what I think it will take to get this new feature from ideation to production.
Once I have my epic laid out, it's time to start writing code. For me, this journey always begins at the bottom: creating new database tables and the data access layer (DAL). This isn't glamorous code. It's not even very difficult code to write. But, it is crucial: it lays the foundation of everything else that will come after it.
In this phase, I'll also start creating skeletal Angular components on the front-end. This just puts placeholder files into the repository, leaving them void of most logic. Again, I'm just laying the foundation of everything that's going to come next.
Once I get my foundational code in place, things are really starting to heat up - the machinery is starting to fire full-blast. I can really see my vision coming to life. And, since the low-level constructs have already been written, the only remaining code is that sweet, sweet business logic and complex problem-solving.
At this point, I start to feel like the Juggernaut - the switch has flipped and there's nothing you can do to stop me. I've already granted myself permission to get shit done; so, you best just get out the way.
This phase can feel all-consuming. The end is so close, so tangible! I go to bed at night thinking about all the progress that I'll be able to make in the morning. Like I said above, the anticipation is exquisite! It feels like all of my skills and everything that I've experienced in the past 20-years, it's all coming together in order to make this feature possible.
Deployment, Depression, Repeat
Deployment of my baby is euphoric. And manic. But the mania inevitable fades at the end of the R.O.P.E. and gives way to emptiness and depression. And I am OK with this. I acknowledge that it happens and I move on. Soon, I will find something new to work on and I'll return to crushing it at typical levels (YouTube: Silicon Valley).
Epilogue: Rich's Perspective on R.O.P.E.
While I've outlined how I experience R.O.P.E., Rich Armstrong has a write-up about what R.O.P.E. means to him. As an engineer, you can see how I've taken his concepts and molded them into a shape that helps me engage with the world.