- top-down approach: you state your problem, think it through, consider all related work in this problem space, think very hard, come up with multiple possible solutions, evaluate their trade-offs and implement the best one (a-la Hammock-Driven Design: https://www.youtube.com/watch?v=f84n5oFoZBc&t=1816s)
- rapid prototyping: you state your problem, come up with the easiest possible solution, test it, repeat (a-la Lean Development: https://en.wikipedia.org/wiki/Lean_software_development)
I know some great examples of the first approach (Clojure, Datomic, maybe Git?), but I don't know that many successes of the second approach. Furthermore, my personal work experience leads me to believe that the second approach, at least in practice, leads to a lot of wasted effort, so I'm interested to know whether it is so or not.