Writing a CMS: The Smartest Dumb Thing I Ever Did
Here’s a situation with which many people today can relate: I was fresh out of college with no recent experience and looking for a decent job. I had sold my first few websites in high school, then became seduced by the dark side of university: I thought it would be easy to get a job when I was done. In fact, all my teachers assured me there would be a severe shortage of developers and getting a job would be no problem at all.
Is it supposed to be sideways?
Fast forward to graduation day. I now have my Bachelor of Computer Information Systems degree and the world is my oyster. Except it wasn’t. Everywhere I applied people asked me about my experience. “I had a business in high school selling websites,” I’d say, if I was ever given the chance. Most of the time I was rejected by automated services before I could explain my case. Next they’d ask me, “So where are the sites now?” A good question! In the years passed, none of them were still active with my code on them. What does that mean to an employer? Zero experience.
It took me months of full time resume / cover letter / application writing to land my first job. Then I was employed, but the hours were short, the conditions poor and the pay low. I realized that in order to dig myself out of the “no experience” hole I would have to create something tangible to put on my resume. What should I build?
My boss came to my rescue one day with a problem: “We need an in-house CMS to be more efficient.” She then added the less pleasing conclusion of, “However, we can’t afford to invest in one right now.”
The more seasoned players reading this are probably going to be scratching their heads right now asking, “What’s wrong with modifying an existing CMS and saving yourself all that work?” Nothing! However, my boss was a graphics designer not a programmer. Her real trouble was that she kept switching software and didn’t give her programmers a chance to learn any given platform (I learned later that there was also a fairly high turnover rate contributing to the problem). This lead her to conclude that the software was flawed, when it was actually the methodology.
I should have known better, but I accepted anyway. I needed a project, so I told her I would build the CMS on my own time and license it to her when it was complete. I thought it would take me around one hundred hours and that I was guaranteed a few sales each month from my boss. Hell, it might even make me a decent chunk of change.
Not one of my assumptions turned out to be correct.
First, it took me almost four hundred hours to release the first version. The status quo today for content management software features is very high and I had to build something for which I could justify charging. Second, when I was finished the first version and asked my boss to schedule a time for a demo she replied, “We’ve decided we don’t need a different CMS.” Great. Now I had a piece of software and no customer. Worse, I had a piece of software for which there existed numerous free alternatives. As a commercial product the outlook was dire. It seemed like I had wasted a huge chunk of time on a doomed project.
I needed a reality check. I took a step back and started thinking about what was important.
- The time I “wasted” was free anyway. I didn’t give up paid work to do this, so why should pay matter?
- I love programming. I had a blast making the CMS. How could it be a waste of time?
- I learned a lot while doing it. There’s a big difference between reading a tutorial on how to build a module for your favorite CMS and actually designing a modular system providing access to necessary functionality without requiring modification of core code.
- It is still a great portfolio piece.
Alright, I said, enough worrying about the negative. Let’s go with the positive. I made up a new resume which featured my CMS as the main selling point. I applied for exactly one job and I got the position. Better conditions, better pay, and better hours. To put this in perspective, I applied for several hundred jobs before I got the last one.
Maybe it was completely random. People with an understanding of statistics will be quick to tell me I can’t base any conclusions on such a small sampling, and they are right. Does that make my new job any less appealing? Not to me.
With a better job in hand I started to reconsider the CMS. Given what they say about hindsight and focus, I thought I might gain a better appreciation for the impact it had on my life. I realized two things:
- It was an extremely stupid choice of product to invest my time in from a financial returns standpoint. The market is saturated with products, both free and proprietary, and most of them have dozens, hundreds or even thousands of contributing developers.
- It was, nevertheless, an extremely productive use of my time from an educational and practical returns standpoint.
When I was in university, I read a book on software development that talked about the importance avoiding “not invented here” syndrome. The advice was simple: If you are addressing your company’s core competency, do it yourself. If not, find someone else who specializes in it. I realized that advice makes sense in both directions: I had software which deals with the core competency of a web development company, plus years of experience in the field, so I re-launched my web development company Aparadine.
What about the software? It’s powering this website. I call it “Saint”, in reference to my last name (St. Pierre), and it is available for download here under the terms of the GNU General Public License v3. It is a modified MVC architecture based rapid development framework on which rests a content management system, file manager, blog, image gallery, slideshow, online store and a modules/extensions interface. Text areas are edited using wiki style revisions with support for multiple languages.
Finally the tires are pointed down!
In total, I’ve put over six hundred hours into creating this software and there are still many features I plan to add. I’ve taken great care to optimize the performance and increase the security of the system as much as possible, including load testing and penetration testing from outside sources. I would welcome input or contributions from any developers who wish to contact me.
Finally, for those who are still reading this far (troopers all), I’ll give a bit of personal information. I started learning HTML for simple websites in elementary school and moved on to learn PHP in high school. It was then I actually wrote my first “CMS”, though the functionality fell well short of the name. I wrote an internal messaging system for our high school faculty using PHP and MySQL, then later wrote a primitive but functional game development framework using PHP for the interface, Python for the back end and MySQL for storage. Lately I’ve been taking an interest in learning the Ruby language and the Rails framework.
Last but not least, that is me in the pictures. Motocrossing is one of my great passions in life (I might even rate it higher than coding in a pinch, but I love them both), and I’ve been doing it since I was four years old. I thought some pictures might help to spice up the blog and give it a unique feeling. After all, how many tech blogs have a motocross theme? Seriously :) If you know of one I’d love to see it. Are there any of my fellow software professionals who enjoy riding?