After 25+ years of developing software at various levels, companies, and in different domains I have put together the following coding recipe. The list below contains the root of my ingredients I add every day to help teams create great solutions. These items are applicable regardless of position or industry.
- Focus on People, Not Technology
- Continuous Improvement
- Validate Solutions
- Humble, Respectful, and Support the Future
- Flexibility to Bend the Rules
- Fix What You Bent
Okay, that’s it, go off and make something amazing… well… maybe we need more than just vague ingredients. Each of these topics are large and we need time to unpack and digest them. First, let’s focus on people, not technology.
There is always more than one person involved in a great meal. It is very easy to focus on the ingredients, tools, or outcome, but creating amazing food from a recipe takes all the things. There are farmers, suppliers, recipe creators, cooks, wait staff, eaters, dishwashers, etc. The same goes for software development. It’s easy to focus on technology as a software developer. There are just so many amazing things out there that solve problems in really interesting ways. It’s a trap! Here is a quick list of how I approach this:
- Technology Solves Problems for People
- Users, Yes, And Many Others
- You are Vital to Success
It took me a long time to realize that the coolest/hottest tool isn’t always the best for the solution. That said, it is part of the developers job to know what technology will work for the people involved. Sometimes that requires pushing back on proposed technologies if they do not fit in with the project needs, it is our responsibility to bring that forward and be able to explain why.
This in itself can be overwhelming as our tech stacks get more and more complicated. Knowing everything is not possible. Finding ways to abstract these complexities helps you stay focused on the important bits of the solution. Frameworks, managed services, libraries, are great tools that can keep you away from the bare metal and get to solutions quicker with hopefully decreased complexities.
That isn’t to say diving deep into a particular piece is wasteful. If that is where your passion lies, go for it and become an expert in that thing. We need those experts to find better ways, or build better tools. In this case the user is now another software developer. Make sure you focus on their wellbeing.
So who are these people involved in the creation and consuming of solutions? Above I called out users, is that it? No! It’s everyone involved with the project. The people paying for our time and effort. The users who will enjoy our amazing creations. Our co-workers who we will get frustrated with and enjoy our triumphs with. Vendors, other business leaders, our friends & families (what, really?), everyone we interact with.
Everyone is important… I know that is a cop-out and easier said than done. The hardest part is balance. How do you balance all the requests for so many different sources? The groups involved need to discuss who takes priority, maybe even produce a decision tree to solve conflicts if needed. The priorities may be different for different teams/domains. Having an emphasis on the end users of the solution is probably a good place to start, but disregarding or worse not listening at all to any particular group will be detrimental to the success of the solution.
For instance, let's say there is a new application that is being requested for the users. There is a great library from a vendor that will make everything easy, but it supports a language that the in-house development team has no familiarity with. Here are 4 groups that need to be balanced; users, business, development, and vendor. Maybe the developers want to learn the new language, but that might slow down the time to market. Maybe there is a different solution that can satisfy the user's needs? Maybe the vendor wants to support a new language and can work with the in-house developers? Exploring these options should allow one idea to float to the top of the list taking everyone’s point of view into consideration.
The most important lesson here is to listen and sympathize with everyone involved. Take the time to; explain things so people can understand, discuss at a higher level to find a great solution that works, train people starting out in their careers, get input from vendors and business leaders, end user input throughout the process, etc.
There is one last person that is important to focus on, and that is yourself. The happier you are the more likely you are going to be happy with your work and vice versa. Not only will you feel better, but more than likely your code will be better.
It is very easy to fall into despair, especially if imposter syndrome takes hold. The software industry is constantly changing. Everyone is in a state of learning. Focus on what is exciting to you. Always know that you don’t and can’t know everything. Also know that you can learn from everyone, even someone just starting their career. It is a really amazing thing to embrace.
Earlier I mentioned friends and family. Having a balanced life is a path to success. The happier I am overall the more I enjoy where I am at and what I am doing. This means taking care of yourself outside of the workplace environment as well. Trying to keep work life at work and home life at home. This clear boundary of separation helps keep things balanced.
While the technology of software development is fun and amazing, even if overwhelming at times, the focus should be on the people involved, from the doers to the users. Keeping in mind that you must be inspired and take care of yourself to truly enjoy creating amazing things.
In part two of the series we will look at continuous improvement. What that means and how to implement that piece of the recipe that is software development.