The best code is no code at all.
Second best is simple, easy-to-read-and-understand code.
“A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over, beginning with a working simple system.” – John Gall
The best (and only) working software (and software architecture) comes from starting with a simple use-case and extending from there. Don't be afraid to refactor.
“duplication is far cheaper than the wrong abstraction” – Sandi Metz
Duplicated code itself is not evil. Deduplications and clever abstractions may make your code shorter, but may also make it harder to reason about - and harder to extend.
Start with something that's working and improve (and refactor) from there. Whether you're working on a whole architecture, or a simple feature.