Написание первой CMS. Как лучше?
Т.е. прежде чем мне написать CMS мне надо "перелопатить" тысячи исходных кодов различных CMS, изучить их, проработать с ними как минимум год чтобы понять как написать правильно свою систему?
Именно так. Я бы даже сказал годика так 3 хотя бы, и пару десятков разных проектов. Важно что бы вы получили разный опыт.Неужели чтобы написать даже самую простую CMS для личных элементарных нужд придется изучать куча всего другого чтобы выстроилась точная картина о ее разработке?
нет, если вы не будете писать велосипеды и возьмете фреймворк как готовую основу.но интерес составляет написать самому
Начните с фреймворка:
 - библиотека для рендринга шаблонов (буферизация вывода, работа с файловой системой немножко)
 - библиотека для маршрутизации запросов (прошаритесь в регулярках)
 - библиотека для работы с базой данных (не ORM, начните с Table Data Gateway или DAO хотя бы. Прошаритесь в SQL минимально).
 - Ядро, связывающее все это вместе. Желаельно с какой-то концепцией мидлвэров, что бы все остальныекомпоненты ничего не знали о ядре. (прошаритесь в HTTP)
В целом же писать CMS очень и очень скучно и долго. Вы намного быстрее прошаритесь во всем что надо делая отдельные компоненты. Благо сейчас век composer-а и вы можете крутить и вертеть фреймворками как хотите, подменяя чужие компоненты на свои.
Ссылка на мой блог: sitecoder.blogspot.ru/p/blog-page_23.html
Я перечислю здесь основные блоки "пирога":
1. Сессия
2. ACL
3. Роутер
4. Приложение (входные данные, обработка, выходные данные, шаблон представления)
5. Модули (входные данные, обработка, выходные данные, шаблон представления)
6. Шаблон страницы
7. Рендер готовой страницы и отдача в браузер