As a senior software engineer and now Team Lead, I've learned a lot through my career, here's a list of things I wished someone told me when I was just starting out…
Be proactive: The biggest mistake you can do is assuming leadership will tell you everything you need to do, remember they're just human beings like you and can be just as overworked or distracted like you. Own your team's and company's mission and goal. Don't wait to be told; think about what needs doing and do it, advocate for it or delegate it. Most managers depend on the creativity, curiosity, and intelligence of their engineers, not figuring it all out themselves.
Know the business value of your work: Think like the CEO of the company. Understand and know the value of your work for the company and take responsibility for reasoning about quality, features, speed and perceived value. Know the impact of the software you are writing, your job isn't just to write idiomatic software; your job is to make good decisions and help your company and team members succeed, and it requires understanding what really matters. A good question I like to ask myself when I get started in the morning is "Why am I on the payroll?" Regardless of the chaos of building teams and product that question has kept me on track to providing value at every opportunity.
Get curious when stuck: The human brain isn't designed to sit in front of a computer and write logic for 10+ hours, getting stuck is something every engineer experiences. Learn to never, ever accept getting stuck; find a way by persuasion, escalation, or technical creativity. Read my other post on problem-solving like a computer scientist for an easy way to approach your roadblocks. Again, your job isn't just to write the software and wait for everything else to fall into place; your job is to figure out how to create value with your efforts through writing software.
Improve your technical writing: Clear writing on documentation will enable your team to love you, why? because they understand you and want to learn more from you. Documenting your code and effectively writing down your explanations for why using certain technologies/frameworks to do certain tasks will build context for your peers.
ABL(Always Be Learning): Always be learning, imagine Alec Baldwin screaming Always Be Learning! in your head. Pursue mastery of your craft. Your career should be a journey of constant growth, but no one else will ensure that you grow. Find a way to make learning part of your daily life (even 5 minutes/day); get on mailing lists, find papers and books that are worth reading, and read the manual cover to cover for technologies you work with. Consistency is key; build habits that will keep you growing throughout your career.
Be your own project manager: Know the roadmap of the product you're building, if you can't see the vision for it. Ask, ask, ask… the only way to know the end goal is to ask your manager/team lead, what the end goal is. Plan your day/week of productivity in advance, write out weekly goals for the product you're building. Set meeting with your team, to clarify on things you aren't certain on.
Make sure your immediate supervisor can do your job: Make sure your manager or immediate supervisor can do your job or is capable of understanding the intricacies of your work. This will ensure they aren't lost during the SDL and value the work you do. The worst thing that can happen to you is, your manager not knowing how much effort or pain you've had to endure to make your work come to life. Strive for a technical manager/team lead, don't settle until you have this.
Practice proactive communication: Regular, conscientious communication builds confidence in collaborators; knowledge-sharing resonates an atmosphere of learning and camaraderie. Set a regular cadence of informing stakeholders on project goals, progress, and obstacles. Speak up during meetings and share your opinions during meetings.
Familiarize with your tools: Know the ins, outs, and arounds of your IDE, editor, debugger, compiler, container management system, network analysis tools, and terminal commands. This is incredibly empowering and likely the best way to increase your development speed. When you come across a new piece of technology, get curious and learn it, spend time with the tools that help you grow, you'll only improve when using them.
Collaborate with your cross-functional teams: Good collaboration increases your leverage and improves your visibility in your organization. Advancing as an engineer requires that you have a significant impact beyond the software you create, this means building a personal brand at your company and becoming a linchpin.
Maintain professionalism: You are a professional and act like one. Come to meetings on time and prepared, and pay attention, don't multitask, if someone is talking to you, focus on them. Deliver when there's a deadline and communicate proactively when things go wrong (they will). Maintain a level head and express objections respectfully. Show your colleagues respect and appreciation. Minimize your complaining; elevate the spirits of the people around you. Everyone appreciates this and will remember you for this.
Your focus determines your reality: What you choose to focus on will determine your reality. So choose what parts of a project to focus on wisely because that's what your experience will become. If you happen to be working with rude people at the workplace(it's happened to me), choose to focus on yourself, and your work, on how you can create excessive value for your team and Org. When I was at Tesla, a lot of changes we're made, VPs leaving, Elon's crazy tweets, colleagues leaving, people joining, project deadlines changing, announcements of new products. A lot can happen in a growing company, you need to choose wisely what you want to focus on because that will determine your reality and experience of your professional career.
I will keep adding to this list and as I progress through my career. If you'd like to add to this list please comment, and I'll add your wisdom to it.
I originally shared this on medium here: https://medium.com/@nbosco/how-does-a-software-engineer-grow-ff9b89f4d9b9