
Turning Chaos Into Process
When I started at Wake in August 2012, our setup was fragile. There were no development servers, no version control, and no formal process. Everything had to be edited live in production. It felt like walking a tightrope. Any mistake could break the site. Collaboration was a nightmare because two of us could easily overwrite each other’s work. It became obvious very fast that we needed a stronger foundation.
One of my early big tasks was finishing a plan left by my predecessor to transition from a single server setup to a more robust multi server system with passive passive failover. Back then we only had two servers, one for WordPress and one for everything else, and both were production servers. We reorganized so that secure and non secure traffic had separate servers, each with their own development and production environments, and we built in a manual failover. At the same time, we separated development and production for WordPress. By the end, we had grown from two servers to nine.
At that same time, I introduced version control. Moving everyone from editing in production to using Git was a major shift. I trained the team. We put processes in place. We started doing commits, branching, and merging. All of a sudden we could track changes, roll back when things went wrong, and collaborate without stepping on each other’s toes. It changed the way we work fundamentally.
Building Custom Applications
Once we had foundational infrastructure and a second senior web developer in place, I was able to step back from day to day WordPress work and focus on more strategic custom application work. These projects allowed me to think ahead about not just solving today’s problem but planning for scale, maintainability, and future growth across University Advancement.
In 2013, while working on the primary giving form for our campaign site, I began building an in house form framework in the Kohana framework. My goal: make it fast and simple to spin up forms without reinventing the wheel every time.
In spring 2014, after we concluded that the external event registration tool we used (Blackbaud’s) could not meet our needs, I proposed and then built over the next few years our own registration system. It pulled data directly from our CRM and pushed registrations back daily. Staff updated events in our CRM and saw changes reflected in the registration form within thirty minutes. As the system matured, it evolved to support campaign events, club events, and more. Automation became the default: when an event was created in our CRM, the corresponding registration form materialized without manual intervention. By 2016 it was the standard method across UA, reducing manual form creation, cutting errors, and improving the experience for donors and registrants.
The form framework evolved too: custom themes, responsive design, and migrating forms off Nelnet so donation transaction data flowed directly into our CRM. These changes improved both the developer experience and the user experience.
Raising the Bar and Thinking Ahead
While working on infrastructure and custom applications, I also focused on raising the bar for our development practices. I drove us to adopt coding standards and a code review process. From the start I envisioned more automated support for quality, so I pushed for unit testing using PHPUnit. Over time, new code grew to achieve 70 percent or more test coverage. We introduced Jenkins to manage deployments, which made releases more reliable and eliminated many manual steps.
By 2016 I began advocating for moving from passive passive failover to active active infrastructure in the cloud. I collaborated with IS as an equal partner; together we evaluated options, including Google Cloud, before deciding on AWS. As we shifted, IS and our team ramped up on cloud architecture. We moved toward the future intentionally rather than reacting to crisis.
Today we have gone from zero development servers, zero version control, and no formal development process to a modern, cloud hosted infrastructure with defined environments, disciplined version control, automated testing, continuous integration, and a suite of custom applications that raise efficiency across the university. We are ahead of many peer institutions not by accident but by design.