When you’re in the phase of building something new I think the most important thing is to have a clear focus on who you’re optimizing for and why.

You could optimize for the creators happiness, future résumé and his or her opinions on what is The Right Way (which usually translates into the authors subjective opinion on The Right Way). Or you could optimize for speed. You can optimize for rewriting the whole thing later on. Or the infamous “doing it right from the start”, which everyone knows never ever works. You could optimize for the ones who are going to be building something using your code. There are also things like building for business value and such things, but that is just smoke clouding the real objectives which I have just mentioned.

I think one important aspect which always applies is to see how the thing you’re building will be used and how those developers prefer to work or are familiar with working. What good is a piece of software if nobody is able to use it to perform the task it was intended for? Or if an architecture is so locked down nothing is possible without major workarounds?

The human factor is important. What mental programming model are the currently using? How would introduction of a new model of programing which should coexist with the current? These questions are often lost to the ones establishing an architecture, framework or library. Searching for The Right Way is in my opinion less important. What is important is that you create something which others can build upon and utilize at their level of expertise.