> Cases like email verified are often followed by the need to know when.

And often not. That's the point. Avoid premature optimization. (FWIW, I've never encountered a system in my life where a successful email verification then expired after a period of time.)

> having both is not only redundant but allow invalid states to be represented.

That's a different topic. That's about what to do when you know you need the timestamp. The article is about using a timestamp when you don't have a timestamp requirement.

> they should be stored in the database, not queried.

I don't know what that means. Everything in the database is queried. And you can store your events in the database, in one or more event log tables.

> Floats are a subset of int, and a natural migration.

I think you meant to say the opposite, but even that's not true because of precision. And so too are enums a natural migration from booleans. That's the point -- start simple and extend as needed.