Software design is hard. Yeah, I know no one said it was easy, and it’s certainly a lot of fun, but damn it’s hard. I’m currently working on a PHP/MySQL based content management system, largely based on the lessons I learned after spending the best part of a year building an ASP/SQL Server based CMS for a different company. But you know what? The decisions don’t get easier with experience, they get harder.
When building a system that is going to be used by real life users (who have paid you money and know how to use a telephone) you learn an awful lot about your products very quickly. You find out what sort of things the users want to do that you hadn’t anticipated, and you learn what features are going to be requested. You also learn the limitations of your architecture and framework, and before too long you can begin to curse those decisions that you made early on.
They say ignorance is bliss – and that’s certainly true when it comes to designing a web content management system. The more experience you have, the more you know, so the harder the decisions become. Writing the code is the easy bit. It’s the architectural decisions, the implementation strategies, the points and degrees of abstraction. Security policies, multi-author setups, versioning, and all those other things you wish you’d never heard of. After a while you can accurately predict the user response based on the choices you make, which leads to more choices and tougher decisions.
The real danger, however, is that of disappearing up ones own arse – a problem that I think can only be alleviated by having a colleague to discuss the issues with and bounce ideas off. You can’t do it alone without ending up in a padded cell. Don’t be afraid to phone a friend. Writing the code is the easy bit.