There's always a trade-off between how much time you spend upfront designing and implementing things. Software design often breaks problems down into smaller chunks that can be solved in one go. One of the challenges with software design is it almost has this creativity aspect to it, where you could just keep polishing or sculpting indefinitely.