Product delivery is simple and complex, all at the same time. The issue is that we always want 3 dimensions of delivery. We want it: Quickly, Bug-free, All the “important” features. The problem is that you can only deliver on 2 of the 3 at the same time.
Most software engineers start by thinking about the code. Instead, start with the why so you solve the right problem the first time.
Every software engineer has that moment. You are assigned a feature requirement. It could be a Jira ticket or a sticky note. You first start brainstorming if this is possible, how you would achieve it, and how much time it might take. But before you start thinking through the technical implementation, you need to step back and ask "why"?
So here’s the thing, no matter how you learned software development, either in a degree program, through self-reaching, or by using a bootcamp-style program; one big risk is that what you learned yesterday isn’t necessarily going to help you tomorrow.
Our library is in TypeScript and we wanted to provide IDE suggestions for the values of a parameter, but we couldn't actually restrict the value of that parameter. This is because 90% of the time, the value would be a couple of obvious values, however the other 10% of the time, we had no way to predict what the value would be!
You can let your career be blown around by the winds of happenstance or you can set a course toward the island of your dreams. I wish I had planned out my career earlier.