It's interesting to watch people go from beginner to advanced in programming. They have this mental hurdle to fight. Beginners follow, advanced lead. They have to overcome the idea of "using best practice" so they can actually break out from standard and "create best practices". They go from using interfaces from others to creating them for others.