If you are writing it from scratch, you are most likely doing it wrong.
I concluded after seeing tones of lines of code implementing simple ORM in a product which had no business doing it from scratch. The code was technical debt from day one and was treated so — redundant, unmaintainable, full of static functions satisfying individual developers urgent itch.
Whenever faced with a challenge, why do we have a tendency to start from scratch? What makes it so hardwired that it takes many years of experience to avoid this trap?
I think the problem is with the way we learn to write code. Too often our exercises and assignments expects us to starts from scratch. Each of us start with our own Hello, World. We practice tones of programs, each starting from scratch. We become good at it — at starting from scratch. So good that it becomes our default starting mode for any programming task. It also becomes our default starting point while thinking of a solution.
I am sure we could come up with ways to learn code which are also in sync with ways to software engineering.