What makes a successful software engineer?
Mihai Bojin
Posted on September 30, 2020
This post is a collection of observations I made throughout my career as a software engineer and, more recently, an engineering manager. It is not exhaustive, nor does it contain technical advice; instead, it focuses on "soft skills," which are usually harder to attain than knowledge of technology X or Y.
Curiosity and learning
Be curious. Understand how things work. Ask why. Challenge the status quo. Seek the "why."
Enjoy good puzzles. Love breaking things down and putting them back together. Break things down until first principles, then put them back together; understand composability.
Strive for a Growth Mindset! Be proactive; preempt issues. Seek to understand what works and what doesn't; improve the latter!
Invest in your career. Learn. Nobody is born with knowledge. Becoming excellent at what you do takes effort and patience... and support from managers and coworkers. Build a network. Grow together!
Figure out the learning method that works for you. Is it reading, is it video-based? Books or articles? Tutorials? Whichever one, the key is to keep learning and improving!
Read, improve, share knowledge, help others grow!
Building software
Be a maker at heart. Be excited to ship software.
Draw energy from finishing things. Get things done!
Subscribe to Lean Principles; ship early and often, de-scope, measure, iterate. Not to be confused with "low-quality"!
Build vertical slices (working features) and put them in customers' hands. Don't spend long periods "in the dark" (waterfall).
Place a high premium on data to describe results. If you're not measuring, you're not engineering!
Quality
Care about customers and customer experience! That's what it's ultimately all about. That's what pays the bills!
Ship great software to the best of your personal and organizational ability. Care about results. Own it until it's in the customers' hands, and then some!
Don't compromise on quality! Strive for no broken windows.
Trust
Treat others how you want to be treated! Put yourself in other people's shoes. Develop empathy!
Start relationships from a position of trust.
Place high levels of trust in your coworkers! Remember, you're all working to achieve common business goals.
Once trust is broken, it's hard to rebuild! Do not violate others' trust!
Conflict management
Don't give up on people. Don't label them. Don't put them in boxes! Be patient! Given enough time, everyone will pleasantly surprise you!
Don't let problems/concerns stay unaddressed; bring them to your manager, figure out a plan.
Observe behaviors and performance over time and give objective and actionable feedback. Share things from a place of good intent! Make it non-personal. Ask for permission before sharing constructive feedback. Use SBI. Avoid recency bias. Praise publicly, criticize privately.
All of this is easier said than done. At times, directly giving feedback may be uncomfortable. Don't shy away, though! Don't let issues fester. Get a sponsor (e.g., someone more experienced at giving feedback, a manager, etc.) to help.
This applies to you, as well. Seek feedback! Sometimes it's hard to hear. Do your best. If you fail to receive it, to listen to it, apologize once the dust has settled. Encourage people to keep trying.
Decision making, ownership
Disagree and commit. Groups of people don't always see eye to eye, and that's okay. A healthy debate is required for separating ideas and ego. Once the discussion is over, commit to a plan and stick to it! See "strong opinions, weakly held."
Own what you do! Do not be a victim. Feel responsible for getting yourself out of challenging situations. Be accountable and complete tasks you committed to. Say what you are going to do; then do it!
Value those who are willing to help versus those that expect things to be done for them.
Always strive to improve. Leave things better than you found them!
Deflect credit to acknowledge others' contributions! Do not tolerate credit taking / speak up against it! (That kind of behavior destroys culture.)
Communication
Start by over-communicating and gauge what the various stakeholders are comfortable with. If you're unsure if someone should be notified, include them. Tweak the shared information based on the target audience. Provide enough context for anyone to join the conversation mid-stream.
Keep your team apprised of your whereabouts. Publish PTO and OoO in your calendar, on Slack, etc. Use vacation auto-responders, send friendly reminders!
Keep your manager informed, good or bad. (Inside tip, most managers don't like surprises!)
Note-taking
Rely on a system, not your brain. This minimizes errors. Brains are not always reliable.
Take notes, keep a journal. (If you prefer pen and paper, look into the Bullet Journal method.)
Mentorship
Be a 10x engineer. Be a multiplier! Collaborate and solve problems with your peers.
Mentor other engineers. Lead the projects you're involved in, without necessarily holding an official title. Preempt problems and develop alleviation plans.
Problem-solving
Come prepared. Don't merely bring problems. Do your research and propose solutions.
Don't be afraid of making mistakes. Take risks.
(Most of the time they pan out. Sometimes they don't. That's okay.)
Own your mistakes! Learn from your mistakes. Understand why things fail or don't work out.
Organize post mortems. Use the 5-whys to identify root causes and improve your processes.
Don't repeatedly make the same mistake.
Ask for help when you need it. Help others when they need it!
Last but not least: Joke around. Keep it lightweight. Don't be overly serious. Smile! Be happy!
Cover image source. Used, with thanks!
Posted on September 30, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.