A little bit of context: I have former teaching experience by teaching CS basics to teenagers (K-12). But after some time working in the industry, I'm currently teaching BSc and MSc CS topics to adult students in a local technical university.
However, I am currently not quite satisfied with the current "universal" method of lecturing theoretical concepts with the ocasional laboratory assignment. I feel that I lose too much time preparing theoretical lecture slides which the students won't fully understand since they lack the field experience I have.
My problem is mostly with the MSc students as I'm teaching more advanced concepts to them (Distributed systems). For instance, explaining things such as how transactions may succeed or have to roll-back if they fail, is just a detail that they will forget eventually after the exam.
So I'm starting this thread in the hope that I can read your experiences teaching adults on CS or other subjects, and hoping to get some literature, books or articles about things that you think that it may work!
Hopefully the above advice helps with the lecture portion. As for labs, my experience says that practical exercises are great and my experience says that lab exercises are too contrived to be even slightly useful. To explain: I took an online distributed systems course to balance out my self learning and work experience. Their code work / labs were terrible. All the scaffolding was in place and it boiled down to "translate these algorithms to scala." I gave me no insight or feeling or deeper understanding of best effort broadcast or anything else. Mostly, I wrestled with trying to grok scala. However, previously implementing toy (read mostly broken) versions of Paxos and Raft (which I had done prior to taking the class) gave me a solid understanding and appreciation for the nature of the problems they attempt to solve. Reading the papers and attempting to code up what was presented worked better for me.
Cheers and good luck.