
Table of Contents:
Skills: C#, SQL, and XAML
Diskgroup Utilities was the first professional software project I worked on. I inherited it from another intern who began the work the previous summer. In Hyland Software's OnBase product, a diskgroup is a pair of SQL tables and disk paths that define how documents are stored. The Diskgroup Utilities project included two tools: a recovery tool and a migration tool. I made improvements to both.
The recovery tool detected corruption after backup restoration by analyzing the database and disk paths.

When I inherited Diskgroup Utilities, the recovery tool loaded database rows for every diskgroup into memory. This caused the application to run out of memory when working against large databases. I provided two solutions:

As it turned out, the logic rewrite also increased the performance of the tool. The impact was so drastic that the selection window was immediately obsolete! Runtime on our benchmark diskgroup dropped from ~20 minutes to under a minute. The new logic also detected additional errors that the previous logic missed.
The diskgroup migrator moved items matching selection criteria from a source diskgroup to a destination diskgroup.

My contributions here were smaller but important: I fixed an issue where the tool moved files from the wrong diskgroups and another where it failed to move all of the selected items. These fixes made the migrator more reliable for customer workloads.
Skills: ASP.NET, CSS, C#, SQL, and HTML
At Hyland Software I built two translation utilities: the String-to-Project Mapper and the Manage Modules webpage. These tools worked together to specify which strings required translation when a customer purchased a product.
The String-to-Project Mapper scanned our source code for strings and produced a list of the binaries they lived in, answering questions like, "Which strings live in this DLL?"

The Manage Modules webpage let employees define how binaries mapped to modules, which were units of sale.

Together, these tools connected a customer purchase to a precise set of strings. This ensured we translated everything the customer would see, avoided shipping untranslated text, and prevented unnecessary translation work that inflated costs. I also fixed several defects in adjacent translation tools, improving both performance and translation accuracy.
One highlight from this work was resolving one of my favorite defects: searches failed to return strings we knew were in the product. The database had the correct values, but even a simple string match didn't find them. Did we discover an error with the underlying database software? We looked into the binary directly and discovered that non-breaking space characters snuck into our tools! The search logic treated breaking and non-breaking spaces as different, so the matches failed silently. Normalizing the whitespace fixed this problem instantly.