I think my wife is pretty amazing. She is a busy woman. We have four young children that we homeschool. She has been working hard to heal her body from food allergies by following the GAPS diet. She cares for our house, our chickens, and our garden. She is a doula and is regularly consulted by friends with infants and toddlers for advice. Through all that, she lifts me up and makes me into a better man than I would be otherwise.
Both she and I like to cook. One result of the GAPS diet is that all the things I have become good at cooking are no longer legal options for our evening meals. Gone are the nights of whole-wheat pizza crusts or pancakes for supper. It’s taken some adjusting, and I will admit that I’ve been less than enthusiastic about the situation, but through this process my wife has demonstrated this passion to improve again and again. When faced with the question “What’s for dinner?” I am dumbfounded, suggesting “Eggs? Chicken?” whereas she is regularly searching for new and exciting ways to make our meals enjoyable. Often building upon a basic recipe using the knowledge she’s gained through this process. Eventually, she ditches the recipe and relies completely upon her expertise.
Recipes are interesting things. They act like safety nets for us when we’re just beginning. It’s wise to leverage them when we are getting started. This is as true in software development as it is in cooking. Some of the best beginning programming books available are called cookbooks or include the word recipe in the title. This books take common scenarios and provide a basic solution. Often times this is enough to satisfy the requirement and the programmer can then move onto another feature.
There’s a problem with recipes though. If you never deviate from the recipe then you aren’t really improving. You may get better at completing that recipe, but what if you never learn how to substitute ingredients, adjust the yield, or navigate an unexpected problem? Recipes are vital when you are starting, but they can hold you back.
This is what my wife is great at. She can take one or more recipes and improvise to create something better. As programmers we should do the same. Be aware of the recipes, the best practices, but do not limit yourself to them. Aspire to improve the recipes while understanding why they became the best practice.
What we do as developers isn’t always complicated. A large portion of what we do is converting database queries to HTML. It isn’t always glamorous or exciting, but we cannot give into the good enough mentality, that’s when we lose the passion to be great at what we do. Simple shouldn’t result in lazy. In Jiro Dreams of Sushi we see this at an extreme level. Sushi, only sushi, is prepared day in and day out at a level beyond what anyone else is doing. This doesn’t prevent the chef, Jiro, from evaluating every plate to understand what could improve.
Our challenge is to not settle back and use the same recipe over and over, never striving to improve. If you do use a recipe, make sure to tailor it to your own style and demands. A well established recipe aims for the widest adoption, which isn’t necessarily what you are doing in your development.