A three-day conference for enterprise Node.JS developers, Node.JS Interactive is sponsored by the likes of Google, IBM, Heroku, Linode and… well, us.
How did we get here?
That story begins with the decision to invest 18 months of designer and developer effort in creating Apostrophe 2.x. Various incarnations of Apostrophe have been with us for more than six years, but 2.x is special.
Released in fall of 2016, Apostrophe 2.x is a “long term support” release we can proudly stand behind. It’s different because it was built from the ground up on three core principles: pair programming, documentation-driven development (DDD) test-driven development (TDD) and extensible everything (EE).
The benefits of pair programming
“Pair programming” is a process in which two developers work side by side. If you’ve ever tried programming, you know what an error-prone process it is: the computer doesn’t do what you want, it only does what you tell it. Two people do it ever so much better than one.
The increase not just in productivity, but also in thoughtfulness and “buy-in” across the entire team, is nothing short of amazing.
Even more fundamental perhaps was the decision to agree on APIs — Application Programming Interfaces — in advance. Ideally we did it in our sprint meetings. But if necessary, we’d grab a quorum of developers in the middle of our workday and hold a quick “charrette” to make sure we chose something the person at the next desk could learn to love. You’re never in too much of a hurry to make a decision you can live with.
Often, we’d document the feature before we wrote a single line of code: how would another programmer use this? How would a customer use this?
Even more than pair programming, “DDD” led to a sense of commitment and deep understanding.
Another key choice made in creating Apostrophe 2.x was test-driven development. For most features of Apostrophe, we started by saying, “how would I test this? How would I know if it wasn’t working?”
So we wrote the tests first. Then the code.
The result is a test suite that tells us when things aren’t right, across the whole spectrum of Apostrophe’s feature set.
There has hardly ever been a project where we didn’t want to extend Apostrophe’s capabilities in some way.
So for Apostrophe 2.x, we went all in. Every single module in Apostrophe is designed from the ground up to be extensible (adding new features for a particular project) and subclassable (creating multiple instances, like three different types of blog on the same website). Because we embraced object-oriented functional programming techniques, there is a clear and documented way to do all that, both in the browser and on the server. And that means maintainable projects.
Enter the enterprise customer, with big projects to maintain!
Object Oriented Functional Programming: Tom Boutell at libertyjs 2016
Apostrophe Enterprise Support
With the release of Apostrophe 2.x, we had an open source CMS that Node.js developers could truly get excited about, with an interface their customers could get excited about. We knew “enterprise class” customers would begin to embrace it.
So we launched Apostrophe Enterprise Support: an opportunity for organizations that use Apostrophe internally to work directly with the Apostrophe team. Enterprise customers can drive the development of new open-source Apostrophe features and ensure our roadmap includes what they need. And the resulting revenue stream does much to ensure the continuity of the ApostropheCMS project.
That benefits the entire community, while also allowing our customers to avoid “vendor lock-in” and reap the benefits of custom development without going into the CMS business for themselves.
Honestly, the response has been humbling. Already we’ve built a remarkable list of features with the support of enterprise customers.
Features created through Enterprise Support
Here are just a few of the major open-source Apostrophe features that came to be just this year through enterprise support:
Workflow, with an approval system. The apostrophe-workflow module builds on our user-friendly in-context editing, preserving that convenience while ensuring everything is reviewed by the right person.
Internationalization (also known as “localization”), with the ability to export just what has changed from one language’s version of a page to another. Users can preview the changes they are about to export, for instance from “global English” to a localized site for a specific country. This is also part of the new apostrophe-workflow module.
Single sign-on. Apostrophe supports single sign-on with Google, Facebook, Twitter, and many other systems thanks to the open source Passport module and our own new apostrophe-passport module that provides a “universal bridge.”
Conflict resolution. if two users are editing a page or other piece of content in Apostrophe, Apostrophe intervenes to resolve the conflict.
Friendly filters when managing “pieces” such as blog posts and events.
Better cloud computing support, including delivering assets via the cloud for better performance at large scales.
Redis support. Redis is a deservedly popular solution for caching information in web applications. Apostrophe can use it for both caches and user sessions. In fact, user sessions can be stored in a wide range of places, thanks again to open source.
Better contextual editing. Our goal is to enable editing “in context” on the page in more and more situations.
Notifications. We’ve added an attractive and unobtrusive notification system for confirmation messages, errors and the like.
Focal point editing, for better handling of images across a range of mobile and desktop devices.
Enterprise-level reliability. Many smaller issues with performance and reliability, things that might “slide by” on smaller sites, became priorities thanks to enterprise customers.
A better regression testing process. Because our enterprise customers demand it, we now run Apostrophe through manual regression tests as well as automated unit tests. There’s nothing quite like a human being when it comes to saying “hey, that button is hidden under the other button now.”
Doing things fast in bulk. Sometimes, you need to trash a lot of things in a hurry. Enterprise customers notice oversights like this first.
Better bundles. Thanks to our work on the apostrophe-workflow module, which enhances Apostrophe in so many ways across the board, it’s now easier to make big improvements to Apostrophe and package them up as a single “npm module” for developers to install.
Better user experience for just about everything.
Better developer experience for just about everything.
And of course, bug fixes. Do we make mistakes? Spoiler alert: yes. Open source means more eyes on the code, and enterprise support customers mean more attention paid to fixing bugs quickly.
Contributions from enterprise customers
Enterprise customers sponsoring our own work is just part of the story. Enterprise customers typically also have in-house developers who contribute Apostrophe features of their own back to the community.
A great example is Apostrophe’s “object” schema field type, which was contributed this summer by a developer working for an enterprise customer with a particularly deep commitment to Apostrophe.
This week we’re making final preparations to sponsor Node.js Interactive. And building on the experience of our enterprise customers so far, we intend to change a few minds.
Node.js and content management systems aren’t often mentioned in the same sentence. Traditionally, Node.js is more commonly used in “middleware” roles in the enterprise.
And yet, all of our enterprise customers have two things in common:
So from October 4th to October 6th, we’ll be at Node.js Interactive, bringing the good news about ApostropheCMS to new enterprise customers. We think we have what they need, and we look forward to sharing it with them.
If you’re in town, come by and say hello! And stay tuned for more amazing Apostrophe features built with the support of enterprise customers.