Here's something I see with well informed beginners: They have to do everything perfect all the time.<p>No you don't.<p>Technical debt is like actual debt: It's bad to let it pile up, but it can give you powerful leverage. Don't quite know how to do something? Well, if you don't even know exactly what it is, it's going to be much harder to write it in an elegant way from the get-go! Write it so it works at all, then refactor your way out of stupid architecture.<p>I did this the other day, even though I already had an architecture designed, and what I came up with was even better than what I had thought of. The code will talk to you. There may well be CodeSmells. By playing with code, you can often see EmergentDesign.<p><a href="http://c2.com/cgi/wiki?CodeSmell" rel="nofollow">http://c2.com/cgi/wiki?CodeSmell</a><p><a href="http://c2.com/cgi/wiki?EmergentDesign" rel="nofollow">http://c2.com/cgi/wiki?EmergentDesign</a><p>Technical debt isn't a sin. It's a tool, but it's a tool that can bite you, so use it wisely! (Analogy: It's the shop owner who should decide when to get a loan to buy inventory, <i>Not The Customer!</i>)