Leveling up as a software engineer requires more than showing up and merely participating. Regardless of your natural abilities, there are practical actions that allow anyone to improve.
I’ve worked hard over the years to increase my skills as a software engineer. I’ve also tried to add value to the broader engineering community. Some things have worked well and some have been utter wastes of time. Getting started, it’s hard to know which is which. Lacking a traditional education in computer science, the following habits have allowed my career to grow and evolve more consistently than anything else. I’ve also had the privilege of watching these habits do the same for others.
Ask great questions.
Failing to teach active listening is the greatest oversight of many academic institutions. In my experience, neither grade school nor college offered courses on asking better questions or being a better listener. It is a priceless skill. The more I learn and grow, the more valuable I’ve found the experiences of others. Few things will accelerate the growth of a software engineer more than connecting with other talented people and leaning on their insights. Learning from your own failures and setbacks is valuable but the path to wisdom comes from avoiding hardship by learning from the mistakes of others.
These are helpful techniques as you identify and meet with mentors, coaches, or teachers:
- Prepare questions ahead of time.
- Take thoughtful notes as they share.
- Take action on what they say.
- Follow up afterward with gratitude and outcomes based on their feedback.
Some days, I’d spin up two or three new projects to try out a certain feature or approach. It was tedious at times but caused me to get more efficient and deliberate. Years later, I have hundreds of projects from which to pull information and learnings. I rarely encounter a problem for the first time because of those early years of experimentation.
A few examples of ways you can experiment:
- Find a website or app online and recreate it.
The popular social network of the day can provide a good starting point.
- Research features or extensions within a framework and try to replicate them.
Building readable URLs is an exercise I remember enjoying.
- Find tutorial sites from trusted sources and go through each step.
Railscasts.com by Ryan Bakes is a personal favorite.
I worked to further my mindset when eventually moving onto paid projects too. I pushed myself to say yes to many projects and challenges I didn’t have all the answers to. I would give discounts and pad timelines by 200 percent to have the margin to stretch myself and my experience. This provided a safe environment to learn, while still allowing for real-world experience.
Share your knowledge.
More often than not, teaching others is the best way to solidify your own understanding. There is no shortage of junior programmers seeking help. Regardless of how little you may know, try teaching someone else. You could try teaching a niece or nephew an introductory program like Scratch or volunteer with a code school class you’re a few steps ahead of. Use what you know to help others.
Building a habit of sharing your knowledge keeps you sharp and reinforces the attitude that made the internet great to begin with. Wikipedia, an online encyclopedia, is one of the largest sources of information and is maintained exclusively by volunteers. Most of today’s prevailing frameworks are also open-source tools supported by unpaid enthusiasts.
When writing is the goal, using an existing tool allows you to get right to the point.
If all else fails, write about your experience. Whether or not anyone reads your writing, the practice of organizing your thoughts leads to a more organized mind. To simplify the entry into writing, I set up a Medium account. It took seconds and allowed me to begin writing without worrying about style and aesthetics. Of course, I could have built a blog site from scratch. Actually, I had started the process many times before, but that became a distraction from writing. It was a form of procrastination. When writing is the goal, using an existing tool allows you to get right to the point.
Invest time daily.
As soon as you stop learning, your skills decline. In a fast-changing industry like technology, there is little room for becoming complacent. Early on, I found space whenever I could to read, watch tutorials, and interact with other engineers. Developing the discipline early pays dividends over time. The more I’ve challenged myself to be a lifetime learner, the more opportunities have followed.
Whether you’re connecting with others, experimenting, or sharpening your skills, consistency is key. Tactical ways to make sure you’re moving forward include:
- Schedule time each day to explore new challenges.
- Schedule time each week to reflect on what you’ve learned.
- Schedule time each month to organize what you’ve accomplished.
- Challenge yourself to publish learnings (this will further sharpen your insight).
As a bonus note, waking up early is the easiest way I have found time in my schedule. Mornings provide fewer distractions and less mental fatigue.
If you’re looking for a silver bullet to your dream future, I have nothing for you. While your mileage will vary, the road ahead requires consistent commitment and dedication. Much like writing great software, it takes time and it’s rarely done alone.
Good news! Action leads to opportunities. I’ve come to refer to this as “manufactured serendipity.” Others call it luck. Either way, I’ve noticed a pattern among those who experience the most of it: they are active and looking for opportunities. The habits and rituals built into your daily life will feel like incremental moves, but the overwhelming impact of them can be just that: very good luck.
I’ve noticed a pattern among those who experience the most of it: they are active and looking for opportunities.
What can you tweak in your daily routines right now to optimize for success? It’s the smaller battles that win the war, and this is the starting place for aligning your life towards what’s coming next.
Ask great questions. Experiment constantly. Share your knowledge. Invest time daily.