Done is better than perfect

Whether I'm doing test-driven development or not, I focus on making the feature work or fixing the bug in the simplest way possible.

Then, once this is done, I can pass through the code again and refactor it as needed.

I can split code into separate files, move logic from the Controller into separate services, ensure that patterns like dependency injection are followed, and checks like coding standards and static analysis are passing.

I might deploy a change in its passing state and leave TODO comments or create follow-up issues to describe potential refactors or changes to be addressed later.

The main goal is to get the application working and providing value for its users.