I often get asked if I have experience with a certain framework or library. Short answer, yes - long ansnwer, yes (but it's longer).

In the past people used to ask, "Do you have experience with Zend Framework?" (nobody asks this anymore). Then they would start asking about CodeIgniter. "Do you have experience with CodeIgniter?", an interviewer would ask. I know the answer that they're looking for. They want to hear, "Yes, I have experience with CodeIgniter.". But, then the trouble is, they might ask you for specifics.

The assumption in the interviewer's question is that you have had a positive experiecne with some framework, like Laravel, Symfony, or CodeIgniter. Truth be told, I've only had neutral to negative experiences with those frameworks.

My recent experience with CodeIgniter

Let me preface this with: I'm aware this is not directly related to CodeIgniter code.

Now, let me start off by saying, I don't have a huge issue with CodeIgniter, it's not a terrible framework, per se. I like it most out of the pack of famous PHP frameworks, but it is not so compelling for me to switch from other frameworks that I have created, namely: LogiCreate, Cognifty, or MetroPHP.


   683 <!-- <pre> took: 10.2799</pre> SELECT * FROM session WHERE session_id='161f869d2f5e' -->
   684 <!-- <pre> running total: 3638.3715</pre> -->
   685 <!-- <pre> took: 10.3409</pre> SELECT * FROM session WHERE session_id='161f869d2f5e' -->
   686 <!-- <pre> running total: 3648.7124</pre> -->
   687 <!-- <pre> took: 10.4601</pre> SELECT * FROM session WHERE session_id='161f869d2f5e' -->
   688 <!-- <pre> running total: 3659.1725</pre> -->
   689 <!-- <pre> took: 10.5660</pre> SELECT * FROM session WHERE session_id='161f869d2f5e' -->
   690 <!-- <pre> running total: 3669.7385</pre> -->
   691 <!-- <pre> took: 10.5050</pre> SELECT * FROM session WHERE session_id='161f869d2f5e' -->
   692 <!-- <pre> running total: 3680.2435</pre> -->
   693 <!-- <pre> took: 10.4029</pre> SELECT user_id FROM `users` WHERE user_id=2134 LIMIT 1 -->
   694 <!-- <pre> running total: 3690.6464</pre> -->

"So, what is this?", you might ask. This is some database timing that I printed out in a project that used to work fairly quickly, but suffered massive performance loss when migrated to a cloud provider. Pages that were rendering in under 1 second were taking 15 seconds to render. The system was doing upwards of 300 queries per page that were the exact same thing.

I went into the user and session classes and basically cached the results with some quick static vars. This reduced the amount of queries from over 300 to around 6 per page. This isn't an ideal solution, and the reason it didn't show up on the previous host was that the database and code were on the same machine - using local unix sockets instead of TCP sockets. When moving to a cloud provider, the databases were their own separate cloud instances with all the niceties of automated backups and expandable drive space.

That's not CodeIgniter's fault

Very true, this is not CI's fault, but wouldn't it be a better framework overall if it supplied basic user, database backed session, and login libraries so that novice users wouldn't end up creating 300 useless queries per page?

This criticism applies equally to all major frameworks that omit basic user and login libraries. There is nothing special or unique about logging into a Web site that each project must implement it from scratch. There is more in common with logging in to various Web sites than there is in common with where they choose to store their own custom libraries, or where they choose to do data validation (fat vs thin model).

In the end, it's not the framework

When all is said and done, the framework selection has little impact on a developer's ability to get things done. Some frameworks might fail miserebly at DRY, but IDEs can help allievate that issue. What matters most is the developer's ability to write libraries that contain the business logic.

No framework is going to supply you with the proper way to check if an appoinment start date is before the end date. Sure, you could do that with form validation, but what happens when you need to take appointments via an API, or a file upload where there is no form?

When it comes down to it, a Web request needs to:

  1. Authenticate and authorize a request
  2. Clean input
  3. Do some business logic
  4. Send some output

Frameworks can help with #1, #2, #4, and organizing the code for #3. Your developers have to write the best code for #3 that they can, and it rarely involves framework code - if it does, you have issues with inflexible, tightly-coupled code and vendor lock-in.

In closing

When you ask me if I "have experience" with a particular framework, you can take my "yes" answer any way you want, but I'm more interested in the code that happens outside the framework. I don't care too much about code that looks-up a session, casts ints as ints, and sends 302 redirects to the browser. The code that interests me is the code that requires unit testing, the code that ensures you don't overbook an outing, the code that imports 100k users in 30 seconds into your database. In my experience, those problems always need to be solved, and never require help from any major PHP framework.