The Library Corporation
Duration: September 2019 - November 2021
Role: Software Engineer
The Context
After Internet Brands I wanted more scope, and I got it, just not in the way I'd pictured. TLC builds cataloging software that 5,500+ public and school libraries across the US run on. I joined a small team: a lead developer, a backend engineer, a PM, and me on the frontend. Three months in, the lead moved over to a separate venture project, and for the next 23 months I was the only frontend developer.
The Challenge
This role dropped me into unfamiliar territory on every axis at once:
- New domain: Library cataloging is its own specialized world of serials, periodicals, MARC records, and controlled vocabularies. I'd never worked with librarians or had any sense of how they work.
- New stack: AngularJS on the frontend, Java/Spring on the backend, Thymeleaf for templating, and my first time ever touching Java.
- No onboarding: The lead who left hadn't documented much, and I was remote and isolated, reverse-engineering the whole thing from the codebase.
- Waterfall process: Long feedback cycles, an impatient lead before he left, and barely any access to the people actually using the software.
I'll be honest: the first two weeks, imposter syndrome had me completely stuck. I didn't know where to start.
The Solution
What got me through it was treating the domain itself as the problem to solve. I leaned hard on the QA team, the backend developer, and eventually a cataloger SME who became my guide to how librarians actually work.
Building the Serials Cataloging System
This was the flagship of my time at TLC. Serials, the magazines, journals, and periodicals, had been the single most requested feature for years and had been put off again and again.
I worked with a designer, a PM, the backend developer, and a cataloger SME to architect it from scratch. The hard part was never the UI; it was modeling how serials actually behave and turning that into something catalogers could drive themselves:
- Generation algorithms (the core of the system): Serials run on schedules, daily, weekly, monthly, quarterly, biannual, with issue types like Volume, Part, Issue, Index, and Section. Some are predictable and some are stubbornly irregular. I designed and built the algorithms that generate, clone, and duplicate issues off configurable rules, and I worked across both the AngularJS frontend and the Java/Spring backend to do it.
- Flexible date/sequence handling: Depending on the publication type, an issue's date and sequence could be synchronized or fully independent, so the model had to treat date and sequence as two independently configurable axes rather than a single counter.
- Surface features: Pagination, search, filtering, and navigating between serial records all sat on top of that engine.
This project more than doubled the application's feature count. I presented progress at company all-hands meetings all year, and honestly, that's a lot of what rebuilt my confidence after those rough first weeks.
WCAG Accessibility Compliance
Libraries serve every kind of patron, and a lot of institutions require accessibility compliance, but the legacy Thymeleaf templates had never once been audited.
So I went through 15+ views and remediated 200+ violations in about a month:
- Missing alt text, input labels, and ARIA attributes
- Broken links and empty buttons
- Low contrast and incorrect heading hierarchy
- No focus states or keyboard navigation
- Missing semantic HTML and language meta tags
Polymorphic Cataloging Components
Different asset types, books, magazines, and encyclopedias, shared a lot of the same data-entry patterns but each had their own fields. Rather than duplicate components for every type, I built a polymorphic class that handled multiple asset types and swapped views based on the cataloging context.
This was pre-props AngularJS, so I went with a class-based approach. It cut the code duplication way down and made the UI flexible enough to take on new asset types without a major rewrite each time.
The Impact
- Serials cataloging system delivered after a year of development, the most requested feature in the product's history
- 200+ accessibility violations remediated across legacy views
- 30+ features shipped as sole frontend developer
- 5,500+ libraries served by the applications I maintained
- Rebuilt confidence through consistent delivery and all-hands presentations
Why I Left
There was no promotion path, and the waterfall process meant painfully slow feedback loops, so I was ready for somewhere that moved faster. I left voluntarily for FightCamp.
What I Learned
This role taught me how to learn. New domain, new stack, no documentation, no senior to lean on; I just had to figure it out. The imposter syndrome from week one never fully went away, but I learned to work through it by stacking up small wins and building relationships with the people who understood the domain far better than I did.
Tech Stack
AngularJS, Java, Spring, Thymeleaf, HTML5, CSS3, WebAIM, Browser Accessibility Tools
