As a software engineer, I’ve had the privilege of navigating the ever-evolving landscape of technology and teamwork. Along the way, I’ve encountered countless lessons, some learned through triumphs and others through trials. In this blog post, I share 51 hard-earned insights that have shaped my journey, with the hope that they may serve as guiding principles for fellow engineers and aspiring professionals.
Embracing the Craft
- Vim > Emacs: Embrace the power of Vim for efficient coding.
- JavaScript is fun: Find joy in the language’s versatility and creativity.
- TypeScript is awesome: Harness the benefits of static typing for robust code.
- Keep It Simple Stupid (KISS): Strive for simplicity in design and implementation.
- Fundamentals > Language and Framework: Master core principles that transcend specific technologies.
Navigating Teamwork and Communication
- Disagree and commit: Respect differing opinions while driving towards a common goal.
- Always ally with product: Collaborate closely with product teams to align technology with user needs.
- Add context to Pull Requests: Enhance collaboration by explaining the rationale behind code changes.
- Present solutions, not problems: Offer constructive suggestions when addressing challenges.
- Be familiar with the art of DevOps: Bridge the gap between development and operations for seamless deployment.
Embracing Change and Growth
- Always expect to pivot, always: Embrace change as a constant in the software development lifecycle.
- Become comfortable with failure: Learn and grow from setbacks in pursuit of excellence.
- Don’t worry about your 10-year plan: Stay adaptable in a rapidly changing industry.
- Enjoy the learning curve of being a junior engineer: Embrace growth opportunities and mentorship.
- Move towards brilliance and away from brilliant assholes: Cultivate a positive and inclusive workplace culture.
Maintaining Balance and Well-being
- Never compromise your mental health: Prioritize well-being amidst the demands of work.
- This too shall pass…it’s hard now, it will pass: Maintain perspective during difficult times.
- The zone is real, you will get trapped for hours: Balance deep focus with regular breaks to avoid burnout.
- Fast-paced environment = Expect to be overworked: Set boundaries to maintain a healthy work-life balance.
- If you need to talk, reach out to someone, me, anyone: Prioritize mental health and seek support when needed.
Interviews and Hiring
- Make technical tests match the job: Assess candidates based on relevant skills and requirements.
- Stop giving unstructured interviews: Design interviews that evaluate candidates effectively.
- Interview for logical thinking and attitude: Assess problem-solving abilities and cultural fit in interviews.
- Do not give multiple-choice timed tests in interviews: Assess candidates’ abilities authentically.
- People-first work cultures will not look to trick you in interviews: Seek environments that prioritize employee well-being and growth.
Embracing Responsibility and Impact
- Lots of lines of code != Good Engineer: Value quality over contribution quantity.
- Nearly everyone works on legacy code: Embrace the challenges of maintaining and refactoring existing systems.
- Get involved with other areas of the business: Understand the broader context of your work.
- Do not measure success by the number of commits: Value impact and quality over quantity.
- Be obsessed with the data, success metrics everywhere: Make informed decisions based on empirical evidence.
Fostering a Positive Culture
- Be honest, early: Transparency fosters trust and prevents surprises.
- Let go of the ego. Trust people with the hard tickets: Foster a collaborative and supportive team environment.
- If it can be done via Slack or Email, don’t book a meeting: Respect colleagues’ time and prioritize asynchronous communication.
- If you want your team to be vulnerable, be vulnerable first: Lead by example and foster a culture of openness and honesty.
- If it’s not written down, it’s not worth the paper it’s written on: Document decisions and agreements for clarity and accountability.
Embracing Continuous Learning
- You don’t need advanced Math: Focus on practical problem-solving over theoretical concepts.
- You won’t always work on fun stuff: Embrace the diversity of tasks in software engineering.
- Never let a mentor touch your keyboard: Foster independent problem-solving skills through guidance.
- Cheating is encouraged (Stack Overflow, Chat GPT…): Utilize resources responsibly to solve problems effectively.
- If you are the smartest person in the room, get out of that room: Surround yourself with diverse perspectives and continuous learning opportunities.
Maintaining Perspective
- You are more, much more, than the sum of your career: Define success beyond professional achievements.
- Create sacred work/life boundaries early and stick to them: Preserve work-life balance to sustain long-term productivity and well-being.
- Avoid fillers like ‘but’, ‘however’, try to listen without responding: Practice active listening and empathy in communication.
- If your startup CEO is not obsessed with fundraising, be worried: Evaluate the alignment of company goals and priorities.
In conclusion, the journey of a software engineer is marked by continuous learning, adaptation, and growth. By embracing these lessons, we navigate the complexities of our field with wisdom and resilience, striving to make meaningful contributions and create positive impact in the world of technology. Let these insights serve as guiding principles as you embark on your own journey in software engineering.