Previously, Nix installed its packages using 'channels'. You would add and update a channel, and then you could install packages from a channel. (This is roughly analogous to apt repositories). -- The CLI user experience for this channel-based approach is pretty terrible.
Nix flakes are a new feature where a project has a `flake.nix` file, which follows a standard format for declaring what packages a project provides. -- The CLI experience is much nicer, and has several other benefits over pre-flake Nix.
Flakes are still (for various reasons) labelled as "experimental". Much of the documentation has not been updated for flakes.
In 2 years, you'd hope that: the documentation improves, and there's less friction for adopting the technology.