I think everyone has heard the phrase: don't reinvent the wheel. Out of the whole series, I find this lesson the most difficult to remember when starting a new project.
When working on a project, I try to utilize as few dependencies as possible. I haven't forgotten the heavy Bootstrap, jQuery, and WordPress page-builder sites that have been popular for a long time. I make every effort for fast, efficient sites. I believe this is an excellent way to develop, but it's not all-encompassing.
When I was developing Neighborhood Bridges, I planned to use Laravel Nova. I fell in love with the simplicity and flexibility Nova had to offer.
After many hours of development, I realized that Nova didn't quite offer the flexibility my client desired. I pulled the dependency from the app and wrote the backend by hand. It was time-consuming, but the result was what the client needed.
I swore off Laravel admin panels for future projects. It wasn't that I didn't like Nova anymore, but the limitations would always get in the way of what I needed.
I was working on building an internal tool for collecting form submissions from our clients. We've used many tools in the past (this goes against the rule here, but I will explain why), but none offered us the needed features. I needed the project done in a short amount of time, and I dreaded writing all the CRUD and templates. That alone would take the time I'd allocated for this project.
Realizing that the tool is only used internally, I looked into Filament. The further I researched, the more excited I got about it. It seemed that it had everything I needed.
I likely saved myself 10-20 hours of work using an existing tool. The code was more stable, and easier to make incremental changes.
I still like developing everything from scratch, but it can be exhausting. Using a package for a feature I don't want to build from scratch lets me focus on making things I want to build from scratch.
Part 4: Don't reinvent the wheel