No More Copy/Paste
How do you start a new project? Perhaps you start with an empty project and copy/paste relevant content. Or maybe you start by cloning the most similar project you have to hand, then add, modify and remove code to get what you want.
Or perhaps you use a template generator, such as Yeoman.
If you’re a Spring Boot developer, you might use Spring Initializr, which makes it trivial to create new Spring Boot projects. Essentially this amounts to “start with an empty project” except with the dependencies you want added. You can’t customize the template for something as trivial as a license header, let alone add meaningful custom behavior.
Many organizations address these problems by forking Initializr, but it’s not really intended to generate custom projects. It’s also tied to Spring, so it can’t help you with other technologies.
The Problems
With copy/paste you typically end up with content you don’t want or forgot to change. With template generators, you end up needing to customize new projects each time, because you can’t easily customize the templates as they’re not normal projects.
In both cases you get, at most, a source code starting point. Modern projects are more than that. What about the GitHub repo, issue tracker, related Slack channel(s) to facilitate collaboration, build setup, deployment spec etc.?
With the increasing popularity of microservices, these problems are becoming more and more important, as teams create services every day. Making it trivial to create new projects also reduces barriers to experimentation, a crucial activity for developers and teams.
The Atomist Solution
Atomist solves these problems by integrating powerful, extensible project creation with our development-to-operations Slack support.
With the Atomist bot living in your team, creating a new project — GitHub repo and linked Slack channel — takes under a minute. Your new project is fully customized, with nothing to correct or delete:
Atomist project creation magic combines two things: Your customized seed project and a generator. A seed project is a regular project in the target technology, with no template weirdness. (Here’s an example.) A generator is a piece of TypeScript code that works with the Atomist project model to transform that seed into a unique project, given parameter values that it collects each time it runs:

A seed project is a regular running project in the technology of your choice. You can verify its build status, edit it with normal tools, discuss it and collaborate on it as with any other project.
Changes to a seed project will be reflected in further projects you create from it. Thus a seed project is a definitive place for best practices.
You can have as many seed projects as you need, for different purposes.
Under the Covers
A well written generator can cope with a wide variety of seeds. Seeds don’t know about generators, which can transform projects unpolluted by explicit template content. In fact, you can often use an existing project as a seed without modifying it.
For example, our Spring Boot generator doesn’t rely on hard coding. It infers the Spring Boot package (the one containing the class annotated with the @SpringBootApplication annotation), so is robust against seed refactoring. This is possible because the generator parses the seed project each time it’s run. The following code fragment from our out-of-the-box Spring Boot support illustrates how this works, against our Project object:

This approach isn’t limited to Spring. While we’re showcasing the concept for Spring, our project model and the TypeScript libraries we’ve created provide a basis that can work with any language or framework.
If you read my first blog on this, there have been two notable changes: The retirement of our Rug DSL in favor of TypeScript (using the same project object model), and the creation of our microgrammar library.
Beyond Copy/Paste
Copy/paste is not the most auspicious way to start a project. Atomist makes it trivial to start new projects on a strong, consistent foundation of your choice.
Project creation is the first step in Atomist’s development to operations lifecycle automation, which continues with build setup and notifications and extends to control and visibility of deployment.
Try Atomist in your team today and our bot will walk you through creating your first seed project. It’s easy to create and link your own Slack team if you prefer. And please join the discussion in our community Slack. I hope to see you there!


