Way back in 2012 I came to an agreement with my (then) local doggie daycare – I’d write a suite of tools for them to more efficiently run their business, and they’d compensate me by giving me credits to use for keeping my dog while I was at work. I had no idea that over 5 years later they would not only still be using it daily, but that it would be one of the most stable, feature-rich pieces of software I’ve ever written.
I’ll get two unfortunate details out of the way first –
- At the time I was doing a lot of Actionscript development, and decided to use AS3 and Flex to build my standalone application. I now wish I had used something a little more “supportive”, as the nice development environment for Flex is a costly piece of software.
- My code works great, but as most any developer will admit (else he or she is lying), there are a lot of things I wish I had done differently. Maintaining the software is easy enough, but having more exposure to OO programming since then, there are definite architectural changes I’d make, given the chance.
This post isn’t really to talk much about the code, more to showcase the complexity of what I’ve created. I’m proud of it, and am proud that it’s been used and has no major stability issues. It had been 2 years since my last contact with the daycare, and they simply asked for a new feature. OK, now on to the features. Please be gentle, my UX skills have improved a lot since then too:
I chose sqlite as the database for the software. Easy to deploy and manage, all of the details regarding the business are stuffed into three different database files, each containing pertinent tables. Dog information, owner information, financials, application settings, and the schedule all exist in nice, neat little files that are easy to keep track of and maintain.
Client and Dog Info
There’s a massive amount of data to keep track of, for the clients and their furry friends. Vaccination dates, client discounts, contact info, etc. Also included is a predictive search feature, making it simple to search for and update client information when needed.
This is probably the subsection I’m most proud of, a completely self written scheduling module. It’s a feature-rich portion of the software, with the ability to schedule single or multiple dogs for Daycare, Boarding, or a half-day visit. Estimated pick-up time for boarding events (morning or afternoon) lets to software calculate how much to charge someone. Additionally, the ability to schedule recurring events, so if my pups are going to go to daycare every Thursday and Friday until the end of the year, that’s an option through the software. Events in a series can then be deleted one-by-one, or the option to delete all future events in a series works too.
As dogs come in for the day, I wanted a quick way of displaying who was expected, as well as the option to mark the dogs as “Checked-In”, “No-Show” (which would result in a charge), or a “Discard” (similar to no-show, but without charging the client). Everytime the Check-In screen is launched, the Schedule database is searched for events that begin on the current date, and those events are rendered in table form on the check in page. It also checks the dogs current vaccination records, and will warn if a record is out of date.
The check out screen shows all events that have been checked-in but not reconciled. The same general information for the event is displayed, along with the charge information. Here the employee can give the client their total for the visit (along with any associated discounts), add extra charges for dog grooming or extra food, and let the client know what their current tab is. There’s also the ability to record payments against a variety of user-definable payment types (cash, check, etc):
The transactions page gives access to every client’s financial history through predictive search. Included are details about every transaction and a rolling balance amount . The ability to accept payments or add manual charges is also available from this screen. Also included is a pdf export functionality, that lets the user export a client’s total transaction history, or a specific month’s worth of transactions.
A close runner-up for “the feature I’m most proud of” is the reporting system used. It’s a means of creating customized reports to suit the user’s specific needs by selecting what data from the database is important, and filtering on common criteria. For example, I can create a report containing client names, dog names, and telephone numbers for dogs with expired shots. Or I can create a report of client names and email addresses for those with an outstanding balance. Or maybe I need a list of all the dogs that have a birthday in June. This is basically a user-friendly SQL querying service built into the software.
Home Screen Bells & Whistles
From the Home Screen, there are several useful functions that can be performed. A one-click database backup can be performed to capture your databases at a point in time. Restoring from a backup is just as easy from the home screen. A “Quick Peek” search bar lets you search the dog database for vaccination dates, and highlight any that are out of date. A “Vaccination List” button copies all emails of owners that have dogs with vaccinations that are due to the system clipboard (a quick and easy way to create an email list to remind your clients their dogs need new shots). For a quick email blast to all clients, the “Client List” button copies the emails of every client to the clipboard. Lastly, two quick summary options are available. You can save a monthly summary for any month/year, or a daily summary for a specific day. These summaries break down total incoming payments for the month into the various payment types (user defined, but typically things like “Cash”, “Check”, etc), and total charges for the month (Boarding, Daycare, Halfday).
Settings and Security
The settings page provides some user tweaking capability to how the software identifies payments, and how charges are calculated. Daycare/Boarding/HalfDay rates can be edited along with discounts for multiple dogs or bringing your dogs to daycare multiple days in a row. While the settings are reasonably specific to the doggie daycare this software was first built for, I’ve found most daycares I’ve interacted with would be able to represent their pricing scheme using the settings available. These settings, along with a handful of other actions in the software (deleting clients, deleting or editing transactions, etc) all sit behind a password wall. A salted hash is used to store the password, greatly mitigating the risk of a user brute-forcing their way in or using precompiled rainbow tables.
While far from ‘perfect’ (what software suite ever is?), my K9 Kare software is a source of pride and has a strong track record of being extremely stable, fast, and user-friendly. Obligatory dog tax below 😀