Here are the main design goals:
[UPDATE June 2008: The bare functionality needed to operate the site would be the ability to schedule equipment and accounting reports.]
In comparison to the current prototype...
...easier to create reservations. Single page, faster loading, faster response. Creation and editing from one page without having to load new page. Use AJAX so user never has to leave the page until they're finished creating or revising the reservation. This alone should address the faster response goal.
...better conflict detection and resolution. Detect conflicts by time and date, allow clients to specify desired pickup and return times, keep like items generic until pulled for pickup or specific item reserved for client. Current prototype just tracks items by date, assuming "latest return time" and "earliest pickup times" are fixed at 11am and 2pm respectively. But enough clients want to pickup in the morning and return late in the day, sometimes on the same day. Also, a c-stand is a c-stand is a c-stand, so don't reserve a specific c-stand for someone when they can use any c-stand in the shop. Keep things like c-stand generic will eliminate the "false conflict" when two specific c-stands are booked for two different, non-overlapping reservations, preventing a third reservation from booking a c-stand because it overlaps with one or both of those reservations and we only have two c-stands available for that time period. (The first two non-overlapping reservations could have shared the same c-stand, freeing up the second c-stand for the third reservation.)
...faster searches. Live search form for clients and equipment. Have one form that lets user search for any client by typing in a few letters and performing an partial search. Using AJAX will show the search results as the letters are typed. Can use client-side javascript to search within the initial search results if the original letters are added and not subtracted from. Require at least three letters or a time delay to cut down on the returned results. Allow searching for clients and equipment or just clients/just equipment.
...better accounting reports. Change the database to track different data so reports are easier to generate and more detailed. Current prototype does not track accounting information, only schedules equipment and generates contracts. From this information, I've been able to cobble together reports of totals by client and reservations. But this is not enough, it requires too much manual data manipulation for accounting. Especially when we are handling third-party equipment where we have to track commissions due these third-party owners. New design needs a register per account so that debits and credits can be recorded and reported.
...better client experience. Easier database maintenance and online quotes and reservations. Current prototype has waaay too many clicks and page loads to update public website information. Use AJAX to implement in-place editing of any equipment data, posts, and (hopefully) all other page content. Allow anyone who signs up for a user account to assemble packages and get a real-time quote for the number of days they need that package, then let them submit that package for a specific date range for us to confirm or revise if conflicts exist for that time period (in other words, users are not able to detect conflicts). Allow trusted users to see conflicts and let them actually reserve equipment for a specific date range (subject to final approval). Give a discount for booking online since that frees us up to do other things than book equipment over the phone or over email.
...better access control. Provide role-based access and auditing. Current prototype has only one admin account and only tracks revision dates. Need ability to assign roles and level of access to employees so that accounts are protected, contracts can be locked, and only trusted employees are allowed to make changes to published information. Track who makes changes to contracts and (hopefully) provide ability to rollback changes or at least see what those changes were so that errors can be corrected.
...better public interface. Easier to search for items, RSS feed, community integration. Allow users to find information faster using simplified navigation. Provide for better accessibility for users with disabilities (get rid of tables, easier navigation). Provide RSS feed for posts, tips, news, links, anything of interest. Allow trusted users to become authors, where they can post news, articles and links. Allow trusted users to comment on equipment, articles, news and links.
...better user communication. Automated email reminders, account reports, rewards. Send emails to confirm reservations prior to cancellation penalty. Provide ability to control how automated particular emails are (admin confirmation required before sending). For third-party equipment owners, send email to: let them know when reservations for their equipment are booked, canceled, revised; remind them to bring in their equipment in time for rental pickups; let them know when their equipment comes back in for them to pickup; access reports to see when their equipment is booked, how much they are owed, get past bookings. For users, let them access their account to see if they owe money, have credit, get past receipts, check upcoming reservations. For authors, let them revise their articles, news, links and respond to comments. Reward good clients with credit or discounts by keeping track of their ratings (not published), frequency of rentals, total sales and reservation totals.
...better maintainability. Code needs to be extended and maintained. Use behavior driven development as much as possible to provide tests to catch (hopefully) most bugs. Stick to MVC, DRY and convention-over-configuration principles. Refactor code that gets too long, too many indents, too many methods in one file. Use natural language for methods and attributes. Add comments when all else fails to describe the function (comments tend to get outdated).
Wednesday, January 30, 2008
Subscribe to:
Post Comments (Atom)
0 comments:
Post a Comment