If your framework is constantly reminding you that it’s there, it’s time to rethink its job. Applications need to be freed from the unnecessary constraints being applied to them. They are not your architecture, and should not be making any architectural decisions for you.
When you’re writing application code, the framework should be completely invisible. It can help bootstrap the application, and possibly help wire services and configuration together, but those services should never see it. They should expect their dependencies to be injected, but how that’s done is none of their concern.
When you start to concretely rely on service or dependency injection containers, deep class hierarchies, and deep directory structures, it becomes easy to build a very deeply-ingrained dependency. Applications that do this tend to become very monolithic and hard to maintain/upgrade.
If you can get away with no framework or even a micro framework, give it a try, and start to look at how you’d organize things without the scaffolds to guide you. Otherwise, ask yourself this: does upgrading your framework require any application or domain-level code changes?
It’s easy to fall into the trap of focusing on specific types of work in your career. Starting with maintenance or grunt work is natural for junior developers, but it’s important for seniors to deal with horrendous code as well to remember why we are so strict.
Do you crank out tons of projects in an agency-type setting? It’s important to balance that by taking on and leading larger projects. Similarly, if you only ever take on these projects, try a few fast-paced ones next time. Rapid-application development uses different skills than designing and executing on larger projects.
It’s good to appreciate both the level of efficiency and consistency agencies strive for, as well as the quality and longevity that product companies do. (Remember, shelf life matters)
Be sure to experiment on some low-risk projects once and a while to maintain your confidence in these new settings.
It’s easy to get stuck into the habit of learning from examples for new technology. Blog posts, tutorials, and example repositories are great to get acquainted quickly, but don’t let it end there… Apply your own experience and help progress the platform.
So please, write your own code instead of copying tutorials. Here’s a hint: the vast majority of tutorials are written by first-timers like you, if not outdated or incorrect.