SlideShare a Scribd company logo
Michał Kordas
Blazing Fast Feedback Loops
in the Java Universe
FEEDBACK
DO A THING
CHECK HOW
IT WENT
DO NOT BUILD ON ASSUMPTIONS
Blazing Fast Feedback Loops in the Java Universe
Blazing Fast Feedback Loops in the Java Universe
CONTEXT
• Small team
• All use IntelliJ IDEA
• ~30 repositories
• Java, Groovy, Scala
• Maven, Groovy
• Jenkins
• GitHub
WHAT YOU DO WHEN…?
• broken environment
• not meaningful exception
• struggling with technology
• struggling with project
• style-related comment during code review
EVERY TIME WHEN
FEEDBACK COMES TOO
LATE TRY TO MAKE IT
FASTER
BROKEN ANYTHING?
ADD A HELL LOT OF HEALTH CHECK BUILDS
NOT MEANINGFUL EXCEPTION?
FAIL FAST
CATCH EXCEPTION OR THROWABLE
ADD CONTEXT
AND RETHROW OR YOU’LL DIE
STRUGGLING WITH TECHNOLOGY?
ASK ON STACKOVERFLOW
(AND ANSWER BY YOURSELF)
STRUGGLING WITH PROJECT?
ADD TO KNOWLEDGE BASE
README.md wiki
STYLE ISSUES DURING CODE REVIEW?
ADD TASK TO AUTOMATE NEXT TIME
COMPILER WARNINGS
http://programmers.stackexchange.com/questions/94754/how-do-i-
convince-my-teammates-that-we-should-not-ignore-compiler-warnings
COMPILER WARNINGS
PREVENTING COMPILER WARNINGS
DEPENDENCY UPDATES
MONITORING DEPENDENCY UPDATES
MAVEN
GRADLE
HOW?
• tool that invokes the above commands in all repositories
• report for developers is created periodically
COMMIT MESSAGES
"git log origin/master..HEAD".execute().text
BUILD STATUS
JENKINS CI BUILD MONITOR PLUGIN
https://github.com/jan-molak/jenkins-build-monitor-plugin
SIREN OF SHAME
https://sirenofshame.com/
GITGUARD
Chrome extension blocking GitHub merge
button based on specified Jenkins jobs
https://chrome.google.com/webstore/detail/
gitguard/dlbacfedgdjanlkofjckclmgmijbhakl
NO RED MASTER PLEASE!
• Run all tests on branches
• Use GitHub Status API
• Merge master before running tests
ENFORCE UP-TO-DATE
• Enforce branch to be up-to-date before
merge
SHIELDS AND BUTTONS
UNIT TESTS
Fast (hundreds per second, run in parallel)
Isolated (single unit tested)
Repeatable (always the same result)
Self verifying (either pass or fail)
Timely (written early)
FIRST
BLAZINGLY FAST AND ULTIMATELY RELIABLE TESTS
mvn test gradlew test SHIFT+F10
PARALLEL TESTS CONFIGURATION
PARALLEL BUILD CONFIGURATION
GRADLE PERFORMANCE TIPS
mavenCentral() jcenter()
USE DAEMON
UPDATE TO LATEST GRADLE
gradlew wrapper –gradle-version 3.1
gradlew build --profile
USE JCENTER
PROFILE
GRADLE BUILD SCANS
COMPILE INCREMENTALLY
compileJava.options.incremental = true
CODE STYLE / STATIC ANALYSIS
• Checkstyle, PMD, FindBugs, CodeNarc
• Agree on common rules for all projects
• Shared configurations
• Gradle plugin
• Maven plugin
• Maven parent POM (tricky)
INTERNAL QUALITY PLUGIN
• Integrates all agreed tools with all
reasonable rules enabled
• Customized for project/company needs
• Zero configuration by default
• Unified console output with clickable links
gradlew checkstyleMain pmdMain findbugsMain codenarcMain
checkstyleTest pmdTest findbugsTest codenarcTest
gradlew quality
BLACKLISTS
• Use blacklists instead of whitelists to get
new rules
PMD
FindBugs
CodeNarc
EARLY STATIC ANALYSIS FEEDBACK
• CheckStyle-IDEA
• FindBugs-IDEA
• SonarLint
GATHER VIOLATIONS FROM ALL TOOLS
AND MODULES
gradlew quality --continue
mvn -fae
mvn --fail-at-end
GRADLE BASE PLUGIN
• Applies ‘java’, ‘groovy’ and ‘maven’ plugins
• Always shows full stacktraces, even if --stacktrace is forgotten
• Adds provided configuration (missing in Gradle)
• Configures repositories with dependencies
• Adds tuned compiler configuration for Java and Groovy
• Displays detailed information about all warnings (-Xlint:all option)
• Fails build on any unsuppressed warning (-Werror option)
• Adds configuration to run tests in parallel
• Enables rich test logging with summary
• (Tests run: 3, Failures: 2, Skipped: 1) and full stacktraces
• Configures wrapper task with latest Gradle
• Applies taskTree plugin
• Applies com.github.ben-manes.versions plugin
• Prints Gradle and JVM versions in the output
SANITY BUILD MATRIX
Periodically run on master series of builds using
different configurations that developers may use
• various Java and Maven versions
• various build parameters like -DskipTests
• various JVM params like locale
• compilation with fresh repository
MUTATION TESTING
• Mutations are made to the code
• If tests fail then the mutant is
• If tests pass then the mutant
• Percentage of mutants killed is indicator of
your tests quality
• Can be really
killed
lived
slow!
FAST MUTATION TESTING
scmMutationCoverage
GitHub status
Report
NON-REQUIRED CHECKS
https://help.github.com/articles/about-required-status-checks/
NONDEX
• Tool for detecting wrong assumptions
about Java APIs
• assuming specific order of HashMap iteration
• Run tests with changed implementations of
standard classes to return shuffled results
• Same happens when upgrading Java
APIS ANAYZED BY NONDEX
PLAY WITH COMMITTING .IDEA FILES
PROVISION NODES AUTOMATICALLY
GET STATUS ON PULL REQUESTS
QUICKLY
PIPELINES
https://wiki.jenkins-ci.org/display/JENKINS/Build+Pipeline+Plugin
gradlew build
CODE REVIEW
• Do timely
• Assign people
• Internal team review
• External review
• Address comments
OPEN PULL REQUESTS DASHBOARD
https://github.com/pulls
CONTRIBUTING FILE
create CONTRIBUTING.md in repository root
be notified
QUALITY OF FEEDBACK
RETROSPECTIVES
RETROSPECTIVES
IF IT IS NOT FUN, YOU'RE DOING IT WRONG
DIALOGUE SHEETS
https://www.softwarestrategy.co.uk/dialogue-sheets/
CONSTANT IMPROVEMENT
SUMMARY
• We want feedback to
• continuously improve
• deliver more value
• reduce risk
• learn
• Feedback has
• many types
• many sources
THERE IS NO FAILURE.
ONLY FEEDBACK.
Robert Allen

More Related Content

PDF
TDD for APIs @ Europython 2015, Bilbao by Michael Kuehne
PPTX
Top 10 reasons to migrate to Gradle
PDF
DevOps 及 TDD 開發流程哲學
PDF
Continuous delivery - tools and techniques
PPTX
Gradle 2.Write once, builde everywhere
KEY
Make It Cooler: Using Decentralized Version Control
PDF
Continuous Development Pipeline
PPTX
Gozengo sauce presentation
TDD for APIs @ Europython 2015, Bilbao by Michael Kuehne
Top 10 reasons to migrate to Gradle
DevOps 及 TDD 開發流程哲學
Continuous delivery - tools and techniques
Gradle 2.Write once, builde everywhere
Make It Cooler: Using Decentralized Version Control
Continuous Development Pipeline
Gozengo sauce presentation

What's hot (20)

PPTX
Сергей Моренец: "Gradle. Write once, build everywhere"
PDF
Take your CFML Legacy Apps to Modernization
PDF
Continuous Integration for Spark Apps by Sean McIntyre
PDF
Drupalcamp Simpletest
PPTX
Testing API's: Tools & Tips & Tricks (Oh My!)
PDF
How to Upgrade to the Newest Shiniest Django Version
PDF
DevCon-Shikhar Slides
PDF
DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)
PDF
DevSecCon London 2017: Permitting agility whilst enforcing security by Alina ...
PDF
Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.
PDF
Hadoop Summit 2013 : Continuous Integration on top of hadoop
PDF
Jenkins Pipeline Tutorial | Continuous Delivery Pipeline Using Jenkins | DevO...
PPTX
Gradle 2.Breaking stereotypes
PDF
Automate your build on Android with Jenkins
PDF
Capybara testing
PDF
Creative Branching Models for Multiple Release Streams
PDF
6º Encontro do Grupo de Testes Carioca - Testes em um contexto de Continuous ...
PPTX
Test Driven Development on Android (Kotlin Kenya)
PPTX
PPTX
Speed up your regression and reduce cost load with Selenoid + K8s + ReportPortal
Сергей Моренец: "Gradle. Write once, build everywhere"
Take your CFML Legacy Apps to Modernization
Continuous Integration for Spark Apps by Sean McIntyre
Drupalcamp Simpletest
Testing API's: Tools & Tips & Tricks (Oh My!)
How to Upgrade to the Newest Shiniest Django Version
DevCon-Shikhar Slides
DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)
DevSecCon London 2017: Permitting agility whilst enforcing security by Alina ...
Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.
Hadoop Summit 2013 : Continuous Integration on top of hadoop
Jenkins Pipeline Tutorial | Continuous Delivery Pipeline Using Jenkins | DevO...
Gradle 2.Breaking stereotypes
Automate your build on Android with Jenkins
Capybara testing
Creative Branching Models for Multiple Release Streams
6º Encontro do Grupo de Testes Carioca - Testes em um contexto de Continuous ...
Test Driven Development on Android (Kotlin Kenya)
Speed up your regression and reduce cost load with Selenoid + K8s + ReportPortal
Ad

Viewers also liked (19)

DOCX
Java loops
PDF
JDD 2016 - Marcin Stozek - Docker. Przewodnik dla poczatkujacych
PDF
JDD 2016 - Michal Bartyzel, Lukasz Korczynski - Refaktoryzacja Systemu eBanko...
PDF
2 d autocad_2009
PDF
JDD 2016 - Ondrej Mihalyi - How to bake reactive behavior into your Java EE ...
PPT
JDD 2016 - Jacek Bukowski - "Flying To Clouds" - Can It Be Easy?
PDF
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
PDF
JDD 2016 - Jakub Kubrynski - Jpa - beyond copy-paste
PDF
4developers2016- Strumieniowanie danych w Sparku- Bartosz Kowalik
PDF
JDD 2016 - Michał Balinski, Oleksandr Goldobin - Practical Non Blocking Micro...
PDF
JDD 2016 - Tomasz Borek - DB for next project? Why, Postgres, of course
PDF
Polyglot Persistence
PDF
How to write your database: the story about Event Store
PPTX
PPTX
Loops Basics
PPTX
Loops in C
PPTX
Loops in C Programming
PDF
Exploiting GPUs in Spark
PPTX
Slideshare ppt
Java loops
JDD 2016 - Marcin Stozek - Docker. Przewodnik dla poczatkujacych
JDD 2016 - Michal Bartyzel, Lukasz Korczynski - Refaktoryzacja Systemu eBanko...
2 d autocad_2009
JDD 2016 - Ondrej Mihalyi - How to bake reactive behavior into your Java EE ...
JDD 2016 - Jacek Bukowski - "Flying To Clouds" - Can It Be Easy?
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
JDD 2016 - Jakub Kubrynski - Jpa - beyond copy-paste
4developers2016- Strumieniowanie danych w Sparku- Bartosz Kowalik
JDD 2016 - Michał Balinski, Oleksandr Goldobin - Practical Non Blocking Micro...
JDD 2016 - Tomasz Borek - DB for next project? Why, Postgres, of course
Polyglot Persistence
How to write your database: the story about Event Store
Loops Basics
Loops in C
Loops in C Programming
Exploiting GPUs in Spark
Slideshare ppt
Ad

Similar to Blazing Fast Feedback Loops in the Java Universe (20)

PPTX
Gradle 2.breaking stereotypes.
PPTX
Gradle.Enemy at the gates
PDF
Make Your Build Great Again (DroidConSF 2017)
PPTX
Continuous Integration as a Way of Life
PPTX
Introduction to jenkins
PPTX
Lessons Learned in Software Development: QA Infrastructure – Maintaining Rob...
PPTX
MyHeritage - QA Automations in a Continuous Deployment environment
PDF
Extensible dev secops pipelines with Jenkins, Docker, Terraform, and a kitche...
PDF
Why your company loves to welcome change but sucks at accommodating it
PPTX
Building with Gradle
PDF
AOT and Native with Spring Boot 3.0
PPTX
Java script nirvana in netbeans [con5679]
PPTX
Real World Enterprise Reactive Programming using Vert.x
PPTX
Continuous delivery applied (RJUG)
PDF
PASS 2024 - Best Practices for Development on Azure Databricks
PDF
Into The Box 2018 | Assert control over your legacy applications
PDF
Java Edge.2009.Grails.Web.Dev.Made.Easy
PPTX
Continuous Test Automation via CI (CodeMash 2012) - Automating the Agile way
PDF
Building XWiki
PDF
Unit Testing in JavaScript
Gradle 2.breaking stereotypes.
Gradle.Enemy at the gates
Make Your Build Great Again (DroidConSF 2017)
Continuous Integration as a Way of Life
Introduction to jenkins
Lessons Learned in Software Development: QA Infrastructure – Maintaining Rob...
MyHeritage - QA Automations in a Continuous Deployment environment
Extensible dev secops pipelines with Jenkins, Docker, Terraform, and a kitche...
Why your company loves to welcome change but sucks at accommodating it
Building with Gradle
AOT and Native with Spring Boot 3.0
Java script nirvana in netbeans [con5679]
Real World Enterprise Reactive Programming using Vert.x
Continuous delivery applied (RJUG)
PASS 2024 - Best Practices for Development on Azure Databricks
Into The Box 2018 | Assert control over your legacy applications
Java Edge.2009.Grails.Web.Dev.Made.Easy
Continuous Test Automation via CI (CodeMash 2012) - Automating the Agile way
Building XWiki
Unit Testing in JavaScript

Recently uploaded (20)

PPTX
M Tech Sem 1 Civil Engineering Environmental Sciences.pptx
PDF
Operating System & Kernel Study Guide-1 - converted.pdf
PDF
Digital Logic Computer Design lecture notes
PDF
keyrequirementskkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
PPTX
Sustainable Sites - Green Building Construction
PDF
Well-logging-methods_new................
PPTX
FINAL REVIEW FOR COPD DIANOSIS FOR PULMONARY DISEASE.pptx
PDF
Mitigating Risks through Effective Management for Enhancing Organizational Pe...
PPT
Mechanical Engineering MATERIALS Selection
PPTX
Construction Project Organization Group 2.pptx
DOCX
573137875-Attendance-Management-System-original
PDF
The CXO Playbook 2025 – Future-Ready Strategies for C-Suite Leaders Cerebrai...
PPTX
UNIT 4 Total Quality Management .pptx
PPTX
MCN 401 KTU-2019-PPE KITS-MODULE 2.pptx
PPTX
web development for engineering and engineering
PPTX
Welding lecture in detail for understanding
PDF
Mohammad Mahdi Farshadian CV - Prospective PhD Student 2026
PDF
composite construction of structures.pdf
PPTX
Strings in CPP - Strings in C++ are sequences of characters used to store and...
PDF
July 2025 - Top 10 Read Articles in International Journal of Software Enginee...
M Tech Sem 1 Civil Engineering Environmental Sciences.pptx
Operating System & Kernel Study Guide-1 - converted.pdf
Digital Logic Computer Design lecture notes
keyrequirementskkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
Sustainable Sites - Green Building Construction
Well-logging-methods_new................
FINAL REVIEW FOR COPD DIANOSIS FOR PULMONARY DISEASE.pptx
Mitigating Risks through Effective Management for Enhancing Organizational Pe...
Mechanical Engineering MATERIALS Selection
Construction Project Organization Group 2.pptx
573137875-Attendance-Management-System-original
The CXO Playbook 2025 – Future-Ready Strategies for C-Suite Leaders Cerebrai...
UNIT 4 Total Quality Management .pptx
MCN 401 KTU-2019-PPE KITS-MODULE 2.pptx
web development for engineering and engineering
Welding lecture in detail for understanding
Mohammad Mahdi Farshadian CV - Prospective PhD Student 2026
composite construction of structures.pdf
Strings in CPP - Strings in C++ are sequences of characters used to store and...
July 2025 - Top 10 Read Articles in International Journal of Software Enginee...

Blazing Fast Feedback Loops in the Java Universe