> wastes space > premature optimisation
A timestamp is a witness of when the email was verified. Since if they’ve verified can be calculated from it, having both is not only redundant but allow invalid states to be represented.
Cases like email verified are often followed by the need to know when. Say an expiry system. Going from bools, you are faced with the hard choice of how to migrate existing state.
Databases also warrant more care as a source of persistent state - accessed by multiple versions of your software. If you don’t have this persistency, then it matters less.
> any other fields that happen to be strings or numbers or blobs were changed > implement proper event logging
Event logging is orthogonal to your database state. If your business logic needs dirty flags or timestamps they should be stored in the database, not queried.
And if you do need it for other fields, adding the bool is the perfect time to ask yourself if what you need is a timestamp.
> way we don't start with floats rather than ints "just in case" we need fractional values later on
Floats are a subset of int, and a natural migration. A bool can be calculated from a timestamp, but not the other way.