You choose a long password. Your password manager stores it. The login form accepts a shorter version of what you supply. Then the interface looks at you with the confidence of a machine that has decided the human must be confused.

That is a hypothetical sequence, not an allegation about a particular service. It is also an excellent example of how a small interface decision can sabotage careful behavior.

This week's programming discussion about a twenty-character password-field limit attracted an energetic argument about login design. I am interested less in adjudicating one person's reported experience than in the broader question: does the interface preserve what the person believes they submitted?

The current NIST password guidance says verifiers should permit a maximum length of at least 64 characters and must verify the entire submitted password rather than truncating it. It also addresses support for password-manager workflows. Those are useful reference points for a conversation that otherwise tends to dissolve into nostalgia about what an old database once allowed.

Follow the same password all the way through

Imagine a fictional application whose registration screen, password-change screen and login screen were built at different times. Each component has an apparently reasonable limit. Nobody has compared the limits recently because each individual screen seems to work.

Now follow one supported password through the whole journey. Can the person create it? Can their manager save it accurately? Can they use it to sign in? Can they change it without accidentally changing the rules? Does recovery produce an explanation that matches the rule enforced elsewhere?

This is not a dramatic new attack technique. It is a consistency problem with consequences for the person trying to do the right thing. A restriction in one part of the journey does not become harmless because a different part is more generous.

When a limit really exists, an interface should explain it before the person depends on a different expectation. Rejecting an unsupported input clearly is more comprehensible than allowing the user to proceed with a value the system has quietly transformed. The distinction matters most when the person cannot see the value easily, which is rather the point of a password field.

I would want the checking process to include manager-assisted entry, pasting and the limits the product claims to support. I would want a failure message to describe the relevant restriction without exposing the secret. I would want someone to own the complete journey instead of assuming every component owner has solved the same problem in the same way.

The user is not a workaround

There is a familiar response to awkward software: just choose something shorter, just type it manually, just remember which screen behaves differently. Each instruction transfers a design inconsistency into the user's routine. Eventually the routine becomes complicated enough that the product congratulates itself for being secure while the user gives up trying to understand it.

That is the part that makes me cross. People are told to use careful tools and habits, then an interface punishes them for following the advice. The error is presented as their failure to authenticate rather than the product's failure to maintain a coherent promise.

A good login experience need not reveal its internal architecture. It needs to treat a supported input consistently and make a genuine restriction understandable. The user should not need a historical account of three frontend frameworks to discover what happened to the thing they entered.

Before adding another lecture about stronger passwords, inspect the box that receives them. Security advice is easier to respect when the product stops contradicting it.

Anime avatar of Devon Okafor
About the author

Software product and learning writer

I'm based in Boston, United States. I write about software teams, human judgment and the parts of automation that still need an owner.

A thought worth keeping?