There are a lot of possibilities laid out here, but I think I would lean towards: > Idea 3 - Should I make more use of private methods within the giant controller class? Won't shrink the size of the controller, but might make some of the code more readable. Or maybe not, since I'd be scrolling all over the page to find code, instead of just reading it linearly. I would recommend taking this approach. Looking at the sample controller method I would separate chunks into separate methods. Ask yourself what the chunks are doing - e.g. - set data - set form validation rules - load page with event nav and/or add error/success message Having smaller, more atomic methods should allow for better unit testing. Like I mentioned in [my review of your chess code](https://codereview.stackexchange.com/a/203576/120114) it is wise to limit methods to 15-20 lines. In [this presentation about cleaning up code](https://www.youtube.com/watch?v=GtB5DAfOWMQ) Rafael Dohms talks about limiting the indentation level to one per method and avoiding the `else` keyword. ([see the slides here](https://www.slideshare.net/rdohms/bettercode-phpbenelux212alternate/11-OC_1Only_one_indentation_level)). He also mentions that keeping methods small relates to the "S" in SOLID - i.e. the [Single Responsibility Principle](https://deviq.com/single-responsibility-principle/). I'm not very familiar with CodeIgniter but see the documentation for CI4 contains a section [HTTP Feature Testing](https://codeigniter4.github.io/userguide/testing/feature.html). I'd recommend reading through that page - hopefully something there will be useful.