When I started working on my own app I had to adjust my priorities of learning vs doing. As an employee, I didn’t always have a choice on the technologies and frameworks being used. For my own software product I could choose whatever I wanted and I always wanted to choose the best tools available even if I wasn’t familiar with them. My rationale was that besides building the app, I’ll also learn a new technology and improve as a programmer. However, what I was doing to improve my skill-set as a programmer, many times turned out to be counterproductive to shipping software.
I used to try to learn as much as I can about the best ways to write the best code. It included constantly trying out new programming languages and frameworks. I soon realized that this is something I had to stop doing due to lack of time. It is more productive to work with the same technologies and get very familiar with them rather than to spend a lot of time to experiment with new tools. While it’s true that learning new technologies is important for your work as a programmer, when you need to ship a product it doesn’t matter to the client which programming language it was written in.
For the same reason I also stopped checking the new shiny frameworks on the front page of hackernews. These days I prefer to stick to the set of tools I always work with. It’s more interesting to play around with and try out new tools and even rewrite your software in a new language or framework, but it’s more productive to resolve boring bugs and weird edge cases with the same framework you are already working with.
I think that there is a tendency today to overrate the importance of using one popular framework over another. A new framework may be a little faster or more elegant. But as long as the client can’t tell the difference and the programmer is comparably productive, it doesn’t really matter. To switch from PHP to nodejs, and then from nodejs to Go takes time, effort and it shifts focus from working on the product to dealing with technical issues that don’t bring almost any value to the client. Especially if you work alone and have limited time each day to work. I recommend sticking to the same tools and learn them well even if there are newer better versions.
The most important thing is shipping. Everything else is nice to have. If you have time to keep trying to stay up to date with the newest, that’s great. But if you only have a few hours a day and the choice is between learning something new or shipping a working product with older tools, you must make sure that shipping comes first.
The irony was that by stopping playing around with new tools and demos and focusing on shipping actual working products that have users, I feel like I’ve became a much better programmer than I used to be.