Pushup Offers Speed of Go in Web Development Framework
Pushup, a new open source Go Framework for building web pages, was born out of the rescue of healthcare.gov.
The original healthcare.gov was in Java and had hundreds of machines running an application, according to Paul Smith, a software engineer who is now CTO and co-founder of digital services firm Ad Hoc. Healthcare.gov infamously made headlines for its problems at launch.
“We saw up close what huge need there was for better technology, modern web development in government to make government services work better,” Smith told The New Stack.
He was involved in the rescue of healthcare.gov and co-founded Ad Hoc with Greg Gershman as a result of that work. Ad Hoc’s first customer was the Centers for Medicare and Medicaid Services (CMS), the agency that runs healthcare.gov. Ad Hoc, which was then just four people, landed the contract to work on CMS to make new features on healthcare.gov for the subsequent open enrolment period that following year, so they didn’t have a lot of time.
Embracing Go for Web Development
Smith had been working in web development for a long time but began using Go soon after Google released it in 2007. He liked that it was fast, statically typed and that the compiler helped him catch bugs before they went into production. He decided to use it on his work with healthcare.gov.
“I was using Go more and more and we thought this would be a great use case for healthcare.gov, where a big part of what we saw was poor performance on the existing system,” he said. “We wanted to show something that was really fast, had great performance, was really stable, and very efficient that could run on a small number of machines.”
So that first summer, Ad Hoc used Go to build a web application for healthcare.gov called Window Shopping, which allowed people to browse health plans without having to be looked in to see what was available.
“It did the job. It was very performant and very stable,” Smith said. “It didn’t have any problems during open enrolment that year and CMS was really happy with it.”
But internally, the team wasn’t super happy with it — they’d written it quickly and while Go gave them great building blocks — a standard library, an HTTP package and templating package — they were “low-level building blocks,” he said. It also required the developer to make a lot of choices, while Smith’s partner was working in Ruby on Rails and liked that it made a lot of choices for the developer.
“You can jump into a Ruby on Rails project, no matter who started it, and know where things are — where the logic is, where the database condition is, where the templates are,” Smith explained. “This application that we wrote for CMS was very bespoke. Yes, we’re making it quickly and so we kind of made choices that were all over the place. While it worked well, it wasn’t the easiest thing to maintain.”
The team realized that going forward, everybody would be forced to make these choices if they were using Go as a web development language. Internally, the Ad Hoc team used it a lot internally, but primarily reserved it for backend services like an API layer for systems talking to systems, he said. But Smith began to think about what kind of framework for web development he might want.
Pushup: A Go Framework for Web Development
That’s how Pushup, which was officially released in January, was born: It began as an internal project to build a new web framework that checked all the boxes Ad Hoc felt were important to web development.
“What’s special about Pushup is that, as far as I know, it’s the first web framework in Go that is focused on the frontend experience of writing templates, having an opinionated project layout and the files you create are the same as the URL routes that your application goes to,” he said. “This is very common in other frameworks, where you make a file and the name of the file on the file system is also what’s in the URL. And that was very appealing to us — that you could just start a new file, name it something, save it and immediately go to the browser and you could access it right there.”
It was always possible to write HTML templates and Go, but where Pushup comes in is in creating a framework that makes it all easier for the developer to build these page.
“I really wanted Pushup […] to compete with Ruby on Rails and Django for Python, and then PHP, these other languages and frameworks [with] that more page-oriented style,” he said. “And I haven’t seen a web framework [like that] in the Go world yet.”
A Framework for ‘Page-Oriented’ Web Apps
Pushup pages are a combination of HTML and Go, with a syntax that switches from HTML to Go for the special logic areas, such as loop over an array, list, a database connection, or calling an API, he said. Then it’s condensed into one page, a file format called a .up file, and then Pushup compiles that into pure Go, which can be turned onto a web server and hosted.
“We are building Pushup to make those kinds of sites easier,” he said, adding that Pushup also provides an easy developer experience that aids in managing all of it.
Like htmx, Pushup also allows the app to send and receive messages from the server without triggering a page reload, he added.
“We can write Go for back ends and APIs, but also for front ends,” he said. “And that’s that’s very powerful.”