In this post I talk about a Spring Boot React Maven Starter project set up to basically get agile developers going as fast as possible. What does as fast as possible mean? Also, what’s an agile developer? In other words what overarching principles apply here?

To answer the first question, as fast as possible means you can run it all up on your local with 3 commands:

$ git clone https://github.com/nicodewet/spring-boot-react-maven-starter.git && cd spring-boot-react-maven-starter/
$ mvn clean install
$ java -jar server/target/server-0.0.1-SNAPSHOT.jar

There is no Docker (yet - it will come later) and after the third step you can open http://localhost:8080 in your browser and see the app.

To answer the second question, agile developer means that working software in production at the end of the first sprint is not negotiable. It also means we accept that our user interface and interpretation of requirements expressed in software is a mere hypothesis, so we want to do everything we can to test the hypothesis as quickly as possible. Infinite scalability when we have 0 users is not a primary concern for example.

With the context of the cited sample project, to facilitate rapid development the following has been done:

  • The entire stack gets served from a single Spring Boot application so that we can build a simple Docker based pipeline to production.
  • The entire app is in a single repo with clearly marked client and server directories.
  • The developer can focus on core concerns and so React (Javascript) & Spring Boot (Java 8), not infrastructure or cloud concerns.
  • A single Maven command packages the app.
  • Multi-module Maven build.
  • No TypeScript - we’ll start with the variant of Javascript Next features provided by Create React App out of the box.

So, if the above sounds good to you, and perhaps you are stronger when it comes to Spring Boot than React, I’d recommend doing the following:

As a final note, I think TypeScript is great and the way to go, but not before you have mastered Javascript and Javascript Next.