4

What does it look like when developers go above and beyond for their company?

We think it probably looks a lot like Mac Heller-Ogden did two years ago, working late into the evening at Cars.com, completing a proof of concept he started on his own initiative.

Mac was a senior developer at the time. He was trying to answer a question:

Could Node.js improve workflow, efficiency, and performance at Cars.com?

Mac—who’s now the principal developer at Cars.com—was kind enough to spend a few minutes with us on Skype recently to tell us the story.

In this article, you’ll learn why he decided—on his own—to build a proof of concept for Node.js at Cars.com.

You’ll also learn how long it took, what leadership at Cars.com said when they saw his work (spoiler: they loved it), and what happened next.

Note: Have a software project (in Node.js or any other framework) that you need help with? We’ll introduce you to an experienced development team to help you build it. Contact us here.

Mac Heller-Ogden presenting at the JFrog User Conference

The Problem: Keeping JavaScript and Java in Sync

Like many large, well-established sites, Cars.com has historically relied on Java for server-side architecture.

In the last few years, however, Cars.com has begun using a lot of app-like behavior on its site, an evolution that created an increase in client-side JavaScript work.

Often, when a change was made in JavaScript on the client-side, changes were also needed in Java on the server-side to keep things working.

It worked, but it was a process Mac and others found both time-consuming and inefficient.

“A lot of this was about aligning the server-side part of the front end with the client-side,” Mac told us. “It was two totally different worlds.”

Node.js bridges the gap between the server and client sides of a website.

Importantly, using Node on the server-side means it’s easier for front-end developers to understand and possibly even help with backend code.

On the surface, it looked like Node might be able to solve some of the inefficiencies at Cars.com.

At the least, Mac thought, it was an idea worth testing.

Unique CMS Challenges

Behind the scenes, Cars.com had a unique content management system (CMS) configuration.

The CMS and server-side Java were coupled together, creating unique coding challenges for the development team.

Developers writing server-side code were forced to write JSPs (JavaServer Pages) within the CMS.

Mac and others wanted to break this link between content management and content rendering.

They also wanted to move away from JSPs which were developed in the mid-1990s and are considered by many to be an antiquated method for writing server-side code.

The hope?

That breaking the link between the content management and the server-side code would speed development time and improve performance.

“When you have the JSPs and the CMS all bundled together, there’s more noise in the source code, more commands, more merge conflicts,” Mac said. “It creates a clunky developer workflow to do all that stuff together.”

No one was saying: ‘Hey, Let’s Do Node’

The development team at Cars.com had been talking about ways to improve their workflow for several years.

They’d looked at Node and other possible solutions, including Play, an option favored by another developer on the team.

As it happens in many organizations, the team was busy, and continued using the workflow they knew well and had been using for years. “Nobody was saying, ‘Hey, let’s do Node,’” Mac told us. “But I felt it was something that might be able to help us.”

Which is why he created a test.

Why Mac Built a Proof of Concept on His Own Time

Mac thought about asking his boss for time to explore a proof of concept for Node.js.

But he decided against that approach.

At the time, he didn’t have good answers for the questions he knew he’d face about Node.

“I didn’t want to go through having those discussions until I knew it was viable, and that it would work,” he told us.

Mac thought Node was an obvious solution for several of the team’s chronic problems.

But there were technical challenges with Node—challenges he didn’t know if he could overcome.

So, instead of campaigning for work hours, Mac worked on his own time, staying late for several weeks to see if he could build a working proof of concept.

“It was an exercise for myself as much as anything,” he told us. “I wanted to see if I could make it work.”

When he saw his test page working in the test environment, he knew it was time to take Node to his senior leadership.

How Mac’s Leadership Reacted

In a meeting with leaders of the Cars.com development team, Mac presented his proof of concept and proposed adopting Node.js across the entire Cars.com site.

He was nervous about the meeting, hoping his ideas and his proof of concept would be met with a positive response.

He need not have worried.

When they saw Mac’s proposal and proof of concept, Mac’s leadership team was immediately receptive.

“I showed them what could be done, how quickly it could be done, and the benefits I saw,” he told us. “I was nervous about it, but they gave me a thumbs up and said, ‘Let’s make this happen.’”

From a Proof of Concept to a Full Node Migration

Mac was tasked to lead the project and assigned several developers to help.

He promised his bosses he’d have the first page published using Node “within two weeks” of that initial meeting.

“That was the stupidest answer I’ve ever given,” Mac told us with a laugh. “I wasn’t thinking about infrastructure, processes, security, and everything else we needed to do to get it working.”

It took Mac and the team months to get everything in place.

There were challenges of course—roadblocks they hadn’t anticipated. At one point, they reached out for help, bringing in a Node consultancy for their perspective and expertise.

“They were very talented folks,” Mac said. “They really helped us validate our approach.”

Six months after the initial meeting, Mac and the team began successfully launching Node-built sections of the website.

That was two years ago.

As of this writing, there are only two small sections of Cars.com that have not been migrated to Node. Both are currently in progress and close to being completed.

The Benefits of Node for Cars.com

It’s difficult to say what would have happened without Mac and his initial proof of concept.

Probably, Cars.com would still be muddling along, working manually to keep JavaScript and Java in sync as they did before migrating to Node.

Instead, the company has seen benefits in numerous areas.

There have been speed and performance gains, but in the end, the largest benefits have been internal.

A number of JavaScript developers have learned Node and are working with it on a day-to-day basis.

There is much less need to manually sync Java and JavaScript than there was in the past.

And the server-side coupling between Java with the CMS has been broken, relieving the team of the problems they used to fight with the old configuration.

In addition, in the past, the Cars.com team only released a new site every month or two.

Now—because of Node and several other workflow changes—Cars.com releases as many as a dozen small updates a day.

“Node is very well-suited for CICD (continuous integration and continuous delivery),” Mac said. “Our new release schedule isn’t just because of Node. We made a number of other changes to improve things. But Node was a big part of it.”

The Thing Mac Said About Taking Initiative

Toward the end of our conversation, Mac said something we thought was profound.

Mac’s decision to pursue Node on his own time took courage.

There are some companies that would frown upon that kind of initiative. Fortunately, Cars.com wasn’t one of them.

Node is a fantastic framework. We think it can help many companies in a similar situation to Cars.com.

But perhaps Mac’s story isn’t as much about Node as it is about Mac himself.

If you are a developer and you’re working for a company, isn’t this the kind of positive impact you want to have?

Maybe you don’t have to wait before exploring that big idea you’ve been sitting on.

Maybe you should just go build it. On your own time if need be. Whether you have formal permission or not.

We asked Mac about this—about the risk he took by taking action on his own initiative.

“I’ve actually done something like that several times over my career,” he said. “I’ve had success every time.”

Note: Have a software project (in Node.js or any other framework) that you need help with? We’ll introduce you to an experienced development team to help you build it. Contact us here.