As a developer, we all start from somewhere. And when we started, we really sucked. But since we didn't know anything then, there was nothing to lose and everything to gain. That's the Day 1 mentality.
As we work through the ranks, we become more knowledgeable. At this stage, it's so easy to stay in the familiar and keep doing the same thing. If you've been doing Ruby on Rails for 5 years and are in a Ruby on Rails tech company (as I was), there is no reason to study other languages. You can just keep coding Ruby on Rails the same way, and the paycheck arrives at the end of the month.
By not exploring other programming languages/technologies, you are closing yourself off to their possibilities. Each programming language specializes in some sort of problem area.
- Ruby is really great for web development.
- Python: is more versatile. It is great for data science, machine learning, scripting, and web development.
By using Ruby to do everything, we are using a blunt tool to address different problems that other programming languages could have better addressed.
It's easy to say, "okay, we are going to use Python" for this task. But when no one in the team has coded Python before, there's a being tradeoff made. Starting over a new language takes time, and developers will eventually make mistakes as they start off. And these mistakes can be potentially costly.
At the core of this hesitation are fear and laziness. Fear of making a mistake that can potentially cost the business. And laziness of making sure that those mistakes don't happen.
What happens is a sort of complacency that's self-reinforcing. The more we don't try out new things, the more we build on the old tech. The more things we build on the old tech, the more we have to lose if we change it.
While we can't revert to our foolish state when we started, we can take the mentality we had back then and apply some of it now. We don't need to dive in recklessly and make all of our developers do Python all of a sudden. But we can dive in smartly.
We can define the feature pipeline and identify where our current tool (Ruby) doesn't quite fit. We assign a person to learn Python and find a small project (to be deployed in production) that uses Python. As the team gains confidence coding in Python, we roll that out for more projects.
With the Day 1 mentality, we don't accept the reason "it's been done the same way before, it's going to take much effort to change it" for not using the best tool for the project. We challenge assumptions we hold. Is this really the best tool for the task? If not, what's stopping us from using it?
Don't get me wrong. It's a lot of work. And I have to apply NodeJS for my next project. But it pays off because over the long run, I know I'm using the best tool for the job.