What lessons do software industry experience impart? That was the topic of a recent Let's Discuss Slack event from Dev Together Madison. Many valuable insights were raised and discussion highlighted some key points about software careers. Newer or junior developers bootstrapping their careers can take advantage of these concepts for stronger career success, but the value still stands for anyone in the tech industry.
Interestingly enough, not a single one of the lessons learned by experienced software developers was related to a specific technology or technical skill. Every insight related to soft skills. One take-away from that is that technical aptitude is necessary, but soft skills can't be neglected if a successful tech career is what you want.
Managing Expectations is Important
Expectation management is a common theme when we've asked the Dev Together community about crucial software developer skills in the past. This discussion was no exception.
This time we talked about managing expectations in estimates. A big part of a successful project is a solid estimate. Estimates inform project stakeholders, development managers, users, and other key players. Assuming everything will go well reflects a positive attitude, but experienced developers know that something will always go wrong. Estimates have to take that into account in order to prevent failure in the eyes of stakeholders.
Software's About People
We build software to facilitate someone's job, safely transport them through space, or make sure their paycheck is deposited on time. Approaching software with that in mind helps developers focus on the value it can provide.
Eliminating a small bit of frustration can be worth many times more than a clever code implementation. -rosslarson
The end user is always an important person to keep in mind when working toward a goal, but this maxim extends to other project stakeholders too. For example, considering the needs of developers who will update our work in the future helps us build understandable code. Thinking about the company's objectives in the context of a goal helps us think critically about each part of our systems. Even working with other developers in the team helps us negotiate a considered approach to solving the problems at hand.
Be Able to Work With Multiple Personalities
Software projects are rarely completed by just one person. A software developer needs to be able to adjust for different personality types and work styles. To be successful, a developer must learn to build trust and foster relationships.
Making sure other people feel heard is important in gaining their trust
One way to build trust is to make yourself "vulnerable" to others in the workplace, which creates a trust environment. People are usually more willing to help or forgive when they can empathize with you.
Humans aren't good at multi-tasking. We end up spending a lot of time trying to recover after context-switching.
Being able to look at the "end goal"...helps me assess if a new thing is worth it enough and will help me achieve my end goals. -Cristina Ruth
Prioritizing tasks helps developers apply their full brainpower to one goal instead of scattering it among many. Understanding the end goal and communicating the opportunity cost of changing paths helps people focus on the most valuable or efficient way to achieve the overall goal.
It's a delicate balance of jugging the current and planning for the future so there's less things to juggle. -Cristina Ruth
Find Root Causes
Keep asking "why"? and going down deeper levels until you understand exactly where the source of a problem is coming from. - Fred Turkington
Software developers are problem-solvers. It's a key part of our psyche. Sometimes we get too focused on solving problems and forget to step back to find out what's a symptom and what's causing it - i.e. the real problem. For example, understanding why users want a feature often leads to discovery of an underlying issue that might solve many other problems at the same time.
You Can't Know Everything
Software developers sometimes feel like the world expects them to be an expert in everything. Unfortunately, that's just not a realistic approach. We need to know when to rely on team members and coworkers for their knowledge. A software team that practices this interweaving of skills becomes stronger and more successful as a result.
Learning Never Hurts
Even though developers can't be expected to be experts in everything, learning is how we improve our abilities.
It's good to always challenge ourselves and get ourselves in an always learning mindset
This advice applies to many areas of life, not just software development careers. Sometimes we have to learn through failure, which is also okay - another lesson we learned in this discussion. Expanding knowledge helps identify patterns, too, which is a critical component of software development.
Limiting ourselves to what we already know is attainable prevents us from stretching past superficial goals to find our true limitations. For example, only applying to jobs we feel qualified for will limit our opportunities to learn how to do new things. The "safe" path isn't always the best path.
This Dev Together Madison Let's Discuss event highlighted several valuable lessons learned over the course of many software developer careers. Thank you to everyone who participated!