This is the TL;DR section of a much - much!! - longer article over on my dev-blog. Feel free to visit the original article.
When suddenly songs in my Spotify playlists were not available anymore but an alternative version (remastered album, best-of album) could still be found, I had to add a missing feature to Spotify.
My software would find "unavailable" tracks and search for alternatives. The user could then add one of the search results to a "revived" playlist.
In the process of writing the software, I learned a lot about writing software in a very general term but also about language-specific topics, benefits of IDEs and how to design user interfaces.
I added a huge amount of comments to my code, documenting how things are done and what the code does. This does not only help myself when I review the code later on but also contributors who want to improve my software.
Knowing how paralyzing it can be when there are no responses to your questions confirmed me in my thinking that communication with other developers is a crucial tool to make your software accessible to more users.
During the process of making the application I learned about new aspects of languages familiar to me. Those aspects included type hinting in PHP, adding event listeners and dispatching events in JavaScript.
Writing JavaScript code without frameworks proved to be simple. Of course frameworks like jQuery simplify some tasks but is it worth all the required bandwidth?
Type hinting is a great tool to improve the readability of code.
Sass enables a developer to easily prototype the design of a software because of variables.
Skeuomorphic design is harder (but in my opinion more beautiful when done right) and requires you to think about your design more.
Release early or you might not release at all.