This id 100% personal opinion…
Step of progress in terms of programming skill(excluding co-working skill).
1. Coding with giving attention to the language syntax.
2. Coding his/her own thought quickly. (number of code line per hour is a lot. But, very buggy & poor design)
3. Realizing difficulty of debugging. So, coding considering debugging. initial speed becomes slower than (2)
4. Realizing software design. Coding considering design too. (slower than (3))
5. Knowing design techniques and importance of interface design, but immature. So, software is tended to be over-engineered. Lots of time is spent on designing over-engineered-software, interface and so on. In this stage, programmer knows about “What should be considered for good software”. But he/she doesn’t have any idea/experience about solutions. That’s why initial speed is very slow.
6. Being mature. Becoming faster step by step.