Yext has benefited greatly from the open source community throughout its history as we’ve built the technology stack for the world’s greatest location information platform. Today, we proudly join the community with our first open source project release: ICBM.
ICBM is a build tool that specializes in building Java applications, though it also supports handling protocol buffer definitions, Play framework 1.x projects, and build steps that are arbitrary commands. We’ve been using it internally at Yext for the past three years to build the vast majority of our systems.
ICBM means more coding and less cargo-culting XML snippets. Its strengths lie in managing multiple applications intermingled in a single codebase. Adding a new application is as easy as writing a new main() method. Deploying to production is a cinch as ICBM creates executable JARs with all the classes the new application needs—and only those classes the application needs—in a single file.
ICBM makes this possible with its automatic dependency management. By assuming some widely followed Java code conventions, it can calculate all the dependencies between classes in a codebase within seconds. Those few dependencies that can’t be automatically detected can be specified in flexible build.spec files.
Using ICBM, we’ve painlessly grown the Yext system to over 100 services spread across over 3600 source files. The ease of building new services has helped us develop a highly modular architecture, combating complexity and reducing the risks of continuous rolling deploys. This has been crucial in enabling Yext engineering to think big and move fast in building the premier location information platform.
If you’re in New York and interested in learning more about ICBM in person, we’ll be hosting a talk introducing ICBM by Austin Chu, ICBM’s current maintainer, on September 24. You can RSVP at the event page. In the meantime, feel free to try ICBM out yourself from its GitHub page. We’ll be fleshing out the documentation more thoroughly over the next couple weeks, and there’s also some more work for us to do to sand off the Yext-specific rough edges, so join the project and send us your questions and contributions through GitHub or our Google Group!