The entire post is very long and detailed but I wanted to post some key takeaways as they apply to pretty much any project.
Make your code readable. "Code is primarily means of communication."
KISS. "Apply simplicity at all levels."
Flexibility "Programs should be flexible in the ways they change, they should make common changes easy or at least easier. "
Approaches to coding. When thinking about Agile, people start creating sprints of 2 weeks or less. When prototyping, an even quicker sprint came up - "what would be the demo we would like to show at the end of the day. And his next question was what test to write."
Write tests that test needed functionality, at a high or unit level. "Speculating about failure points can be just as wasteful as speculating about design."
Write Code in the Test, then Refactor. (I know, think about it. I actually started doing this when I was first learning TDD and thought - "is this really what I'm supposed to do?") " Instead of thinking about how it should be organized (what classes to create, where to put them, whether to use a factory class or a factory method), why not initially write the code directly in the test method? You can always factor out the code later."
Focus on one thing at the given time. " If you notice along the way something else that needs to be done – giving a method a better name, removing a dead code, fixing an unrelated bug – don’t do it, put it on a task list and do it later. "
Symmetry in Code. "Symmetry in code is where the same idea is expressed the same way everywhere it appears in the code."
The entire post is a great read.