When working on my introductory computer science class for non-majors, I started with the objectives. From there, I thought about the types of assignments and tutorials I wanted, but mostly moved on to figuring out the actual lecture content. I like to organize my courses by specific problems in a way that is loosely related to inquiry-based learning.
With this approach, I think about the kinds of things that my audience might find useful or interesting. The earlier problems tend to be more on the interesting side, but by the end the problems should be more relevant to the students' fields. During lectures, I will introduce the problem by showing the completed software, then go step by step in showing how that software is built. In the process, new concepts need to be introduced. For example, when we start to get bored of repeating certain values all the time (and start to run into errors when changing these values), I'll introduce variables.
The best part about having my learning objectives done first is that I can use them to make sure I've hit all the main points within these problems. As I write out my step-by-step outline, I highlight key words that are colour coded to the objective they relate to. I imagine this will also help tremendously as I move on to writing the code and creating the lecture slides and peer instruction questions.
Here's an example of the second problem's design for this course:
With all of this laid out, it will be much easier to fill in the details. That's the most fun part!