The idea is to isolate and list al the CONCEPTS from a field to be taught and make sure they are covered in a non-repetitive way. By this I mean that it is clear to what level of detail concepts have already been presented in the prerequisite course and then instead of reintroducing them just build upon and reinforce understanding of these concepts through their USE. The easiest way to do so is to choose a reference book (one that is non-idiosyncratic and is commonly accepted around the world) and then partition concepts into groups to be covered in each course, specifying the level of detail. Example: When it comes to algorithms and data structures, one can take say Cormen, Leiserson and Rivest's book that is very complete and then decide what chapters to cover in what course and to what extent. I feel adoption of a single book whenever possible would be extremely beneficial to students in many respects (a single textbook to buy, re-used for several courses, a unified approach and formalism, and easier getting around in the textbook, single familiar style) but this is not necessary: if a lecturer wants to use something else, this is OK, but we would all cover the same BASIC concepts to the prescribed depth. If the same concept is done again (say binary search trees) then it would be clear what can be assumed and only reinforced through exercises and problem-solving, and what is introduced for the first time, and thus in detail "from scratch". I hope this helps so that you can summarize this observation. Please let me know if you need anything else. One outcome would be to avoid immense overcrowding of courses like 2011 that is packed with very hard material (presented on top of Java). Say in 2011 we do sorting once for good, while transfering some of the advanced stuff like some of the search trees into 3121. Now students in 3121 have no clue why there are so many sorting algorithms and have no idea what the expected time of an algorithm is, let alone how to evaluate it. A lot of them proposed on my midterm to design a linear time algorithm that involves building an array of size 10^12 to use counting sort because it is fast!!! I feel stuffing a course with too much stuff serves no purpose; there must be a reasonable amount of time spent in reinforcing concepts with lots of good exercises and applications, so that they do not make such bad mistakes. If they see tons of fancy stuff in a rush they end up getting nothing out of it; they have no clue how and when to use it.