As I think about my own philosophy towards software development I think it is useful to consider it in the context of values. When trying to make decisions what are the yard sticks that are used to measure them? Here are some of the values I have and use in making my decisions:
- Open is better than closed. All things being equal it is preferable to give a client and/or the public a view into the work and its process. Code and prototypes do a better job of communicating the current state of things and how I see a project than any other form of communication. Clients can elect to engage as much or as little as they want.
- The well worn path is better than new. All things being equal if something can be done with a battle tested technology it is preferable to use that than something that is brand new.
- Adoption matters. All things being equal the more people that use something, the more likely bugs are to be found and documentation is more likely to be available to help resolve challenges with a product.
- Stay in your stack. All things being equal you are better off coding something in the technology stack that you and your team have experience with than trying something new.
- Avoid premature optimization. As Sandi Metz has noted, there is no perfect code, just code that works for the needs of today. Whether it is code or in other things, there are lots of ideas that seem like good ideas on their own merits but are not yet necessary for today. When your application struggles to get users then security (unless you are storing sensitive information) matters less than marketing. Servers can be rebuilt, passwords can be reset. Apps can be updated or redeployed. It can feel good to secure your apps and spend time making your code even better but ultimately you need to ship your product and not go crazy. The good news is as you get experience you can build optimizations into your muscle memory. They get cheaper as they become habit. That is why people pay more for more seasoned developers.