I'm an entry-level engineer who recently joined a team working in a new domain for me. Despite my best efforts, I find myself making mistakes in my code, such as forgetting edge cases, missing function calls, or mishandling character escaping (to quote a few recent ones). While these errors should ideally be caught during unit or integration testing, our team lacks a formal review process, leaving me solely responsible for testing my code before it gets merged. Consequently, bugs occasionally slip through, requiring post-deployment fixes. Although we're not a customer-facing team, I am afraid this puts a question on my reliability and erodes trust the team can place on me to write good code, that doesn't require iterations of fixes.
Could anyone offer advice on how I can better anticipate scenarios and prevent bugs from being introduced? I'm also unsure whether my challenges stem from a lack of technical skills or effective communication. How can I ensure I'm asking the right questions and considering all relevant factors before writing code?
Any insights or suggestions would be greatly appreciated.
What's your current process? From this post, it seems like you're operating more in a single-player model instead of a multi-player model where you are proactively soliciting feedback before a single line of code is written. If you build a reputation as a stellar planner (i.e. someone who lays out the plan in the task and is great at getting feedback for it), you will be on your way to a mid-level promotion in no time! Follow the advice from my code quality course starting from this lesson: Sweat The Details, Call Out Edge Cases
When it comes to edge cases, the course also has an incredibly detailed example which hopefully helps configure your brain at least a little bit better to catch edge cases going forward.
All that being said, I want to make clear that it's 100% okay to make mistakes, especially for a junior engineer working on a new domain like yourself. What's important is that you never make the same mistake twice. Follow the advice here to do that:
IMO the goal should NOT be to write bug-free code. (This is an impossible task.) The goal should be to have enough tests/metrics/alerts in place so that you can quickly identify and fix anything that goes wrong.
This discussion can/should be included in the test plan of your diff :)
Very relevant discussion: Getting over a fear of breaking code - How to do it?