Одного разу, давно будучи студентом, мене попросили пояснити щось за недільний обід - один з найбільш освітніх досвіду, який я коли-небудь мав. Людина, яка задала це питання, виявилася не дурною - але не мала досвіду, рівня знань, який я припускав, просто не було. Я почав відповідати, отримав порожній вигляд, змінився, все ще порожній, знову змінився, все ще порожній ... хм ... так що я почав так само, як ви починаєте створювати додаток, з невеликими блоками пояснень, що ви можете будувати щось більш суттєве.
Ключовою частиною цього уроку для мене було (і є) саме те, наскільки ми припускаємо (не лише програмістів, всіх) про знання інших людей про нашу обрану спеціальність, хоча насправді навіть ви можете з розумом припускати, що більшість людей знайте, що 1 + 1 = 2, але після цього стає цікаво.
Отже, перше і найважливіше, що потрібно зрозуміти, це те, що люди не знають і не розуміють, що ти робиш, - але вони розуміють, що вони роблять, і коли ти пояснюєш речі, тому потрібно почати з простого і залишатися на відповідному рівень для вашої аудиторії.
Щодо конкретних прийомів - я думаю, що @Josh K це досить висвітлював - і я підкреслюю, що аналогії є абсолютним переможцем.
І ще одне - час від часу може бути прийнятним просто списати речі як "видовищні речі", люди не завжди хочуть отримати повне пояснення, чому і якщо ви раніше виявляли готовність пояснювати та вміти робити тож зрозумілою манерою люди будуть схильні довіряти вам, коли ви припускаєте, що "складні технічні причини" застосовуються, або що в кінцевому підсумку ви можете досягти певного результату, "виконуючи речі з вундеркінда" (або "речі програміста" або будь-який термін, який добре працює в ваші оточення).
Спілкування технічних речей з нетехнічною аудиторією (однієї або декількох) - це вміння, яке ви можете розвинути, і те, що вам потрібно.