This is the start of your journey. You may be right out of university or you may have a couple of years of software development under your belt. In either case, your future is bright and far ahead of you. If you keep your wits about you and keep an open mind and willingness to learn, you can go far.
Growing your prospects
This will not cover clever programming practices or how to construct efficient code.
This covers a lot of everything else you need to be a well-rounded developer: a team player who collaborates and communicates well with others, who can communicate effectively, and who knows how to manage risk while delivering value to customers. human skills become increasingly important as you progress in your career.
When many developers reach a certain level of technical ability during their career, not all of them possess the human skills necessary to have a great impact on a team. Simply put, these human skills are what separate good developers from great ones in the later stages of their careers.
This is not an exhaustive list of lessons or advice, but a good, common foundation to set yourself up for success in your future endeavors.
Establishing yourself as a software engineer
What does being a good software engineer mean?
Facing Ambiguity and Assessing Tradeoffs
When you’re first starting out in your career, you can be fixing bugs and extending existing features to add new features and functionality. What you will be working on may be determined by a product owner, your technical lead/manager, or a senior software engineer on your team. It may be up to someone else to lay out the groundwork (think the what and why) for most of the functional and technical requirements at the beginning (and aiding you in gaining the knowledge to do so yourself), and it will be your job to further create the technical design and then implement a simple, elegant, and working solution.
As you grow in experience and skill set, you will be faced with more ambiguity in the problems that you need to solve. There will not always be a straightforward answer or someone who has already thought about the problem and possible technical solutions thoroughly, and oftentimes there will be a number of ways in which you could solve a problem. It’ll be up to you to weigh the tradeoffs and determine the best path forward, which may not always be the most ideal technical solution but a solution that might meet the business needs best instead.
Accountability
A good engineer will also be accountable to others as well as themselves.
Being able to accept responsibility for your mistakes and work with your team to identify and fix the root cause is a great sign of maturity.
Generosity with your Time and Focus
As a junior engineer, it is good to be generous with your time, because anything you work on will help you gain knowledge and experience.
Almost every aspect of delivering software requires focusing on details: things like defining requirements, reading other people’s code, writing correct logic, implementing thorough error handling, and analyzing logs or other structured data. Good software engineers will try to anticipate ways in which a program can fail and then work to put safeguards in place to prevent those scenarios from happening before any system reaches production usage.
Constant Learning and Growth
Most people are unique in how they think and learn. Therefore, people learn at different rates. What may come more easily to one person might take much longer or take much more effort for someone else to absorb.
Learning a new skill can require you to change your way of thinking by sometimes forcing you to change how you approach a problem. While it might click right away for some people, do not get discouraged if it takes you a little longer to learn a new technology. If you dedicate yourself to your goals and learning, you can achieve it.
In the technology sector, where many can move very quickly and learn new skills or knowledge as they go, exercising a constant learning mentality and a drive towards growing your own knowledge and skill sets will set you up with the ability to learn and adapt more quickly as you progress in your career. This just takes time, experience, and practice to improve and a lifetime to master.
What Motivates You?
Understanding Your Own Motivations and Preferences
Understanding what motivates you can help set yourself up for long term success because you will know exactly what kind of work you will be best able to focus on and accomplish. This will help you as you contemplate your future and the career paths available to you at Appian.
But understanding your motivations can also help you in the short term with understanding your strengths and weaknesses so you can use your strengths to your advantage and better focus on growing your experience and skills in areas you are weaker in.
How do I know my own Motivations?
If you are just out of university, you may not have enough context or understanding of your day to day life as a software developer and the kind of work you do to answer this question easily. However, you can set yourself up to be able to answer this question fairly quickly, even within the first couple of months of working.
Sit down and think about this question: How has the expectation you had for software engineering differed from your reality?
Tuck that away in the back of your mind and continue your on-boarding and training. Begin work on your first tickets and projects. Come back to this question in two months. Now can you answer?
How has the expectation you had for software engineering differed from your reality? I am sure it differs from anyone’s preconceived notions, so it will be with your own. In those differences between your notions of what software engineering was to what it is for you day to day, you can potentially find items that drew you to this profession. You can use those items/ideas/areas to help delve deeper and understand what you like about software development and then seek those qualities out in your work.
Preferences as Tools for Improvement
Once you know what drives you to enjoy technical work, you can also see what might dissuade you from specific work or projects. Do you enjoy challenging puzzles? Do you dislike having to sit down and develop a data model for use in a web service?
These kinds of questions and understanding your own reasoning for your preferences will help you select areas of improvement right out of the gate. Keeping with the dislike of data model design above, if you dislike this, is it because you might not fully understand the reasons behind why a well designed data model for a web API is great to have up front? Or perhaps you do not understand data structures well and that is an area you subconsciously try to avoid?
It will be good to question yourself and work on areas you may find yourself lacking knowledge or understanding, as filling in those gaps can help you turn areas of weakness into areas of competence and then eventually into areas of strength.
(In the next part, I will cover some specific areas and actions to take to help foster success as a software engineer.)