It is easy to mistake a programming task to be simple. This is especially true in user interface.
The executive is looking at the “trivial” two fields login screen and innocently estimates it to be a two hours job.
This is a common mistake, similar to some extent to The Three Body Problem in physics. Taking a simple, solvable problem and changing one parameter can result in an exceptionally complex problem. While the two-body problem is integrable and its solutions completely understood, solutions of the three-body problem may be of an arbitrary complexity and are very far from being completely understood. See a nice graphic example.
Login screens are not that complex, but take a look at the next example and see how many open questions\bugs can you come up with ?
- Is it “Log-in” “Login” or “Log in”?
- Is it clear that email is equivalent to user name?
- Do you need a “Cancel” button?
- Should there be a visible mark for the mandatory fields? Which mark?
- Seems like a “Forgot My Password” link and screen are missing.
- Is a Captcha needed to fight bots?
- Is validation done on the client side or the server-side ?
- How is the feedback given to the user? Where?
- Security demands that we don’t tell the user what’s the exact problem (missing email or password). Usability does.
- Where is the sign-up page? Where does Log-Out go out to?
- “Email” , “eMail” or “email”?
- Do we use SSL for the login but move to clear HTTP for the rest of the application ?
- Cross browser testing?
- How shall we do unit testing for the screen?
- It turns out that validating an email address can be a nightmare.
- After the user made a mistake, which events clear the warning notification?
- Shall we support Hebrew? How about the German umlaut?
- Shouldn’t “email” and “password” be left aligned?
- Is the colon required after “Login”?
- Do we want to limit the length for any of the fields? Minimum password strength?
Notice how we got to twenty non trivial questions without discussing the actual user authentication or the graphic design, which can be huge topics on their own.
My simplistic recommendation is to use of the shelf components whenever possible and go through the annoying step we used to call “feature design” even in this agile world we live in.