Однажды, давным-давно, еще будучи студентом, меня попросили объяснить кое-что во время воскресного обеда - одного из самых образовательных событий, которые у меня когда-либо были. Человек, задающий вопрос, был явно не глупым - но не имел опыта, уровень знаний, который, как я предполагал, просто отсутствовал. Я начал отвечать, получил пустой взгляд, изменился вниз, все еще пустой, снова изменился, все еще пустой ... хм ... поэтому я начал так же, как вы начинаете создавать приложение, с небольшими блоками объяснения, которые вы можете встроить в нечто более существенное.
Ключевой частью этого урока, для меня, было (и является) то, сколько мы предполагаем (не только программисты, все) о знаниях других людей по выбранной нами специальности, хотя на самом деле даже вы можете разумно предположить, что большинство людей знаю, что 1 + 1 = 2, но после этого это становится интересным.
Итак, первая и самая важная вещь, которую нужно понять, это то, что люди не знают и не понимают, что вы делаете, - но они понимают, что они делают, и когда вы объясняете что-то, вам нужно начать с простого и придерживаться соответствующего уровень для вашей аудитории.
Что касается конкретных методов - я думаю, что у @Josh K это довольно хорошо освещено - и я бы подчеркнул, что аналогии - абсолютный победитель.
Еще одна вещь - время от времени может быть приемлемо просто списывать вещи как «гиковские вещи», людям не всегда нужны подробные объяснения того, почему и если вы ранее демонстрировали готовность объяснять и способность делать так что понятным образом люди склонны доверять вам, когда вы предлагаете применить «сложные технические причины» или что в конечном итоге вы сможете достичь определенного результата, «делая гиковские вещи» (или «программистские штучки» или любой другой термин, хорошо работающий в ваши окрестности).
Общение технических вещей с нетехнической аудиторией (одной или нескольких) - это навык, который вы можете развить и который вам нужен.