On the October 30th, 2018 Technical Committee call the subject of the developer experience was raised (starting from a discussion on the audit log initializer resulting in so much CPU usage when using demo data - i.e. the developer workflow) leading to a more in depth discussion about the “typical” developer workflow, and what challenges people had.
I think this is important for us to follow-up on, and I like how a positive developer experience has been compared to positive marketing for the product (thanks @Wesley_Brown).
In an effort to continue the discussion, I want to summarize a few of the key points we made:
- Not everyone runs the Ref Distro locally - some do, some dont
- When not running Ref Distro it might be: It’s too slow or takes too much memory or for UI development it’s just unneeded (you can point UI at the back-end services on test). Otherwise it’s simpler/quicker to see the change on test.
- When running Ref Distro it might only be done if it’s a change to demo-data or the work involves multiple services.
- We have stunted our tooling by requiring everything, especially integration tests, to be run inside a docker container.
- Some of our tooling has grown quite out-of-date (e.g. Spring Boot has moved on to version 2).
To start addressing some of these concerns, and to spur more discussion, I made a simple change to Reference Data so that you can run integration tests outside of the docker container by running
./gradlew integrationTest - it’ll launch Docker containers for PostgreSQL, Redis, et al and run the tests under your computer’s JVM, and this should work from IntelliJ as well. Give it a try and let me know what you think.
Of course this doesn’t address everything we raised. If I would define a set of work, I think that would be:
- Prioritize work that reduces the system resources required to launch Ref Distro (e.g. audit log initializer)
- Make it simple to make a change to a Service, and quickly test that in a Ref Distro.
- Focus on supporting testing development tasks that run outside of a docker container - so that it’s easier/faster to use an IDE.
- Start upgrading our tools / dependencies (I also started down this path, see the OWASP dependency report and also see which dependencies have newer versions by running
Is this the work you’d focus on? The way that you’d prioritize it? What about the UI workflow? Lets start that discussion here and get it right. The better we define it here, the better everyone’s daily work flow should be.