During these things, there's always a lot of talk about "the framework" or the "foundation", but what the hell is a framework anyway? The easiest way to think about a framework is to think about Nova as a sandwich. Every sandwich has some meat and lettuce and cheese and different fixings; that's Nova, that's the Nova core. But what else does every sandwich have? Bread. Whether it's white, wheat, whole grain, rye, or pumpernickel, the bread provides some structure and lays the foundation for our sandwich. That's exactly what the framework does. (Is anyone else hungry now?)
Web frameworks provide a general structure (some more than others) as well as some of the necessary tools, libraries, and paradigms to help developers build a system, like Nova. Choosing the right framework for the requirements of your system is really important. You don't want something with a huge learning curve, but you also don't want something that limits you or puts you into a corner. Flexibility, power, and ease-of-use are paramount.
Even as crude as it was, SMS had it's own framework everything was built out from. That foundation worked well for what SMS was, but in 2007, I had visions of grandeur for SMS 3 (what would eventually become Nova 1). Sadly though, I was very much in my infancy of programming. I knew enough to make me dangerous, but seldom enough to be very useful. I did know that the Internet was my best friend, and through the power of Google, I began to read more and more about object oriented programming (OOP). Diving in to OOP was far easier said than done; I felt like I was upside down and under water. Despite my confusion about OOP, I did know that the foundation of SMS needed to change.
CodeIgniter was built with speed and ease-of-use in mind and it succeeded at both. Using CodeIgniter to build Nova 1 was a great learning experience in how OOP worked, not in the theory, but in practice. It was simple and straightforward, but as I learned more and more, I started to find myself continually limited by the framework. As development on Nova 1 wound down, I began to realize that, while it was a good place to start with Nova 1, CodeIgniter wasn't the best way forward. Shortly before the release of Nova 1, the search began for a more robust framework for the future.
Armed with a lot more experience with OOP and PHP in general, I knew the first thing a new framework needed was PHP 5 support. (It's easy to use PHP 5 in CodeIgniter, but the framework itself isn't built with PHP 5 features and methodologies.) Since the release of PHP 5.0, the language has taken some huge steps forward and to be left without many of those features is incredibly limiting at times. Of late, there has been a huge push in the PHP community to get packages and libraries and resources moved over to require at least PHP 5.3. (As of this writing, the current stable version of PHP is 5.6 with version 7 coming in about a year.) Nova 2 requires PHP 5.2, which means Nova gets left out in the cold. So from the start, a PHP 5.3+ requirement was necessary. (In reality, Nova NextGen will require at least PHP 5.4, possibly higher depending on when it gets released.)
Over the last few years, I've looked at a wide range of frameworks that I thought might fit the bill: CodeIgniter 3, Kohana 2, Kohana 3, Lithium, Slim, Symfony 2, FuelPHP 1, FuelPHP 2, Laravel 3, Laravel 4, and even the idea of building an Anodyne framework to run Nova and any Anodyne sites/services. All of the options have their pros and cons, but in the end, Laravel offered the best feature set as well as the necessary flexibility for Nova's requirements.
I still can't pinpoint the exact moment when I heard about Laravel, but it was in the version 3 days. There were some really unique things about it, but it still had a simplicity about it that was appealing. I looked at Laravel 3, but felt it wasn't going to be a good fit at the time. Then I heard about version 4 and my interest was piqued again.
Like there have been in my programming journey, there were moments with Laravel where I felt like I was upside down and under water, but in the long run, it's made me a better programmer. (On a side note, I'd encourage anyone who's interested in pushing their programming skills further to do just that; put yourself outside of your comfort zone and you'll be amazed how quickly you pick things up and learn along the way.) Version 4 still had a few things that weren't perfect, but it was a great foundation to start with and would allow me the freedom to do what I wanted to do. Originally, the goal was to build Nova off of version 4, but a couple months ago, the announcement was made that was supposed to be version 4.3 was becoming version 5. It only makes sense to wait for version 5. (This is a situation where major changes were made to the architecture and it warranted a major version shift.)
There are certainly things that need to be tweaked for Nova's requirements and to make it easier for people to get up and running with it, but the flexibility is awesome and it's something that's actively developed today (in fact, one of the most watched PHP projects on Github). The lead developer recently announced he was leaving his fulltime job to work on Laravel as his job, which is another great sign for the framework. With a great community around it as well, it's felt like the perfect way to go for a long-lasting foundation for Nova.
In the process of evaluating frameworks, I inadvertently found a tool that I've come to love beyond the Anodyne work I do. I've become very comfortable with Laravel over the last year, so much so that most of my freelance work uses Laravel 4, not because it's the only tool I know, but because it helps me do what I need quickly and easily. (It's dangerous to just know one tool, especially when it's your livelihood … make sure you're learning more than one way and more than one tool to do the job!)
Laravel has become such a powerful tool in my arsenal that the new Anodyne Productions site and the new AnodyneXtras site are both built off Laravel. The upcoming Help Center? Yep, Laravel. The upcoming forums? You guessed it, Laravel.
If you're looking to get into some programming, definitely check out Laravel. If you're looking to be able to hit the ground running with Nova NextGen, check out Laravel and get comfortable with the way it does things. Yes, some things are going to be different, but understanding the tool at the heart of Nova will go a long way toward helping you do things you wanna do with Nova NextGen.