Draw a mockup on paper and figure out how you want your app to work. Once it's done, get the simplest case working in real software.
I find that by getting something simple working helps me keep motivation whilst going forward, even if the code is crappy. Conversely, I've started a non-trivial number of webapps by designing a DB schema and an application architecture, each of which left me burnt out before anything of value was even written.
Interesting how the reason that this bug is affecting the original poster is that a new version of the language is being used. The code can't be changed because "We have number_format in literally thousands of places across 50 or 60 separate products. Each of those changes will have to be coded, tested, written-off, released, tested by the clients since this is tax data and has to be precise for tax planning and retirement planning."
It seems to me that the entire process of testing and writing off is just as important when changing the target platform as it is when changing some of the API calls.
I did have an issue where the server would fulfill my connection with no response data, and the client wouldn't re-open the connection to the server. This happened a few times, and it was right around the time someone was mentioning unicode, so I figure you might already be on this one.
It could be that the bank was hashing the passwords all along, but just truncating the user's input before hashing it and comparing it to the saved value. Not that I think this is what happened, but I'm just saying it could be.