May 1, 2026Backend
The first mistake teams make with NestJS is treating it like a folder structure problem. It is not. It is a decision-making problem.
The pattern
export class CreateProjectUseCase {
constructor(private readonly projectsRepository: ProjectsRepository) {}
async execute(input: CreateProjectInput) {
const project = await this.projectsRepository.create(input)
return { project }
}
}The goal is to make the feature boundary obvious. Controllers stay thin, use cases own intent, and repositories isolate storage details.