Из личного опыта: не стоит как писать свою cms так и юзать готовую. Особенно начинающему разработчику. Имеется ввиду что не стоит писать cms ради самой cms. Дело в том, что когда вы попытаетесь ее применить в каком-то нестандандартном проекте - окажеться что архитектура чего-то не позволяет сделать и приходиться строить костыли. В итоге через пару итераций cms превращается в набор костылей. Очень запутанный набор костылей.
За свою более чем десяти летнюю практику я пришел к выводу что cms и библиотеки слишком ограничивают. Зато за это время скопилось огромное кол-во решений всяких типовых задач. И теперь создавая новый проект просто перетягиваем классы и функции из "опытного багажа" в нужный проект и правим под собственные нужды. Т.е по сути тотже набор костылей но без всего лишнего.
Поэтому совет слудеющий - если есть проект который не горит по срокам - пишите с нуля с таким расчетом чтобы использовать тотже код и в других проектах. Но не гонитесь за универсальностью. Лучше в следующем проекте исправить пару методов в классе чем потратить день на написание класса на все случаи жизни. К следующему проекту вы уже будете видеть удобство/корявость тех или иных элементов ваших костылей и возможно захотите что-то в них поправить. В итоге у вас будет постоянно развиваемый и пополняемый "багаж костылей" который от проекта к проекту будет становиться все лучше и чище.