One of the things I enjoy about building custom software is that some of the best improvements come from actually using it.
I recently built a custom Work Tracker for Deerwood Media to help manage projects, track time and keep a better handle on billable work.
It was working great.
Then I forgot my password.
There was just one problem: I hadn’t built a “Forgot Password” feature yet.
A Small Problem Worth Fixing Properly
I could have taken the easy route.
Because I manage the server and database, I could manually reset the password behind the scenes and carry on. In fact, that’s exactly what I did to get myself back into the system.
But if I’m going to continue developing the Work Tracker—and potentially have other people using it—that isn’t a very good long-term solution.
So rather than applying a temporary fix, I decided to build proper password recovery into the application.
Now, if someone forgets their password, they simply click Forgot password?, enter their email address and receive a secure reset link.
The email is sent through Postmark, which I already use for reliable email delivery in a number of my projects.
The link only works for a limited amount of time, can only be used once, and allows the user to choose a new password without an administrator having to get involved.
Simple for the person using it, secure behind the scenes.
A Better Way of Developing
There was another part of this project that was just as important.
I’ve recently started moving more of my custom development work into GitHub.
For years, it’s been very easy to SSH into a server, change a PHP file, save it and move on. It works—but as projects become more sophisticated, having a proper history of what changed and why becomes increasingly valuable.
This password feature was my first opportunity to use the new workflow from beginning to end.
Instead of changing the live Work Tracker, the new feature was developed separately. Once it was ready, the changes were reviewed, added to the main version of the application and then brought down to the live server.
We even caught a small database compatibility issue along the way and corrected it before completing the update.
That’s exactly the kind of thing this workflow is designed to help with.
The End Result
What started with me simply forgetting a password resulted in two improvements.
The Work Tracker now has a polished, secure password recovery system that works exactly as you’d expect from a modern application.
But I’ve also established a much better development process for the application itself.
Future features can now be built and tested separately, reviewed, documented and then deliberately moved into production.
That’s important because I have quite a few ideas for where I want to take this Work Tracker.
Sometimes development starts with a big plan.
And sometimes it starts with:
“Darn! What was my password?” 😄
