Developer Tea

Forcing Functions

Episode Summary

In today's episode we're talking about different challenges we face and creating tough situations on purpose to drive us forward in career development.

Episode Notes

In today's episode, we're talking about the model of forcing functions or the choice that requires us to move in a specific direction.

We'll talk about difference constraints that we can apply to our development or rules that we apply to our work in order to stretch our ability to problem solve and get around tough situations.

🧡 Leave a Review

If you're enjoying the show and want to support the content head over to iTunes and leave a review! It helps other developers discover the show and keep us focused on what matters to you.

🍵 Subscribe to the Tea Break Challenge

This is a daily challenge designed help you become more self-aware and be a better developer so you can have a positive impact on the people around you. Check it out and give it a try at https://www.teabreakchallenge.com/.

Episode Transcription

Many of us look back at previous challenges that we have faced, whether professionally or personally, and we can easily draw the line. The line from where we thought that that challenge was going to harm us, that we had lost the game of fate in some way, that whatever we were facing was negative. And we can draw the line from that point to where we are today. Much of the time, when we tell these stories about our previous gutt of blunders, we can see that they were instrumental in making us better. Often these stories are told with a sense of irony or surprise that those difficult times turned out to be instrumental to our future success. But in today's episode, we're going to talk about creating those kinds of constraints on purpose in order to emulate some of the same behaviors that you would have in a difficult situation. My name is Jonathan Cutrell, you're listening to Developer Tea. My goal on this show is to help driven developers like you find clarity, perspective, and purpose in their careers. And it's not just difficult situations that produce good outcomes. At its core, today we're talking about constraints. And if you have worked with designers or if you are a designer, you're listening to the show, you've probably heard discussions about the importance of constraints. And today I want to talk about a specific model of thinking related to constraint. And that is the model of a forcing function. So what exactly is a forcing function? Well, for the sake of today's episode, we're going to use the informal definition. A forcing function is a choice. A choice that requires otherwise free or ambiguous behavior to move in a specific direction or maybe a couple of options, a specific set of directions. So let's unpack that a little bit for a second. A choice, and in this case, we're not necessarily talking about the choice of one person. We might be talking about an action that a person chooses, or perhaps as we kind of hinted earlier in the show, constraints that a person puts on themselves, a good example of this for engineers is particular patterns, engineering patterns, and the rules associated with those patterns that you elect to be subject to. You're not necessarily going to experience any negative consequence by breaking those rules. And the wrong model of thinking, the wrong model of thinking as it relates to forcing functions is that total freedom is going to produce the best results. And this is somewhat intuitive. We like to have freedom. We like to be unconstrained in theory. But what most software engineers find is that when they elect, for example, the forcing function of a particular pattern, of a particular software design pattern, that their software improves. Why is this? Because when we choose constraints, when we choose these various ways of thinking or various rules to operate under, we are adopting a forcing function. And that forcing function takes otherwise ambiguous decisions about our code and forces it in one direction or another. We can explicitly choose to go against the model, the design model that we've chosen, or we can change what we were thinking we were going to do. This is very often where those improvements actually come from. And we change what our intuition was, or perhaps our naive implementation was, for a given design to follow a particular pattern. Often we take a second look at our approach. Now this doesn't mean that this is a silver bullet to software engineering, because the reality is, no model is perfect. And if you select the wrong model, then you might be making damaging changes that forcing function is forcing you to the wrong direction entirely. So forcing functions are neither good nor bad. They are exactly what they sound like. They are functions that force us towards something. And it's our jobs, as engineers, as people, to decide what do we want to force ourselves towards. And can we adopt forcing functions that have very clear benefits, not arbitrary ones, but tactical ones? Can we adopt forcing functions that help us arrive at our values more easily? These are the kinds of questions that we have to ask when we are thinking about forcing functions and relating this back to the very beginning of this episode. What's amazing about times of difficulty is that we are experiencing constraint. And those constraints often generate fundamentally new behaviors, because they are forcing us as a forcing function in our lives with the main difference being that you didn't necessarily choose that particular situation. But it is possible to create some similar effect by choosing your forcing functions. Thank you so much for listening to today's episode of Developer Tea. In lieu of a sponsor, today I want to encourage you to do your part in this global fight against the coronavirus. This has had a major impact on people around the world, both at the fundamental level of health, but also at secondary levels, jobs and families being affected, people losing their family members. Obviously, there are major implications for health care for people around the world and particularly in the United States, so I encourage you to stay informed with authoritative sources on the subject and take their advice seriously. Thank you so much for listening to today's episode of Developer Tea. If you enjoyed this episode, I encourage you to subscribe and whatever podcasting app you currently are using. Today's episode was produced by Sarah Jackson. My name is Jonathan Cutrell and until next time, enjoy your tea.