Work History: Hyland Software - Software Engineer Intern

What I did as a Software Engineer Intern at Hyland Software from 2012-06 to 2012-08.

Table of Contents:

Diskgroup Utilities

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.

Diskgroup Recovery Tool

The recovery tool detected corruption after backup restoration by analyzing the database and disk paths.

Diskgroup Recovery Tool

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:

  1. A selection window to run the tool against a subset of diskgroups.
  2. New scan logic to process each diskgroup independently instead of loading them all at once.
Diskgroup Selection Page

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.

Diskgroup Migrator

The diskgroup migrator moved items matching selection criteria from a source diskgroup to a destination diskgroup.

Diskgroup Migrator

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.

Translation Software

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?"

String-to-Project Mapper

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

Manage Modules Webpage

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.