The 1,400-Line `utils.ts`
Decide what you would do from the brief alone, including whether you would change anything at all. Everything below it is available, but the exercise stops working if you open it first.
utils.ts is 1,400 lines and imported by every module in the codebase. It holds date formatting, a currency rounder used by invoicing, a retry wrapper, an email validator, a deep clone and a function called process. Two engineers added to it this week. Clean it up.
Splitting utils.ts into stringUtils.ts, dateUtils.ts, moneyUtils.ts and arrayUtils.ts. The diff looks like decomposition, no file is over 400 lines, and a find-and-replace fixes every import in one commit. Nothing moved closer to an owner. moneyUtils.roundForInvoice is still business knowledge outside the invoicing module, still imported by six callers, and still the thing that will be quietly duplicated when someone needs slightly different rounding for a refund. Splitting a dumping ground by data type produces four dumping grounds sorted by data type, and it costs you the one moment when someone was willing to look at every function in the file.
Read this even if you are confident. It is here rather than behind a button because it is the answer most teams actually ship, it passes review, and the cost of it does not arrive until the change after this one.