По сути это работа инженера-конструктора. Проектирование архитектуры из модулей. Часть модулей - готовые, часть - твои собственные. Совсем мелкие модули всегда готовые, это как винтики, гайки или стальные уголки и трубы. Ближайший аналог проектирования в быту - планирование. Планирование покупок, планирование ремонта у себя дома, расстановка мебели. Вот такое. Многое делается в воображении, много учитывается знаний из опыта - какие они, эти модули, какие лучше, какие хуже, и т. д. Поэтому память должна быть очень хорошей. И неправильно сводить все к алгоритмизации, как пытаются выше. Да, там есть алгоритмы. Но, например, интерфейс программы (грубо говоря - компоновка кнопок и прочих элементов управления) проектируется не как алгоритм. Это именно компоновка. И хотя компьютер создает все эти кнопочки не одновременно, а по очереди, он это делает очень быстро (ведь незаметно, что они создаются по очереди?), и как правило программисту вообще неважно, в каком порядке он это делает. А если и важно, то это уже детали... Тестирование и прочая отладка - это уже ближе к навыкам ремонтника. Понимать, как устроена и работает система, и если возникла проблема - то в каком именно модуле она могла быть. И в каком модуле она может возникнуть, даже если пока вроде все работает нормально.