Successful Software Engineers - Part 3

Attributes and lessons for becoming a successful software engineer

Making an Impact

We can get stuck in the daily minutia of our work without knowing it. We make so many decisions each day, both large and small, from what to name variables in a class to where to add a new function to how to design and architect a new service we need to create. Each of these choices and decisions have longer term consequences in terms of maintenance, ease of enhancement and modification, and quality of execution. Sometimes it can be difficult to see how these decisions made on an individual level fit into the bigger picture and we can lose sight of the big picture when we are so focused on the smaller details.

As you gain experience as a software engineer and in your career at Appian, you will learn how your individual decisions fit into the overall system, and your decision-making skills will improve and refine. You will start to understand the positive and negative impacts of decisions have on the solutions and the business as well as how to balance trade-offs when deciding on possible implementation options. You will eventually improve your ability to know which choices add the most value to both the business and our customers and to champion those options above the others.

A strong quality of great software developers is that they are individually able to identify where they can add value to the business. To do so, you will need to do more than just create good specs and technical implementations.

Really Understand your Business

Your real job as a software engineer is quite simple: build value for your company.

Sometimes this means shipping a solution that meets a smaller set of the overall requirements to get it out quickly or sometimes it means taking your time to get your design right before shipping a solution. In the end, it’s all about shipping workable solutions to core business problems. The more problems you can solve, the more value you can add, and the more impact you make to your customers and your business.

It’s essential to understand the business and the industry you work in.

You will not be able to make an impact unless you have a deep understanding of your customers, their pain points, how your products solve their problems, their pain points with your products, and how you can improve your products for your customers.

When you are just starting a new role, you may only have limited experience in the business area, but there are still ways you can build value for the business that do not require years of institutional knowledge. It is all about improving your own productivity so you can solve more problems and gain more knowledge about the business along the way.

Managing Risk

What is Risk?

Risk in software development is “the probability for uncertain events to occur that can have a negative impact on a business, customer, or other entity”.

Risk is the chance of something negative occuring in a software system.

Deploying code riddled with bugs into production due to a lack of testing and review, deploying solutions that do not actually solve the problem posed due to a lack of communication, changes to customer wants/needs versus what the business is providing, and missing deadlines due to poor planning are all kinds of risk that can harm an organization.

Another kind of risk involves keeping what we as software engineers create functional after it is deployed into production and is being used by our customers. We can be so focused on building new software systems or features that we lose sight of what our customers are already using and the systems and services that keep those things running. It is up to us to also ensure we are keeping up with operational systems and services and responding to customer issues and requests for enhancements.

Risk Affordance

What level of risk is comfortable to you? Would you accept deploying code that is not fully tested into production? Would you be more willing to decrease the scope of the work being completed to meet a firm deadline?

These scenarios can exist and need some assessment from the engineers working a problem to make a decision on. However, personal levels of risk affordance can differ from the risk affordance of your peers or the business itself. Understanding the business’ level of risk avoidance is an important part of understanding and evaluating risk.

When it comes to risk management, taking the mentality of mitigating known and anticipated risks early, in the requirements and design of a solution, is a key quality of successful software engineers. There are few circumstances where mitigating risks early is not desired. Doing so will help ensure the business, your solution, and you are set up for success.

In situations where risk is unavoidable, discussion among other engineers, members of your team, and even the stakeholders can come into play. These circumstances will help educate you on the overall level of risk affordance your business is comfortable with as well as help ensure your future decisions share this same level of affordance.

Living with and Planning for Risk

Risk is always there in every decision we make so managing risk has become a critical component of software engineering. It is better to understand what risk is and include it in your daily work life and thoughts rather than to try and ignore it.

The more experience you gain throughout your career, the better you should get at identifying and planning for risk. Managing risk is one of the most important skills you will use in your software career.

Handling Mistakes

You will experience a moment where something you created will break in production. Or something that you do will cause an issue in production. This should be an expectation for you to have in your career. There is almost no professional software engineer that has not had this happen to them at least once. It happens to the best software engineers and it will certainly happen to you at some point.

Rather than taking these events personally and negatively, in an environment that fosters a team first mentality and does not target blame, you can gain significant experience through these experiences in identifying an issue, investigating the cause, working out a solution, creating a fix, and deploying out the fix to resolve the incident, all while under time sensitive pressure.

Understanding Mistakes Happen

Software engineers work on complex problems.

It is nearly impossible to fully understand how each commit you make will behave in aggregate across all of the other services in production. We take steps to measure and handle risk via code reviews, creating unit tests, integration testing, and smoke testing after a production deployment. And while all of these steps are good, it is still impossible to plan for and prevent all risks. So what else can you do?

Good software engineers know mistakes can happen and that these can occur at any time. But they also know that they will be able to figure out the problem and solve it whenever a new problem occurs. The ability to stay calm and work through the problem, especially when services may be down and customers may be complaining, is a trait of a good engineer. The engineer will treat the problem with urgency, pull in any resources they may need from their team, and keep calm while working the problem and fixing the issue. The engineer will also then review the situation and deal with the impacts that may come while also coming up with ideas and methods to mitigate the situation from occurring again in the future.

At Appian, we do not want any engineers to worry about how others will view them after an incident or outage. We all work together as a team, across engineering teams and even across departments, to solve issues for our customers. Once a problem is resolved, we want to work to understand why it happened, how we can prevent it from happening again, and any other improvements we can make in the affected areas. This is what we call a post mortem. There is no blame involved. There are only longer term solutions and improvements to be made.

Effective Communication

Software is used by people all over the world. But the key concept there is that people use software. And just as not every person is the same in this world, so too do the various software products used by people need to vary and meet specific needs and uses. Shipping successful software means not only knowing your customers but also knowing and working with all of the other people who help contribute to our product and help us ship software at scale. It takes good communication skills to deliver good software products.

When beginning your career, you will be learning how to code within the code base and parameters of your team as well as learn how to interact with your peers. Adding in additional points of view and stakeholders such as business teams or customers can be a struggle to balance. It can be difficult to convey ideas to others in a way that helps them understand the important details and reasoning behind certain decisions.

Working within a team of other people, both technical and non-technical, can be one of the most difficult skills to learn in your career. As you grow in your career, you will be required to interact with various people with differing backgrounds and knowledge in order to perform your work. Communication skills are equally important to technical ability and will continue to play a key role in software development and being a successful software engineer. Being able to communicate your ideas clearly takes good communication skills, which luckily can be learned over time with experience and practice.

What is in it for me?

Great communication skills are a big differentiator among other software engineers and will help you stand out among your peers. What many developers fail to understand and act on is that the best communicators have a learned skill that surpasses pure technical knowledge or expertise.

To be successful in modern-day software engineering, developers need to be well-rounded individuals who can communicate with other teams and people. You might be asked to collaborate with someone in the Marketing department or Sales or Customer Success to produce better software for our customers. Some software engineers may be asked to communicate directly with customers or partners. Occasionally, you may need to work with engineers at other companies or on other teams. Other parties have their own priorities and/or their own technical limitations that they have to work with and for.

If you want to be more readily recognized for your work, help influence the direction of your team, or earn promotions, then you need to learn how to communicate well with other people and build meaningful relationships along the way both within your company and with your customers and partners.

To do so, it can be good to accept some lessons and advice to follow and keep in mind when working on improving your skills in this area:

Words can Hurt

Communication is important. And our main communication mechanism is language and speech. Therefore, it may seem silly, but remembering that “Words are powerful so take care in your words” is a lesson that will greatly benefit you when working with others.

The people we talk with, via chat rooms or over the phone or via comments in a document, are still people, and it can be easy to forget this sometimes, especially when difficult decisions are being made or discussed.

Words can have quick and direct effects. It is important to choose your words carefully and do your best to keep communication respectful and civil.

One of the most important things to remember is to be aware of your emotions. You may be pulled into an incident quickly in the middle of the night or you may be participating in a critical discussion about the best design for a solution to a key problem. Regardless of what it is that is being discussed, you should work to understand your emotional state. If you are feeling heated, you may be best off staying more quiet and taking a breath versus jumping into conversations quickly. Take a moment and understand why you are feeling how you feel, then take a deep breath. This can help you to speak with empathy and professionalism in difficult conversations. Your vocal tone is also a trait that can affect how you speak and communicate, so remember to also adjust your tone of voice in a conversation as much as focus on the words you choose to speak.

Don’t just look, listen

What did you think of when you saw this section titled “Effective Communication”? If you thought this would just be about getting tips on how to speak and talk to others, you align with the majority of people who instinctively think communication is about how they talk to others. The reality is, how we speak to others is only one side of the coin. The other side is how we listen and accept what others are speaking to us. Good communication requires you to listen to other people and their thoughts, ideas, and concerns. This is equally as important for collaborating and working well with others.

Be a Parrot

Listen to the one speaking and then repeat back to them a summary of their ideas or concepts, similar to what we would think if a parrot was repeating something back to us. But of course more complex than what the parrot is capable of!

Listen to the speaker and try to understand their ideas. Try to paraphrase the idea back to them. You should not repeat what they said word for word, but try your best to summarize their message in order to confirm that you understood them correctly.

While it may feel silly at first, when in practice, the person speaking rarely will ever be aware of or think you are practicing this concept directly. This is an inherent way to make another person feel heard. It shows the speaker that you are actually listening and actively working to understand them and their point of view. This can go a long way in building trust and respect with others.

From your own side, doing this can help you internalize and embrace the speaker’s perspective, even if you do not necessarily agree with it. It can help open up your own mind to new ideas.

As an example, let’s say you are discussing the requirements and procedures for a new system being put into place. It will be far easier to discuss and envision this for all parties if you ask the speaker to explain the processes you are tasked with actioning and then repeat it back to them to make sure you understand it correctly. It will help you clarify assumptions during the requirements gathering phase when planning your feature work.

Speaking to a Crowd

Speaking in front of a large audience can be very uncomfortable for a large number of people. Almost all people experience anxiety before they have to speak to an audience, regardless of their expertise or experience in doing so, so you are not alone if your nerves get to you.

You may never need to speak in front of your entire company, but you may find yourself in one-on-one conversations, team meetings, or larger meetings where you are required to speak on a certain topic. Improving your public speaking skills has many benefits and will help you be more effective at your job.

Let’s take a look at some things you can do to improve your speaking skills, whether you’re talking to one person, a small group of people, or a large audience:

Know what you are talking about

You want to make sure you have a good understanding of what you will be speaking about. To present to others about a topic or idea, it is crucial to have a solid understanding of the topic yourself. If you do not understand something well, you will have a hard time teaching others about it.

If you are putting together a presentation with slides, add speaker notes to each slide. These are usually talking points you want to ensure you cover while presenting that slide. Do not write out your entire speech, but instead write short sentences that will help you remember and ensure you cover the important points.

Practice running through your slides at least once before giving your presentation. Find an empty conference room in your office building or do it at home in front of a mirror (but practicing in a location similar to the actual presentation is best). Talking out loud helps you find parts of your presentation that may sound awkward or don’t make any sense when actually speaking them aloud.

What questions will you get asked?

Think about what questions you might get asked by your audience. Try to prepare for those by answering them within your presentation or speech. Getting ahead of the questions you can anticipate can also help you feel more confident and prepared. This can help with any nervousness you may feel while preparing for the presentation.

Also remember that during your speech, you do not have to answer all of the questions that you may get asked. If you do not know an answer, it can be best to say that you can get back to that person with an answer after your presentation so you can do additional research or confirm with a colleague.

Getting over Nerves

It takes a lot of practice and preparation to build confidence in your public speaking skills, but even the best public speakers still get hit with anxiety and need to manage their nerves. In fact, some even argue that nerves can be a good thing because the adrenaline rush makes you more alert and helps you focus on what you need to communicate. Regardless of how you deal with the anxiety of speaking in front of people, learning to manage your nerves is a valuable skill to build. Use preparation and practice for presentations to your advantage to help you feel confident and ready. You may never be able to get rid of your nerves completely, but managing them can be learned through practice and preparation.

Managing your Relationship with your Manager

Your manager is a combination of your personal cheerleader and a parole officer. They are your most valuable ally in ensuring the progression and success of your career. But they also have the most influence and impact on your career as well. Your manager should be above you in the organization structure, so they have the power to make decisions that can affect your future career for the good or the bad. This give and take relationship is of paramount importance as it can affect not only your future prospects but also the day to day projects you work on and the opportunities you are provided with.

Some managers can take great pride in their mentorship and stewardship of their reports, but others may prove more aloof or difficult to work with. It can take time and dedication from a manager to ensure their reports are successful and continue to grow with new opportunities given. This responsibility is usually also in addition to their other, more direct work and responsibilities. So the relationship and how it works are as much on you as they are your manager. This starts with establishing rapport and trust with your manager and coming to a mutual understanding of your prospects and your trajectory for your future.

Show you understand your business’ needs

There is nothing more comforting to a manager than understanding that your reports know what the priorities and needs are of the business and are constantly looking out for those interests in their daily work. So the first step in establishing a successful relationship with your manager is to do what may seem the most obvious and self-serving thing to do: Do your work to completion and do it well.

Once you can do your work to completion and well, if you show an understanding of how your work fits into the bigger picture of the interests and needs of the business, then your manager knows you can think past the work at hand.

Nothing drains time and energy away from focusing on an employee’s growth more than a manager having to micromanage an employee in their day to day duties. If a manager can see you performing your work well and to completion, they know they can trust you to look after yourself and therefore you are worth investing time and resources into to grow your skills and experience and progress your career.

Trust is a two way street

The next step is to do your job reliably. Repeated good work sets the foundation and trend that you are successful. Your manager needs to know you are reliable and that they can count on you to complete the work you are given. Doing your job reliably does not mean you won’t make mistakes. Mistakes can and will be made. That’s just a part of building software that you need to learn to live with. Good managers and good employees know this is a part of life and should be expected on occasion (as long as this does not become a daily occurrence).

Being reliable means that your manager can count on you to take on a task and see it through each time. The more often you do this, the more your manager will know that you can take on whatever they throw your way or is a new priority. Therefore they will also know that you can take on the increased responsibilities that come with promotions.

While your manager expects you to deliver results in your daily work, they have their own goals, milestones, objectives, and key results that they need to deliver for the business. Understanding this early on will help you better understand some of the decisions your manager makes. As a software developer, your job is to do what you can to support your manager so they achieve their desired outcomes and therefore the successful outcomes for the business. You can easily think of it this way: Your manager’s goals are your own goals. If your manager can trust you with delivering success to benefit the business then they can also trust that you will work to success once you are given more responsibility.

When to “Manage Up”

Once you have a good working relationship with your manager, it will not always be clear or easy to be on the same page as them. Your manager might be under a lot of pressure and less responsive to your own needs at the time. Or your manager may not have all of the information they need to make decisions successfully. In those instances, you will need to “manage up” with your manager by giving them the information they need or being vocal enough to get the help you need.

There will be instances where you need an action to be taken or an answer to be provided to a question and if your manager is not responsive in your first requests, then you can attempt to help your manager make the time for you.

First, work to find solutions to any problems or answers to any questions that you may have yourself. This will potentially eliminate the need for your manager’s direct involvement should you not need direct time spent on their side.

If this is not possible, or you need your manager for their own skills or capabilities, then you may need their direct involvement. Sometimes you will get stuck and need to bring in some help. Your manager may be able to help unblock you, and if not, they should be able to point you to someone who can. In cases where you are stuck because of a dependency on another team or department within your company, your manager may have more leverage to ask the other party to do whatever you need them to do. In those situations, you will need your manager.

If you have key information that is very new or has not been communicated properly, then sometimes you may need to inform your manager about items they may not be aware of. Your manager has to make many decisions each day, and sometimes, they may not have all the information they need. Speaking up in these cases is part of “managing up”.

Remember, managing up does not include: forcing your way into office politics, covering up any mistakes or hiding information from others, or deceiving your manager in any way. When applied correctly in the right situation, managing up can help you achieve the outcomes you are looking for without fostering any negativity from anyone, including your manager or other employees.

Built with Hugo