Wm. Ruffin Bailey
Putting my experience on display

Web apps & SaaS



MessageFactory

MessageFactory is a .NET MVC system that facilitates the surprisingly complicated process of laying out direct mailings for one of the country's leading "full service direct marketing" companies, who serves several Fortunate 500 companies. It seeks to replace arcane, in-house systems of emailed Word documents, shared folders of dated image files, and complicated management structures with a streamlined system that handles asset management and versioning, layout composition, and automatic manager notifications.

Work started when the system was still in its relative infancy, as a team of two developers (one in-house and myself as a contractor/consultant) scaffolded the system from scratch. I worked mostly on three areas, the original job edit screens, asset management pages, and then the notifications system (for which I was solely responsible, schema to client) over the course of just over a year. All sections used Telerik web UI controls (except administration pages), .NET MVC, and LINQ to Entities to talk with SQL Server.

Other responsibilities included creating a plugin for the ckEditor web editor plugin and the use of a zero-dependency JavaScript tag UI widget I wrote over a break, tagifyJS.

Additional screenshots, in png format:


PeopleMatter

Save for Later status PeopleMatter is a SaaS solution for hiring, training, and scheduling applicants and employees who work in the services sector.

Work for PeopleMatter has centered on two pieces of the product: Schedule, the module that creates schedules for employees and different stores, and maintains a running count of their hours worked and costs to staff, and Hire, where applicants to companies are tracked, interviews scheduled, and onboarding tasks (I-9 forms, workforce eligibility, training) can be managed.

Schedule work was done using .NET MVC with C#, SQL Server via NHibernate on the backend, and KnockoutJS templating for the client. It initially was a seven team [sic] project that leaned exceptionally forcefully on maximizing data on the client's browser, and contained especially complex JavaScript view models bound to knockoutjs templates. Work here centered largely on client validation, ensuring proper translation of business rules from server to client code, speed optimizations, memory management, AJAX interactions with server controller actions, and data serialization.

My most important work on Schedule was probably when, a few weeks from a contracted release, I was given the task to look at performance on Internet Explorer 6. Schedule was using infinite scroll, where scrolling down the schedule would continually load more entries into the UI. This worked well in Chrome, especially on faster machines with recent processors, but on slower machines -- or any machine using Internet Explorer 6 -- performance for sizeable schedules would quickly crater.

After letting management know, "It's dead, Jim," I took a few weeks to work with a designer and non-destructively add paging to Schedule for Internet Explorer 6 and 7 only. It was an exceptionally defensive fix, could be turned off by changing one boolean in the client side code if we chose not to use paging, and could change the number of entries on a page by changing one integer, even pitching different numbers of entries for different browser versions and types. This was a minimal risk fix with a potentially high reward.

Since all of the data for each schedule was downloaded in a giant, originally single-use JSON payload on page load, it was only necessary to add a de/serialization routine to the JavaScript code for a "person-schedule", the foundational object model used on the page, to and from that JSON payload. As pages made edits saved to the server, those changes to person-schedules were serialized into and out of the client-side JSON datastore so that fresh information was accessed during paging, allowing slower browsers to make the same edits with much less DOM overhead than the original design required -- and to do so without any changes or new interactions with the server. This did duplicate server-side serialization logic, and was a band-aid on a much more serious performance issue (and an architecture that didn't scale as well as was needed), but a few weeks of triage work, done without any server-side churn, allowed Schedule to ship on time to all users, particularly to a major "homepage logo client" whose internal network only allowed the use of IE6.

There is a pretty good training video that demonstrates in Schedule in less than two minutes here, with a local zipped copy in case that link ever breaks.

The Spring 2014 release concentrated on Hire. To help make changes in applicant status auditable, we added a new "Status Change Reason" interface. Each location in a company could optionally turn on this audit function which would, for instance, collect reasons when one applicant was promote to a job candidate, or had an interview scheduled, and would also capture when an applicant for a job had been rejected. Now, instead of simply having a note of when a change was made, managers could look back and now why those changes were made and defend the decisions if audited for age or other demographic. This work took on quite a bit more refactoring than it might appear. Each status previous had its own separate workflow in the code, and this work largerly pushed them all into a shared process that reused dialogs and centralized tech debt heavy code.

Save for Later was a much easier task, and simply added a new searchable category for applicants. It was essentially a bookmarking feature.

Additional screenshots, in png format:


Army Mapper

Note: Please view the Mapping page to view work at SYNCADD with Army Mapper. Though it was largely database work, it is more specifically a mapping/GIS project.


DHEC Immunizations Registry

Add new record mini-frame on top of demographics tabThe Immunizations Registry (IMZ) for the South Carolina Department of Health and Environmental Control (DHEC) was an alpha rewrite of their previous system written in Delphi, maintaining the business logic of their legacy DB2 database. The IMZ allows pediatrician and other doctor offices in the state of South Carolina to manage registered children's scheduled immunizations, both those already administered and those due. Project included learning the schema of the existing database in DB2, coding user interfaces with detailed data quality assurance requirements in .NET and jQuery, and connecting the UI and data tiers through a shared middle data tier, then also in development.

This system did have fairly complicated business rules, like figuring out how many days old a baby is (three months from June-August isn't the same number of days as January through March, and some shots counted one way and some, apparently, another!) and how long after an initial shot could another be administered and still be effective. HIPPA considerations also meant you had to give pessimistically constructed searches. Accidentally giving out every Smith in the database would be a really bad, and potentially illegal, thing to accidentally do.

Note that the relatively tight width and plain design was, in part, due to conservative rules about users' machine, ensuring that fairly old browsers and even older hardware would still be able to access the system easily. The interface and data tier were written in the space of approximately two and a half months (ramp-up included).

Additional screenshots, in png format:


SpiderSavings.com

SpiderSavings.com Recent Coupons ThumbnailSpiderSavings.com is the online portion of Spider Savings, a marketing company that helps local companies with print, video, and online advertisements. SpiderSavings.com has three sections, one for end users, one for coupon providers, and another for the Spider Savings' employees to administer the site.

This project involved creating a new database schema from scratch, allowing image manipulation on the server to create and design coupons, accept web payments, produce and send SMS messages, and use AJAX to provide thick functionality within a browser.

Additional screenshots, in png format:


Coastal Services Center Management Information System (MIS)

CSC Management Information Systems Homepage ThumbnailThe MIS assists CSC allot its fifteen-plus million dollar budget and nearly one hundred employees over scores of projects. This application uses Microsoft SQL Server running on Microsoft Internet Information Server (IIS) and creates a web interface using vbscript-powered Active Server Pages (ASP). Javascript is used to ensure data entry meets specific criteria, and server-side processing rechecks before entering data into the MIS database. This project is an intranet-only site.

Additional screenshots, in png format:


Information Request Tracking System (IRTS)

CSC Information Request and Tracking System ThumbnailCSC solicits online customer information on a voluntary basis and the IRTS collects and reports this information for internal use. The system both requests information from users who are downloading products, including email address and organization type, and reports these variables to the lead webmaster for yearly reporting. The IRTS is also used to create mailing labels when past customers request new products. This site is another MS-SQL Server driven ASP site, and its reporting capabilities are intranet-only.

Additional screenshots, in png format:



CSC Product/Project Description (PPD) Maintenance System

CSC Management Information Systems Homepage ThumbnailAs products at the Coastal Services Center became more numerous, a products maintenance system was created that allowed employees to create entries for new products as they were being produced along with the ability to post-date their release on the external web site. A second level of review was built in to allow managers to "green-light" entries and later edits before releasing them to the web.

One major advantage of the system was that the database template was passed through the normal review channels for web design, ensuring the Center-wide, mandated look and feel was utilized, but new products could be added without additional, intra-office review.

Administration page mock-ups (uneditable; for viewing only)




NCSU CRDM Students Page

NCSU CRDM Students PageAs the North Carolina State University's new Communication and Rhetoric of Digital Media program added new classes, keeping the students information page up to date was a headache. This PHP/MySQL system allowed students to make their own edits and additions, pushing the maintenance from the college's webmaster to the system with its pre-approved template design.


Description of development process for NCSU CRDM student information page

Description Page