Lessons Learned in 10 Years as a Software Engineer at Startups

Tomoaki Imai
3 min readJun 11, 2024

--

Somewhere in San Francisco

Ten years ago, I left my job at IBM and began working as a software engineer at Mercari, an early-stage startup back then. Over the past decade, my journey has been filled with various experiences and growth. I worked for a really small startup and even founded my company. I work with people from different countries and have taken on roles such as tech lead, manager, and CTO.

My approach to software development has evolved over the years, and I’d like to share some key principles I’ve learned and cherished.

Software, Architecture, and Code

  • Software must generate value for others, such as solving problems or reducing costs. Clean code alone does not drive revenue.
  • Architecture and programming language trends change. Instead of chasing trends, choose designs and programs that fit the team and product at that time.
  • Enjoy experimenting with new paradigms or programming languages. Sometimes, I need to have fun with my work.
  • Poorly designed abstractions can become tech debt. Ensure I have enough time for design. Ask myself if it will be usable three months later; or if the dependent libraries or frameworks will not affect my abstraction. If any answer is NO, reconsider.
  • Clarity over Cleverness. Go with code and design that everyone can understand rather than overly smart solutions.
  • Skill Diversity. Everyone has different skill sets. It’s crucial to educate the team on design principles and fundamentals.
  • Continuous Learning: Again, everyone has different skill sets! That applies to me, too. Try to continuously learn and update my knowledge.
  • LOGAF Rule: Familiarize everyone with the LOGAF rule. E.g. I don’t care much about Lint but value performance and understandability.
  • YAGNI and KISS, followed by DRY.

Behaviors

  • Always leave behind step-by-step guides and work notes. Write meeting minutes for all interactions. These always help someone, including myself.
  • Rely on best practices and the knowledge of others. Most problems have been tackled by someone before.
  • Don’t blindly rely on best practices and the knowledge of others. Think about how to apply them to my challenges.
  • Read errors thoroughly. Understand the problem before googling (or asking AI).
  • Step back and revisit tough bugs. If I encounter a complex bug, come back after sleeping, walking, or taking a shower.
  • Invest in communication. Most information doesn’t get conveyed fully in one go. Repeating my message to my team as often as necessary.
  • Engage people to achieve big goals. To engage people, I must be able to explain things better than anyone else.
  • When trying something new, practice extensively. Get my hands dirty. The more I get stuck, the more successful I will be.
  • Drive your work with curiosity. Don’t just read or listen and think I understand everything. Get hands-on.
  • Be nice to my colleague.

These principles are the ones deeply ingrained in me. What updates will the next ten years bring?

--

--

Tomoaki Imai

CTO at Noxx https://www.noxx.net/ AI hiring tool. FullStack developer and leader. Love to share ideas about software development. https://github.com/tomoima525