Skip to main content

This site is not ready to launch — leads are not being delivered

  • Critical: No contact email is configured, so the site has no working way to reach you. Set up the ImprovMX alias, then set email in src/config/site.ts.
  • Incomplete: Team facts (location, stacks) are unset. The About page is showing an explicit placeholder instead of real claims. Get the real details from Benson and fill in team.* in src/config/site.ts. Never invent these.

This banner is generated from src/config/site.ts and disappears by itself once every item is resolved. Run npm run check:launch to verify from the terminal. The full launch sequence is in the repository README.

Vibe Code Engineers

Refactor & Restructure

Refactoring is changing how code is organized without changing what it does, so that the next six months of features cost less than the last six did.

AI tools generate a lot of code quickly, and volume has consequences. Research from Apiiro found that AI-assisted developers produced three to four times more code, with architectural design flaws rising 153% and privilege-escalation paths 322%, even as syntax errors fell sharply. Shallow defects went down. Deep ones went up.

That is the shape of the problem. The code compiles, passes review at a glance, and is structured in a way that makes every future change more expensive than the last.

This sounds like you if…

  • I have a 4,000-line file and the AI can't edit it anymore.
  • The same logic exists in five places and they disagree.
  • Nobody understands how this works, including me.
  • Adding anything now takes ten times longer than it used to.
  • If I got hit by a bus, nobody could pick this up.

What this covers

  • Map what actually exists, including the parts that are no longer used.
  • Delete dead code. On AI-generated projects this is frequently a large fraction of the total.
  • Collapse duplicated logic into single implementations, so a rule change happens in one place.
  • Split oversized files along real boundaries, which also makes them tractable for AI tools again.
  • Introduce consistent patterns, so the codebase stops being several different codebases wearing a trench coat.
  • Add tests around critical paths first, so the refactor itself can be verified rather than hoped about.
  • Write the documentation that lets someone else — including a future AI agent — work on this safely.

Worth knowing

Refactoring changes structure, not behavior. If you want new features at the same time, that is a separate line item, and mixing them makes it impossible to tell which change caused a regression.
There is a real argument for doing less of this than you might think. Code that works, is rarely touched, and is not a security problem can often be left alone. We would rather restructure the parts you are actively fighting with.
One consequence is often immediate: once files are back under a workable size, your AI tools start behaving sensibly on them again.

Refactor & Restructure — questions

Will refactoring break my app?

It can, which is precisely why tests come first. Restructuring a system with no way to verify current behavior is how people turn a working app into a broken one. If your app has no tests, adding a basic set around the critical paths is the opening move.

How do I know if I need this or just a few bug fixes?

A useful test: are you getting the same class of bug repeatedly in different places? Isolated bugs mean bug fixes. A recurring pattern means the structure is producing them, and fixing instances one at a time is an ongoing tax.

Can AI tools do the refactoring?

For mechanical work, often yes, and we use them for that. What they are unreliable at is deciding what the boundaries should be, because that requires knowing what the product is going to need next — a question with no answer inside the code.

Not sure how bad it is? That's the normal starting point.

Tell us what you built and what's worrying you. If the honest answer is that you don't need us, we'll say so.

Request a Codebase Review