написание CMS очень сильно перекликается с созданием framework.
Вспоминаю как я сам начинал:
1 - покумекал, почитал чужой код... пришел в ужас. нифига ж не понятно... по сто раз повторяются одинаковые строки на SQL и типичные команды работы с ними... все густо засеяно html-кодом... и все это под толстым толстым слоем ООП. Учитывая что это было во времена процветания php4 то ООП вообще был непонятно на кой... только чтобы запутать начинаюшего... в общем никакой обфускатор не нужен
2 - принятие решения написать самую ПРОСТУЮ и ЛЕГКОЧИТАЕМУЮ CMS. Первой мыслью было максимально упростить код. Естественно как программист с немалым стажем (php и вообще вебкодинг я видел в первый раз но в детстве ассемлером не гнушался) я решил вынести весь html код нафиг из своего кода... та же участь была уготована sql коду. К счастью я тогда был неопытен и не знал о таких чудовищах как smarty.. поэтому написал свой первый шаблонизатор...
потом поскольку с SQL я тогда был слаб, то тупо взял класс из какойто CMS и написал над ним процедурный врапер, чтобы мне было удобно работать с mysql...
3 - потом я начал писать собственно код и понял что мне нужна еще одна стандартная часть ядра - система управления сессиями (авторизация, управление правами и тп)... этот модуль ядра я написал, также написал над этим модулем простейшие функции типа login/logoff/редактирование профиля и админская панель управления пользователями (в профиле редактировались только логин/пароль, а у админа была также была возможность выдавать пользователю разный уровень прав и список пользователей плюс функция удаления)
4 - я посмотрел на все то что вышло, и после того как налюбовался на свою работу составил ТЗ на расширение функционала ядра. Я добавил в шаблонизатор вывод массивов и условную конструкнию, а также немного доработал модуль сессий чтобы можно было легко объединить редактирование профиля пользователем и редактирование пользователя админом в один модуль...
также внимательно присмотревшись к тем действиям которые я выполнял над MYSQL я сделал несколько типовых функций которые автоматически генерировали типовые запросы типа select insert и тп.
5 - следующим этапом я прошелся по всему своему коду, и покомментировал каждую строчку, потом почистил код от трудночитаемых конструкций и удалил к чертовой матери чужой класс работы с MYSQL заменив его своим процедурным и гораздо более читабельным (и в разы более быстрым кодом).
6 - имея этот простой и очень читабельный код я перешел уже к тому чтобы копипастить свой собственный код и окрыленный тем как это все круто я написал множество CMS которые уже могли иметь какоето практическое применение (был даже простенький форум, с топиками, категориями. аватарами модераторами и многими другими функциями..)
7 - наигравшись вдоволь со своим движком я снова перечитал весь код, поисправлял баги, поправил коментарии... и ПОЗАТЫКАЛ ЭЛЕМЕНТАРНЫЕ ДЫРЫ, которые у меня неизбежно вылезли...
8 - начиная с этого момента я уже начал писать CMS-ки довольно легко. Сейчас набор заготовок значительно больше, но указанные три модуля, пусть и очень сильно изменившиеся, до сих пор встречаются в большинстве моих движков.