# Tiny one-function files; file-per-concern splits

*Files and folders*: one of the ways AI coding agents bloat software, from lessloc's [pattern catalog](https://lessloc.org/patterns/index.md). lessloc catches it as [`tiny-file`](https://lessloc.org/guide/reference.md#tier-2) and [`new-files`](https://lessloc.org/guide/reference.md#tier-4).

## What makes tiny one-function files and file-per-concern splits a bad practice?

The standard that calls it a bad practice: Ousterhout: Shallow Module.

## What does lessloc do about tiny one-function files and file-per-concern splits?

lessloc catches it as [`tiny-file`](https://lessloc.org/guide/reference.md#tier-2) and [`new-files`](https://lessloc.org/guide/reference.md#tier-4).

- `tiny-file` (tier 2): A new code file under 10 code lines.
- `new-files` (tier 4): The change adds more than `maxNewFiles` new code files.

## Related patterns

The other patterns in [Files and folders](https://lessloc.org/patterns/index.md#files-and-folders):

- [Scratch, backup, copy and harness files](https://lessloc.org/patterns/index.md#scratch-files): lessloc catches it as `junk-file` and refuses it before it lands.
- [Caches, build output and logs about to be committed](https://lessloc.org/patterns/index.md#caches): lessloc catches it as `junk-file`.
- [CI workflows and Dockerfiles nobody asked for](https://lessloc.org/patterns/scaffolding.md): lessloc catches it as `unrequested-file`.
- [New folders for one or two files; layer trees for small apps](https://lessloc.org/patterns/one-file-folders.md): lessloc catches it as `new-folder`.
- [Junk-drawer utils and helpers modules and folders](https://lessloc.org/patterns/junk-drawer.md): lessloc catches it as `junk-drawer`.
- [Vague names (process\_data, handle)](https://lessloc.org/patterns/vague-name.md): lessloc catches it as `vague-name`.
- [Moving or renaming files without a reason](https://lessloc.org/patterns/moved-files.md): lessloc catches it as `moved-files`.
- [Secrets: a committed .env, API keys, private keys](https://lessloc.org/patterns/secrets.md): lessloc catches it as `secret`.
