Learning vs Delivering
Software is complex. Developing a feature that is user-friendly, performant, and secure, while also writing code that is clean is already a real challenge. There are many articles and videos that discuss the various tradeoffs that businesses face when developing software. Take too long to develop, and the business won’t meet its delivery goals; develop too quickly, and we might miss out critical issues like security.
As a new software engineer, there is plenty that I don’t know. I was recently tasked with developing a feature that involved user authentication, and I had no clue how authentication works. I decided to read up as much as I could about authentication in a bid to understand it. However, I faced a dilemma. Was I learning too much? I want to deliver the feature, but how could I be sure that (as a newbie) I sufficiently understood the inner-workings of authentication to implement a secure feature?
I do not have an answer to this dilemma yet. As a software engineer, I strongly believe in understanding things from the ground-up. As a budding entrepreneur, I see the value in shipping fast, even if I don’t necessarily understand everything that is going on.
But perhaps I do have a personal answer. Sometimes, I think it takes some blind execution first to discover what works and what doesn’t. Whether I choose to execute first or not, I will always choose to understand eventually.