prepare for…
From Jurassic Park…
..to Microservices….
@SvenRuppert
has been coding java since 1996
Fellow / Head of R&D
reply Group
Germany - Munich
2
@SvenRuppert
has been coding java since 1996
3
@SvenRuppert
has been coding java since 1996
Projects in the field of:
•Automobile-industry
•Energy
•Finance / Leasing
•Space- Satellit-
•Government / UN / World-bank
Where?
•Europe
•Asia - from India up to Malaysia
3
4
Save harbor statement
4
Save harbor statement
The following is intended for information purposes only. I
can not be held responsible for the overuse of effects and
animations in this presentation. If any person in this room
has a medical condition that is triggered by fast moving
objects on the screen and/or explosions, he/she should
probably better leave now…
(I got carried away by the topic.)
5
@SvenRuppertAt the time I started - 3 yrs ago
5
@SvenRuppertAt the time I started - 3 yrs ago
Codebase is > 13 years old
5
@SvenRuppertAt the time I started - 3 yrs ago
Codebase is > 13 years old
no test coverage
5
@SvenRuppertAt the time I started - 3 yrs ago
Codebase is > 13 years old
no test coverage
Code Lords
5
@SvenRuppertAt the time I started - 3 yrs ago
Codebase is > 13 years old
no test coverage
Code Lords
nearly 15% are retired soon
5
@SvenRuppertAt the time I started - 3 yrs ago
Codebase is > 13 years old
no test coverage
Code Lords
nearly 15% are retired soon
over 50% are since 15 yrs in the company
5
@SvenRuppertAt the time I started - 3 yrs ago
Codebase is > 13 years old
no test coverage
Code Lords
nearly 15% are retired soon
over 50% are since 15 yrs in the company
hiring only students
5
@SvenRuppertAt the time I started - 3 yrs ago
Codebase is > 13 years old
no test coverage
Code Lords
nearly 15% are retired soon
over 50% are since 15 yrs in the company
the developers learned Java at this project
hiring only students
5
@SvenRuppertAt the time I started - 3 yrs ago
Codebase is > 13 years old
no test coverage
Code Lords
nearly 15% are retired soon
over 50% are since 15 yrs in the company
the developers learned Java at this project
hiring only students
the first feeling was like ……
6
@SvenRuppertAt the time I started - 3 yrs ago
7
@SvenRuppertOverview
The Team
The Knowledge - Sharing
The way of working
The way of leading the Team
QM / QS - How to increase quality
Technical Migration?
8
@SvenRuppertOverview - Start Small
9
@SvenRuppertOverview - Think Bigger
10
@SvenRuppertOverview - Build a Team
11
@SvenRuppertOverview - Trust
11
@SvenRuppertOverview - Trust
12
@SvenRuppertThe way of working
20% Time have time to play or try
start learning how to practice it ?
Closed Source versus Open Source
work from everywhere at your time
we started step by step
13
@SvenRuppertwork from everywhere
14
@SvenRuppertwork from everywhere
14
@SvenRuppertwork from everywhere
change your environment
14
@SvenRuppertwork from everywhere
change your environment
use Messenger like Slack
14
@SvenRuppertwork from everywhere
change your environment
use Messenger like Slack avoid mails
14
@SvenRuppertwork from everywhere
change your environment
use Messenger like Slack avoid mails
remote meetings with zoom
14
@SvenRuppertwork from everywhere
change your environment
use Messenger like Slack avoid mails
remote meetings with zoom
remote Pair-Programming
14
@SvenRuppertwork from everywhere
change your environment
use Messenger like Slack avoid mails
remote meetings with zoom
remote Pair-Programming
work async.
14
@SvenRuppertwork from everywhere
change your environment
use Messenger like Slack avoid mails
remote meetings with zoom
remote Pair-Programming
work async.
work at your time that is the best for you
15
@SvenRuppertwork from everywhere
work at your time that is the best for you
15
@SvenRuppertwork from everywhere
work at your time that is the best for you
15
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
15
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
working05AM to 07AM
15
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
working05AM to 07AM
breakfast with the family07AM to 09AM
15
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
working05AM to 07AM
breakfast with the family07AM to 09AM
working09AM to 12AM
15
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
working05AM to 07AM
breakfast with the family07AM to 09AM
working09AM to 12AM
playing with my son12AM to 07PM
15
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
working05AM to 07AM
breakfast with the family07AM to 09AM
working09AM to 12AM
playing with my son12AM to 07PM
playing with my wife07PM to 09PM
15
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
working05AM to 07AM
breakfast with the family07AM to 09AM
working09AM to 12AM
playing with my son12AM to 07PM
playing with my wife07PM to 09PM
working09PM to 11PM
15
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
working05AM to 07AM
breakfast with the family07AM to 09AM
working09AM to 12AM
playing with my son12AM to 07PM
playing with my wife07PM to 09PM
working09PM to 11PM
and yes… I need only 6h sleep ;-)
16
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
working05AM to 07AM
working09AM to 12AM
working09PM to 11PM
16
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
working05AM to 07AM
working09AM to 12AM
working09PM to 11PM
working with Asia
16
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
working05AM to 07AM
working09AM to 12AM
working09PM to 11PM
working with Asia
working with Europe
16
@SvenRuppertwork from everywhere
work at your time that is the best for you
my „normal“ day…
working05AM to 07AM
working09AM to 12AM
working09PM to 11PM
working with Asia
working with Europe
working with US
17
@SvenRuppertThe way of working
17
@SvenRuppertThe way of working
20% Time
17
@SvenRuppertThe way of working
why you should do it?20% Time
17
@SvenRuppertThe way of working
why you should do it?20% Time
lost in daily business
17
@SvenRuppertThe way of working
why you should do it?20% Time
18
@SvenRuppertThe way of working
20% Time
18
@SvenRuppertThe way of working
how to make it useful ?20% Time
18
@SvenRuppertThe way of working
how to make it useful ?20% Time
18
@SvenRuppertThe way of working
how to make it useful ?
for the developer
20% Time
18
@SvenRuppertThe way of working
how to make it useful ?
for the developer
20% Time
18
@SvenRuppertThe way of working
how to make it useful ?
for the developer
for the company
20% Time
18
@SvenRuppertThe way of working
how to make it useful ?
example : POC in the Mountains
for the developer
for the company
20% Time
19
@SvenRuppertClosed- versus Open Source
19
@SvenRuppertClosed- versus Open Source
Analyzing the existing Code
19
@SvenRuppertClosed- versus Open Source
Analyzing the existing Code
in our case : a lot of infrastructure…
19
@SvenRuppertClosed- versus Open Source
Analyzing the existing Code
in our case : a lot of infrastructure…
..with this we are not earning money
19
@SvenRuppertClosed- versus Open Source
Analyzing the existing Code
in our case : a lot of infrastructure…
..with this we are not earning money
we divided the
19
@SvenRuppertClosed- versus Open Source
Analyzing the existing Code
in our case : a lot of infrastructure…
..with this we are not earning money
we divided the
code base
19
@SvenRuppertClosed- versus Open Source
Analyzing the existing Code
in our case : a lot of infrastructure…
..with this we are not earning money
we divided the
code base
dev. environment
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
discuss at conferences
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
could write articles about it
discuss at conferences
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
could write articles about it
discuss at conferences
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
could write articles about it
discuss at conferences
will lead to better documentation
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
could write articles about it
discuss at conferences
will lead to better documentation
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
could write articles about it
discuss at conferences
will lead to better documentation
out of company rules
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
could write articles about it
discuss at conferences
will lead to better documentation
out of company rules
free choice of tools
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
could write articles about it
discuss at conferences
will lead to better documentation
out of company rules
free choice of tools
20
@SvenRuppertClosed- versus Open Source
we divided the
code base dev. environment
could write articles about it
discuss at conferences
will lead to better documentation
out of company rules
free choice of tools
higher motivation
21
@SvenRuppertThe way of working
21
@SvenRuppertThe way of working
Start Learning again
21
@SvenRuppertThe way of working
Start Learning again
for example:
21
@SvenRuppertThe way of working
Start Learning again
for example:
focus on a new paradigm
21
@SvenRuppertThe way of working
Start Learning again
for example:
functionalfocus on a new paradigm
21
@SvenRuppertThe way of working
Start Learning again
for example:
functionalfocus on a new paradigm reactive
21
@SvenRuppertThe way of working
Start Learning again
for example:
functional
add a new Language
focus on a new paradigm reactive
21
@SvenRuppertThe way of working
Start Learning again
for example:
functional
add a new Language
focus on a new paradigm
but not everyone want to learn
reactive
21
@SvenRuppertThe way of working
Start Learning again
for example:
functional
add a new Language
focus on a new paradigm
but not everyone want to learn
or better…. some are learning faster
reactive
21
@SvenRuppertThe way of working
Start Learning again
for example:
functional
add a new Language
focus on a new paradigm
but not everyone want to learn
or better…. some are learning faster
reactive
this sometimes leads to …..
reactions….
22
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
22
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
22
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
running away
23
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
23
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
23
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
expecting something
24
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
24
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
feeling the near end
24
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
feeling the near end
25
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
25
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
or only
feeling to old
25
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
or only
feeling to old
26
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
26
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
if you don´t want
to loose them
26
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
you have to deal with this
if you don´t want
to loose them
26
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
you have to deal with this
if you don´t want
to loose them
make them
happy again
26
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
you have to deal with this
if you don´t want
to loose them
make them
happy again
26
@SvenRuppertThe way of working
Start Learning again
this sometimes leads to ….. reactions….
you have to deal with this
if you don´t want
to loose them
make them
happy again
How we solved
this?
27
@SvenRuppertThe way of working
27
@SvenRuppertThe way of working
we are a product company
27
@SvenRuppertThe way of working
we are a product company
with a lot of LTS contracts
27
@SvenRuppertThe way of working
we are a product company
with a lot of LTS contracts
we created three streams
27
@SvenRuppertThe way of working
we are a product company
with a lot of LTS contracts
we created three streams
Consultants - play and throw away
27
@SvenRuppertThe way of working
we are a product company
with a lot of LTS contracts
we created three streams
Consultants - play and throw away
Core Developers - collect and clean
27
@SvenRuppertThe way of working
we are a product company
with a lot of LTS contracts
we created three streams
Consultants - play and throw away
Core Developers - collect and clean
LTS Developers - keep alive
27
@SvenRuppertThe way of working
we are a product company
with a lot of LTS contracts
we created three streams
Consultants - play and throw away
Core Developers - collect and clean
LTS Developers - keep alive
Why ?
28
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive Why ?
28
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive Why ?
some want to learn and experiment
28
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive Why ?
some want to learn and experiment
some need more stabil environments
28
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive Why ?
some want to learn and experiment
some need more stabil environments
some did not want to change something
29
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
Why ?
some want to learn and experiment
some need more stabil environments
some did not want to change something
29
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
Why ?
some want to learn and experiment
some need more stabil environments
some did not want to change something
amount of hours paid by the customer
29
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
Why ?
some want to learn and experiment
some need more stabil environments
some did not want to change something
amount of hours paid by the customer
rated on hours the systems are stabil
29
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
Why ?
some want to learn and experiment
some need more stabil environments
some did not want to change something
amount of hours paid by the customer
rated on hours the systems are stabil
fixed income - bonus based on Change Request
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
customer driven
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
customer driven
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
SCRUM
customer driven
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
SCRUM
customer driven
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
SCRUM
customer driven
roadmap driven
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
SCRUM
customer driven
roadmap driven
30
@SvenRuppertThe way of working
Consultants - play and throw away
Core Developer - collect and clean
LTS Developer - keep alive
SCRUM
Kanban
customer driven
roadmap driven
31
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Core - Developers Core - Developers
Consultants
31
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Core - Developers Core - Developers
Consultants
31
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Core - Developers Core - Developers
Fire
Consultants
31
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Core - Developers Core - Developers
Fire
Consultants
31
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Core - Developers Core - Developers
Fire
Consultants
31
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Core - Developers Core - Developers
Fire
Consultants
32
@SvenRuppertThe way of working
SCRUM
Kanban
32
@SvenRuppertThe way of working
SCRUM
Kanban
LTS - Developers LTS - Developers LTS - Developers
32
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Consultants Consultants Consultants
LTS - Developers LTS - Developers
32
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Consultants Consultants Consultants
LTS - Developers LTS - Developers
32
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Consultants Consultants Consultants
LTS - Developers LTS - Developers
time based planning
32
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Core - Developers
Consultants Consultants Consultants
LTS - Developers LTS - Developers
Core - Developers Core - Developers
time based planning
32
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Core - Developers
Consultants Consultants Consultants
LTS - Developers LTS - Developers
Core - Developers Core - Developers
time based planning
32
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Core - Developers
Consultants Consultants Consultants
LTS - Developers LTS - Developers
Core - Developers Core - Developers
time based planning
version based
32
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Core - Developers
Consultants Consultants Consultants
LTS - Developers LTS - Developers
Core - Developers Core - Developers
time based planning fixed size time slots
version based
32
@SvenRuppertThe way of working
SCRUM
Kanban
Consultants
LTS - Developers
Core - Developers
Consultants Consultants Consultants
LTS - Developers LTS - Developers
Core - Developers Core - Developers
time based planning fixed size time slots
version based dynamic size time slots
33
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
33
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
build a source of knowledge
33
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
build a source of knowledge
33
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
build a source of knowledge
33
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
build a source of knowledge
34
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
Hacking session
Articles / Blogs
Screencasts
Refactoring Sessions
POC
34
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
Hacking session
Articles / Blogs
Screencasts
Refactoring Sessions
POC
34
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
Hacking session
Articles / Blogs
Screencasts
Refactoring Sessions
POC
34
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
Hacking session
Articles / Blogs
Screencasts
Refactoring Sessions
POC
34
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
Hacking session
Articles / Blogs
Screencasts
Refactoring Sessions
POC
34
@SvenRuppertKnowledge Sharing
Consultants
LTS - Developers
Core - Developers
Hacking session
Articles / Blogs
Screencasts
Refactoring Sessions
POC
35
@SvenRuppertTechnical Migrations
35
@SvenRuppertTechnical Migrations
if you ask the consultants…
35
@SvenRuppertTechnical Migrations
if you ask the consultants…
to scale or change you need at least … ;-)
35
@SvenRuppertTechnical Migrations
if you ask the consultants…
to scale or change you need at least … ;-)
NoSQL
35
@SvenRuppertTechnical Migrations
if you ask the consultants…
to scale or change you need at least … ;-)
NoSQL Akka / Scala
35
@SvenRuppertTechnical Migrations
if you ask the consultants…
to scale or change you need at least … ;-)
NoSQL
Events
Akka / Scala
35
@SvenRuppertTechnical Migrations
if you ask the consultants…
to scale or change you need at least … ;-)
NoSQL
Events
Akka / Scala
Reactive
35
@SvenRuppertTechnical Migrations
if you ask the consultants…
to scale or change you need at least … ;-)
NoSQL
Events
Akka / Scala
Reactive
Functional
35
@SvenRuppertTechnical Migrations
if you ask the consultants…
to scale or change you need at least … ;-)
NoSQL
Events
Akka / Scala
Reactive
Functional
maybe ;-)
36
@SvenRuppertTechnical Transformation
36
@SvenRuppertTechnical Transformation
JDBC - ResultSet
36
@SvenRuppertTechnical Transformation
JDBC - ResultSet
36
@SvenRuppertTechnical Transformation
JDBC - ResultSet Speedment - Streams
36
@SvenRuppertTechnical Transformation
Swing
JDBC - ResultSet Speedment - Streams
36
@SvenRuppertTechnical Transformation
Swing
JDBC - ResultSet Speedment - Streams
36
@SvenRuppertTechnical Transformation
Swing Vaadin
JDBC - ResultSet Speedment - Streams
36
@SvenRuppertTechnical Transformation
Swing Vaadin
HashMap
JDBC - ResultSet Speedment - Streams
36
@SvenRuppertTechnical Transformation
Swing Vaadin
HashMap
JDBC - ResultSet Speedment - Streams
36
@SvenRuppertTechnical Transformation
Swing Vaadin
HashMap Hazelcast - Map
JDBC - ResultSet Speedment - Streams
36
@SvenRuppertTechnical Transformation
Swing Vaadin
HashMap Hazelcast - Map
JDBC - ResultSet Speedment - Streams
what is the right technology for your team?
36
@SvenRuppertTechnical Transformation
Swing Vaadin
HashMap Hazelcast - Map
JDBC - ResultSet Speedment - Streams
what is the right technology for your team?
what is the right order?
37
@SvenRuppertTechnical Transformation
what is the right technology for your team?
37
@SvenRuppertTechnical Transformation
what is the right technology for your team?
what is the right order?
37
@SvenRuppertTechnical Transformation
what is the right technology for your team?
what is the right order?
reduce complexity
37
@SvenRuppertTechnical Transformation
what is the right technology for your team?
what is the right order?
reduce complexity
the team could work with
37
@SvenRuppertTechnical Transformation
what is the right technology for your team?
what is the right order?
reduce complexity
scale
the team could work with
37
@SvenRuppertTechnical Transformation
what is the right technology for your team?
what is the right order?
reduce complexity
scale
the team could work with
a lot more….
37
@SvenRuppertTechnical Transformation
what is the right technology for your team?
what is the right order?
reduce complexity
scale
the team could work with
a lot more….
start with new modules ?
37
@SvenRuppertTechnical Transformation
what is the right technology for your team?
what is the right order?
reduce complexity
scale
the team could work with
a lot more….
start with new modules ?
start with the oldest one ?
37
@SvenRuppertTechnical Transformation
what is the right technology for your team?
what is the right order?
reduce complexity
scale
the team could work with
a lot more….
start with new modules ?
start with the oldest one ?
most komplex one?
37
@SvenRuppertTechnical Transformation
what is the right technology for your team?
what is the right order?
reduce complexity
scale
the team could work with
a lot more….
start with new modules ?
start with the oldest one ?
most komplex one?
… or ….
38
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
38
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
38
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versions
38
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versions
v1
38
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versions
v1
38
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versions
v1
38
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versions
v1
v2
38
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versions
v1
v2
stabilize
38
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versions
v1
v2
stabilize
39
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versions
v2
stabilize
39
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versions
v2
stabilize
delta t compared
to project lifetime
39
@SvenRuppertTechnical Transformation
on thing that would limit your speed…
time
number of versions
v2
stabilize
delta t compared
to project lifetime
40
@SvenRuppertQM / QS - TDD
Do you have bugs in your code ?
40
@SvenRuppertQM / QS - TDD
Do you have bugs in your code ?
no
40
@SvenRuppertQM / QS - TDD
Do you have bugs in your code ?
since years
you are
working hard
on this….
no
40
@SvenRuppertQM / QS - TDD
Do you have bugs in your code ?
since years
you are
working hard
on this….
no
41
@SvenRuppertQM / QS - TDD
Codebase is > 13 years old
remember….
how to start?
what is the right point to start?
how to increase the quality of the tests?
41
@SvenRuppertQM / QS - TDD
Codebase is > 13 years old
no test coverage
remember….
how to start?
what is the right point to start?
how to increase the quality of the tests?
41
@SvenRuppertQM / QS - TDD
Codebase is > 13 years old
no test coverage
how to decrease complexity?
remember….
how to start?
what is the right point to start?
how to increase the quality of the tests?
42
TDD with jUnit @SvenRuppert
42
TDD with jUnit @SvenRuppert
are you using jUnit?
42
TDD with jUnit @SvenRuppert
are you using jUnit?
assume that the following would make sense.. ;-)
42
TDD with jUnit @SvenRuppert
are you using jUnit?
assume that the following would make sense.. ;-)
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
42
TDD with jUnit @SvenRuppert
are you using jUnit?
assume that the following would make sense.. ;-)
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
42
TDD with jUnit @SvenRuppert
are you using jUnit?
assume that the following would make sense.. ;-)
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
it depends ;-)
43
TDD with jUnit @SvenRuppert
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
it depends ;-)
43
TDD with jUnit @SvenRuppert
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
it depends ;-)
for line 100% coverage
43
TDD with jUnit @SvenRuppert
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
it depends ;-)
for line 100% coverage 2
43
TDD with jUnit @SvenRuppert
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
it depends ;-)
for line 100% coverage 2
but will this be enough?
43
TDD with jUnit @SvenRuppert
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
it depends ;-)
for line 100% coverage 2
but will this be enough? maybe ;-)
44
TDD with jUnit @SvenRuppert
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
for line 100% coverage 2
but will this be enough? maybe ;-)
it depends ;-)
44
TDD with jUnit @SvenRuppert
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
for line 100% coverage 2
but will this be enough? maybe ;-)
how to find out, what will be enough?
it depends ;-)
44
TDD with jUnit @SvenRuppert
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
for line 100% coverage 2
but will this be enough? maybe ;-)
how to find out, what will be enough?
how to find the right tests?
it depends ;-)
45
TDD with jUnit @SvenRuppert
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
45
TDD with jUnit @SvenRuppert
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
@Test

public void testAdd001() throws Exception {

final int add = new Service().add(0, 0);

Assertions.assertThat(add).isEqualTo(0);

}
45
TDD with jUnit @SvenRuppert
public class Service {

public int add(int a, int b){

if(a<2){

return (a+b) * -1;

} else {

return a+b;

}

}

}
How many tests
you will need ?
@Test

public void testAdd001() throws Exception {

final int add = new Service().add(0, 0);

Assertions.assertThat(add).isEqualTo(0);

}
@Test

public void testAdd002() throws Exception {

final int add = new Service().add(3, 0);

Assertions.assertThat(add).isEqualTo(3);

}
46
Mutation Testing @SvenRuppert
46
Mutation Testing @SvenRuppert
Mutation Testing is a structural testing method
46
Mutation Testing @SvenRuppert
Mutation Testing is a structural testing method
we want to find a way to write "good" tests
46
Mutation Testing @SvenRuppert
Mutation Testing is a structural testing method
we want to find a way to write "good" tests
how to find "good" tests?
46
Mutation Testing @SvenRuppert
Mutation Testing is a structural testing method
we want to find a way to write "good" tests
how to find "good" tests?
let the machine find the targets
46
Mutation Testing @SvenRuppert
Mutation Testing is a structural testing method
we want to find a way to write "good" tests
how to find "good" tests?
let the machine find the targets
let´s mutate it... but how?
47
Mutation Testing - the Idea @SvenRuppert
47
Mutation Testing - the Idea @SvenRuppert
a mutation is a small change in the code
47
Mutation Testing - the Idea @SvenRuppert
a mutation is a small change in the code
.. small enough to be a small defect
47
Mutation Testing - the Idea @SvenRuppert
a mutation is a small change in the code
.. small enough to be a small defect
P will be the program
47
Mutation Testing - the Idea @SvenRuppert
a mutation is a small change in the code
.. small enough to be a small defect
P will be the program
T will be the collection of all tests / Test Suite
48
Mutation Testing - the Idea @SvenRuppert
P will be the program
T will be the collection of all tests / Test Suite
48
Mutation Testing - the Idea @SvenRuppert
P will be the program
T will be the collection of all tests / Test Suite
we will create a sequence of mutations / P1,P2,P3...
48
Mutation Testing - the Idea @SvenRuppert
P will be the program
T will be the collection of all tests / Test Suite
we will create a sequence of mutations / P1,P2,P3...
.. Px will have only one mutation compared to P
48
Mutation Testing - the Idea @SvenRuppert
P will be the program
T will be the collection of all tests / Test Suite
we will create a sequence of mutations / P1,P2,P3...
.. Px will have only one mutation compared to P
running all tests from T against Px
48
Mutation Testing - the Idea @SvenRuppert
P will be the program
T will be the collection of all tests / Test Suite
we will create a sequence of mutations / P1,P2,P3...
.. Px will have only one mutation compared to P
running all tests from T against Px
green: T will kill the mutation
48
Mutation Testing - the Idea @SvenRuppert
P will be the program
T will be the collection of all tests / Test Suite
we will create a sequence of mutations / P1,P2,P3...
.. Px will have only one mutation compared to P
running all tests from T against Px
green: T will kill the mutation
.. at leased one test from T will fail
48
Mutation Testing - the Idea @SvenRuppert
P will be the program
T will be the collection of all tests / Test Suite
we will create a sequence of mutations / P1,P2,P3...
.. Px will have only one mutation compared to P
running all tests from T against Px
green: T will kill the mutation
.. at leased one test from T will fail
red: if all tests are green
49
Mutation Testing - the Idea @SvenRuppert
49
Mutation Testing - the Idea @SvenRuppert
if we kill k out of n mutants
49
Mutation Testing - the Idea @SvenRuppert
if we kill k out of n mutants
-> we are not good enough ;-)
49
Mutation Testing - the Idea @SvenRuppert
if we kill k out of n mutants
-> we are not good enough ;-)
we are perfect enough if we are reaching : k == n
49
Mutation Testing - the Idea @SvenRuppert
if we kill k out of n mutants
-> we are not good enough ;-)
we are perfect enough if we are reaching : k == n
how to create all versions of Px ?
49
Mutation Testing - the Idea @SvenRuppert
if we kill k out of n mutants
-> we are not good enough ;-)
we are perfect enough if we are reaching : k == n
how to create all versions of Px ?
.. the good thing..
49
Mutation Testing - the Idea @SvenRuppert
if we kill k out of n mutants
-> we are not good enough ;-)
we are perfect enough if we are reaching : k == n
how to create all versions of Px ?
.. the good thing..
we could almost generate/
automate everything
50
Mutation Testing @SvenRuppert
practical TDD with Mutation Testing
50
Mutation Testing @SvenRuppert
generating the mutants and
practical TDD with Mutation Testing
50
Mutation Testing @SvenRuppert
generating the mutants and
practical TDD with Mutation Testing
running all junit tests
50
Mutation Testing @SvenRuppert
generating the mutants and
practical TDD with Mutation Testing
running all junit tests
check the reports
50
Mutation Testing @SvenRuppert
generating the mutants and
practical TDD with Mutation Testing
running all junit tests
check the reports
write more / better tests
50
Mutation Testing @SvenRuppert
generating the mutants and
practical TDD with Mutation Testing
running all junit tests
check the reports
write more / better tests
loop until quality target reached
51
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}

}

}
51
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}

}

} how many test you will need for..
51
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}

}

} how many test you will need for..
100% Line Coverage… and…
51
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}

}

} how many test you will need for..
100% Line Coverage… and… to be save ?
51
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}

}

} how many test you will need for..
100% Line Coverage… and… to be save ?
2 for Line Coverage
51
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}

}

} how many test you will need for..
100% Line Coverage… and… to be save ?
2 for Line Coverage we will see ;-)
52
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}

}

}
100% Line Coverage… and…
52
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}

}

}
100% Line Coverage… and…
we have one if statement
52
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}

}

}
100% Line Coverage… and…
we have one if statement with an else branch
52
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}

}

}
100% Line Coverage… and…
we have one if statement with an else branch
this will lead to 2 jUnit Tests to get 100 %
53
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) { return (a+b) * -1; } 

else { return a+b; }

}

} 100% Line Coverage… and…
53
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) { return (a+b) * -1; } 

else { return a+b; }

}

} 100% Line Coverage… and…
@Test

public void testAdd001() throws Exception {

final int add = new Service().add(0, 0);

Assertions.assertThat(add).isEqualTo(0);

}
53
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) { return (a+b) * -1; } 

else { return a+b; }

}

} 100% Line Coverage… and…
@Test

public void testAdd001() throws Exception {

final int add = new Service().add(0, 0);

Assertions.assertThat(add).isEqualTo(0);

}
@Test

public void testAdd002() throws Exception {

final int add = new Service().add(3, 0);

Assertions.assertThat(add).isEqualTo(3);

}
54
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);

Assertions.assertThat(add).isEqualTo(0);
final int add = new Service().add(3, 0);

Assertions.assertThat(add).isEqualTo(3);
54
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);

Assertions.assertThat(add).isEqualTo(0);
final int add = new Service().add(3, 0);

Assertions.assertThat(add).isEqualTo(3);
54
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);

Assertions.assertThat(add).isEqualTo(0);
final int add = new Service().add(3, 0);

Assertions.assertThat(add).isEqualTo(3);
55
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations Killed 3
55
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations Killed 3
55
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations Killed 3
56
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations Killed 3
56
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations Killed 3
56
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations Killed 3
Killed 3
57
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations
Killed 3
57
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations
final int add = new Service().add(2, 0);
57
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations
final int add = new Service().add(2, 0);
Killed 4
57
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations
final int add = new Service().add(2, 0);
Killed 4
57
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations
final int add = new Service().add(2, 0);
Killed 4
57
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations
final int add = new Service().add(2, 0);
Killed 4
57
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations
final int add = new Service().add(2, 0);
Killed 4
57
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
>> Generated 54 mutations
final int add = new Service().add(2, 0);
Killed 4
57
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
Killed 4
58
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
Killed 4
58
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
58
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
Killed 5
58
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
Killed 5
58
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
killed 9:1
Killed 5
59
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
killed 9:1
Killed 5
59
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
killed 9:1
final int add = new Service().add(2, 2);
59
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
killed 9:1
final int add = new Service().add(2, 2);
Killed 6
59
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
killed 9:1
final int add = new Service().add(2, 2);
Killed 6
59
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
killed 9:1
final int add = new Service().add(2, 2);
Killed 6
59
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
killed 9:1
final int add = new Service().add(2, 2);
Killed 6
59
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
final int add = new Service().add(2, 2);
killed 11:1
Killed 6
59
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(1, 1);
final int add = new Service().add(2, 2);
killed 11:1
Killed 6
60
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(1, 1);
final int add = new Service().add(2, 2);
Killed 6
60
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(1, 1);
final int add = new Service().add(2, 2);
61
Mutation Testing - in short words @SvenRuppert
61
Mutation Testing - in short words @SvenRuppert
mutation testing is an add on to normal jUnit TDD
61
Mutation Testing - in short words @SvenRuppert
mutation testing is an add on to normal jUnit TDD
tools are supporting it well
61
Mutation Testing - in short words @SvenRuppert
mutation testing is an add on to normal jUnit TDD
tools are supporting it well
generating and running all tests are time consuming
61
Mutation Testing - in short words @SvenRuppert
mutation testing is an add on to normal jUnit TDD
tools are supporting it well
generating and running all tests are time consuming
but most important
61
Mutation Testing - in short words @SvenRuppert
mutation testing is an add on to normal jUnit TDD
tools are supporting it well
generating and running all tests are time consuming
but most important
will effect your project structure
62
Mutation Testing - Lesson Learned @SvenRuppert
62
Mutation Testing - Lesson Learned @SvenRuppert
mutation tests are often leading to
62
Mutation Testing - Lesson Learned @SvenRuppert
mutation tests are often leading to
…cleaner code compared to jUnit only
63
Mutation Testing - Lesson Learned @SvenRuppert
public static final String[] discardCommonPrefix(String a, String b) {
String[] ret = { a, b };
int l = a.length() < b.length() ? a.length() : b.length();
for (int i = 0; i < l; i++) {
if (a.charAt(i) == b.charAt(i)) {
if (i + 1 < l) { ret[0] = a.substring(i + 1); ret[1] = b.substring(i + 1); }
else {
if (a.length() < b.length()) { ret[0] = ""; ret[1] = b.substring(i + 1); }
if (a.length() == b.length()) { ret[0] = ""; ret[1] = „"; }
if (a.length() > b.length()) { ret[0] = a.substring(i + 1); ret[1] = „"; }
}
} else break;
}
return ret;
}
64
Mutation Testing - Lesson Learned @SvenRuppert
public String[] discardCommonPrefix(String a, String b) {
final String[] ret = new String[2];
int l;
if (a.length() < b.length()) { l = a.length(); }
else { l = b.length(); }
int position = 0;
for (; position < l; position++) {
final char charA = a.charAt(position);
final char charB = b.charAt(position);
if (charA != charB) { break; }
}
if (position >= a.length()) { ret[0] = ""; }
else { ret[0] = a.substring(position); }
if (position >= b.length()) { ret[1] = ""; }
else { ret[1] = b.substring(position); }
return ret;
}
65
Mutation Testing - Lesson Learned @SvenRuppert
Version 1 Version 2
65
Mutation Testing - Lesson Learned @SvenRuppert
Version 1 Version 2
for {
if {
if
else {
if
if
if
}
} else
}
65
Mutation Testing - Lesson Learned @SvenRuppert
Version 1 Version 2
for {
if {
if
else {
if
if
if
}
} else
}
if else
for {
if
}
if else
if else
66
Example of useless Code @SvenRuppert
66
Example of useless Code @SvenRuppert
66
Example of useless Code @SvenRuppert
Summary
67
@SvenRuppert
Now it is time to relax again ;-)
Summary
68
@SvenRuppert
If you are interested…
have a look at GITHUB
ProxyBuilder
Dynamic-Dependency-Injection
Java-Microservice
or contact me ;-) @SvenRuppert
Summary
68
@SvenRuppert
If you are interested…
have a look at GITHUB
ProxyBuilder
Dynamic-Dependency-Injection
Java-Microservice
or contact me ;-) @SvenRuppert
Thank You !!!

From Jurassic Park to Microservices

  • 1.
    prepare for… From JurassicPark… ..to Microservices….
  • 2.
    @SvenRuppert has been codingjava since 1996 Fellow / Head of R&D reply Group Germany - Munich 2
  • 3.
  • 4.
    @SvenRuppert has been codingjava since 1996 Projects in the field of: •Automobile-industry •Energy •Finance / Leasing •Space- Satellit- •Government / UN / World-bank Where? •Europe •Asia - from India up to Malaysia 3
  • 5.
  • 6.
    4 Save harbor statement Thefollowing is intended for information purposes only. I can not be held responsible for the overuse of effects and animations in this presentation. If any person in this room has a medical condition that is triggered by fast moving objects on the screen and/or explosions, he/she should probably better leave now… (I got carried away by the topic.)
  • 7.
    5 @SvenRuppertAt the timeI started - 3 yrs ago
  • 8.
    5 @SvenRuppertAt the timeI started - 3 yrs ago Codebase is > 13 years old
  • 9.
    5 @SvenRuppertAt the timeI started - 3 yrs ago Codebase is > 13 years old no test coverage
  • 10.
    5 @SvenRuppertAt the timeI started - 3 yrs ago Codebase is > 13 years old no test coverage Code Lords
  • 11.
    5 @SvenRuppertAt the timeI started - 3 yrs ago Codebase is > 13 years old no test coverage Code Lords nearly 15% are retired soon
  • 12.
    5 @SvenRuppertAt the timeI started - 3 yrs ago Codebase is > 13 years old no test coverage Code Lords nearly 15% are retired soon over 50% are since 15 yrs in the company
  • 13.
    5 @SvenRuppertAt the timeI started - 3 yrs ago Codebase is > 13 years old no test coverage Code Lords nearly 15% are retired soon over 50% are since 15 yrs in the company hiring only students
  • 14.
    5 @SvenRuppertAt the timeI started - 3 yrs ago Codebase is > 13 years old no test coverage Code Lords nearly 15% are retired soon over 50% are since 15 yrs in the company the developers learned Java at this project hiring only students
  • 15.
    5 @SvenRuppertAt the timeI started - 3 yrs ago Codebase is > 13 years old no test coverage Code Lords nearly 15% are retired soon over 50% are since 15 yrs in the company the developers learned Java at this project hiring only students the first feeling was like ……
  • 16.
    6 @SvenRuppertAt the timeI started - 3 yrs ago
  • 17.
    7 @SvenRuppertOverview The Team The Knowledge- Sharing The way of working The way of leading the Team QM / QS - How to increase quality Technical Migration?
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
    12 @SvenRuppertThe way ofworking 20% Time have time to play or try start learning how to practice it ? Closed Source versus Open Source work from everywhere at your time we started step by step
  • 24.
  • 25.
  • 26.
  • 27.
    14 @SvenRuppertwork from everywhere changeyour environment use Messenger like Slack
  • 28.
    14 @SvenRuppertwork from everywhere changeyour environment use Messenger like Slack avoid mails
  • 29.
    14 @SvenRuppertwork from everywhere changeyour environment use Messenger like Slack avoid mails remote meetings with zoom
  • 30.
    14 @SvenRuppertwork from everywhere changeyour environment use Messenger like Slack avoid mails remote meetings with zoom remote Pair-Programming
  • 31.
    14 @SvenRuppertwork from everywhere changeyour environment use Messenger like Slack avoid mails remote meetings with zoom remote Pair-Programming work async.
  • 32.
    14 @SvenRuppertwork from everywhere changeyour environment use Messenger like Slack avoid mails remote meetings with zoom remote Pair-Programming work async. work at your time that is the best for you
  • 33.
    15 @SvenRuppertwork from everywhere workat your time that is the best for you
  • 34.
    15 @SvenRuppertwork from everywhere workat your time that is the best for you
  • 35.
    15 @SvenRuppertwork from everywhere workat your time that is the best for you my „normal“ day…
  • 36.
    15 @SvenRuppertwork from everywhere workat your time that is the best for you my „normal“ day… working05AM to 07AM
  • 37.
    15 @SvenRuppertwork from everywhere workat your time that is the best for you my „normal“ day… working05AM to 07AM breakfast with the family07AM to 09AM
  • 38.
    15 @SvenRuppertwork from everywhere workat your time that is the best for you my „normal“ day… working05AM to 07AM breakfast with the family07AM to 09AM working09AM to 12AM
  • 39.
    15 @SvenRuppertwork from everywhere workat your time that is the best for you my „normal“ day… working05AM to 07AM breakfast with the family07AM to 09AM working09AM to 12AM playing with my son12AM to 07PM
  • 40.
    15 @SvenRuppertwork from everywhere workat your time that is the best for you my „normal“ day… working05AM to 07AM breakfast with the family07AM to 09AM working09AM to 12AM playing with my son12AM to 07PM playing with my wife07PM to 09PM
  • 41.
    15 @SvenRuppertwork from everywhere workat your time that is the best for you my „normal“ day… working05AM to 07AM breakfast with the family07AM to 09AM working09AM to 12AM playing with my son12AM to 07PM playing with my wife07PM to 09PM working09PM to 11PM
  • 42.
    15 @SvenRuppertwork from everywhere workat your time that is the best for you my „normal“ day… working05AM to 07AM breakfast with the family07AM to 09AM working09AM to 12AM playing with my son12AM to 07PM playing with my wife07PM to 09PM working09PM to 11PM and yes… I need only 6h sleep ;-)
  • 43.
    16 @SvenRuppertwork from everywhere workat your time that is the best for you my „normal“ day… working05AM to 07AM working09AM to 12AM working09PM to 11PM
  • 44.
    16 @SvenRuppertwork from everywhere workat your time that is the best for you my „normal“ day… working05AM to 07AM working09AM to 12AM working09PM to 11PM working with Asia
  • 45.
    16 @SvenRuppertwork from everywhere workat your time that is the best for you my „normal“ day… working05AM to 07AM working09AM to 12AM working09PM to 11PM working with Asia working with Europe
  • 46.
    16 @SvenRuppertwork from everywhere workat your time that is the best for you my „normal“ day… working05AM to 07AM working09AM to 12AM working09PM to 11PM working with Asia working with Europe working with US
  • 47.
  • 48.
    17 @SvenRuppertThe way ofworking 20% Time
  • 49.
    17 @SvenRuppertThe way ofworking why you should do it?20% Time
  • 50.
    17 @SvenRuppertThe way ofworking why you should do it?20% Time lost in daily business
  • 51.
    17 @SvenRuppertThe way ofworking why you should do it?20% Time
  • 52.
    18 @SvenRuppertThe way ofworking 20% Time
  • 53.
    18 @SvenRuppertThe way ofworking how to make it useful ?20% Time
  • 54.
    18 @SvenRuppertThe way ofworking how to make it useful ?20% Time
  • 55.
    18 @SvenRuppertThe way ofworking how to make it useful ? for the developer 20% Time
  • 56.
    18 @SvenRuppertThe way ofworking how to make it useful ? for the developer 20% Time
  • 57.
    18 @SvenRuppertThe way ofworking how to make it useful ? for the developer for the company 20% Time
  • 58.
    18 @SvenRuppertThe way ofworking how to make it useful ? example : POC in the Mountains for the developer for the company 20% Time
  • 59.
  • 60.
    19 @SvenRuppertClosed- versus OpenSource Analyzing the existing Code
  • 61.
    19 @SvenRuppertClosed- versus OpenSource Analyzing the existing Code in our case : a lot of infrastructure…
  • 62.
    19 @SvenRuppertClosed- versus OpenSource Analyzing the existing Code in our case : a lot of infrastructure… ..with this we are not earning money
  • 63.
    19 @SvenRuppertClosed- versus OpenSource Analyzing the existing Code in our case : a lot of infrastructure… ..with this we are not earning money we divided the
  • 64.
    19 @SvenRuppertClosed- versus OpenSource Analyzing the existing Code in our case : a lot of infrastructure… ..with this we are not earning money we divided the code base
  • 65.
    19 @SvenRuppertClosed- versus OpenSource Analyzing the existing Code in our case : a lot of infrastructure… ..with this we are not earning money we divided the code base dev. environment
  • 66.
    20 @SvenRuppertClosed- versus OpenSource we divided the code base dev. environment
  • 67.
    20 @SvenRuppertClosed- versus OpenSource we divided the code base dev. environment
  • 68.
    20 @SvenRuppertClosed- versus OpenSource we divided the code base dev. environment discuss at conferences
  • 69.
    20 @SvenRuppertClosed- versus OpenSource we divided the code base dev. environment could write articles about it discuss at conferences
  • 70.
    20 @SvenRuppertClosed- versus OpenSource we divided the code base dev. environment could write articles about it discuss at conferences
  • 71.
    20 @SvenRuppertClosed- versus OpenSource we divided the code base dev. environment could write articles about it discuss at conferences will lead to better documentation
  • 72.
    20 @SvenRuppertClosed- versus OpenSource we divided the code base dev. environment could write articles about it discuss at conferences will lead to better documentation
  • 73.
    20 @SvenRuppertClosed- versus OpenSource we divided the code base dev. environment could write articles about it discuss at conferences will lead to better documentation out of company rules
  • 74.
    20 @SvenRuppertClosed- versus OpenSource we divided the code base dev. environment could write articles about it discuss at conferences will lead to better documentation out of company rules free choice of tools
  • 75.
    20 @SvenRuppertClosed- versus OpenSource we divided the code base dev. environment could write articles about it discuss at conferences will lead to better documentation out of company rules free choice of tools
  • 76.
    20 @SvenRuppertClosed- versus OpenSource we divided the code base dev. environment could write articles about it discuss at conferences will lead to better documentation out of company rules free choice of tools higher motivation
  • 77.
  • 78.
    21 @SvenRuppertThe way ofworking Start Learning again
  • 79.
    21 @SvenRuppertThe way ofworking Start Learning again for example:
  • 80.
    21 @SvenRuppertThe way ofworking Start Learning again for example: focus on a new paradigm
  • 81.
    21 @SvenRuppertThe way ofworking Start Learning again for example: functionalfocus on a new paradigm
  • 82.
    21 @SvenRuppertThe way ofworking Start Learning again for example: functionalfocus on a new paradigm reactive
  • 83.
    21 @SvenRuppertThe way ofworking Start Learning again for example: functional add a new Language focus on a new paradigm reactive
  • 84.
    21 @SvenRuppertThe way ofworking Start Learning again for example: functional add a new Language focus on a new paradigm but not everyone want to learn reactive
  • 85.
    21 @SvenRuppertThe way ofworking Start Learning again for example: functional add a new Language focus on a new paradigm but not everyone want to learn or better…. some are learning faster reactive
  • 86.
    21 @SvenRuppertThe way ofworking Start Learning again for example: functional add a new Language focus on a new paradigm but not everyone want to learn or better…. some are learning faster reactive this sometimes leads to ….. reactions….
  • 87.
    22 @SvenRuppertThe way ofworking Start Learning again this sometimes leads to ….. reactions….
  • 88.
    22 @SvenRuppertThe way ofworking Start Learning again this sometimes leads to ….. reactions….
  • 89.
    22 @SvenRuppertThe way ofworking Start Learning again this sometimes leads to ….. reactions…. running away
  • 90.
    23 @SvenRuppertThe way ofworking Start Learning again this sometimes leads to ….. reactions….
  • 91.
    23 @SvenRuppertThe way ofworking Start Learning again this sometimes leads to ….. reactions….
  • 92.
    23 @SvenRuppertThe way ofworking Start Learning again this sometimes leads to ….. reactions…. expecting something
  • 93.
    24 @SvenRuppertThe way ofworking Start Learning again this sometimes leads to ….. reactions….
  • 94.
    24 @SvenRuppertThe way ofworking Start Learning again this sometimes leads to ….. reactions…. feeling the near end
  • 95.
    24 @SvenRuppertThe way ofworking Start Learning again this sometimes leads to ….. reactions…. feeling the near end
  • 96.
    25 @SvenRuppertThe way ofworking Start Learning again this sometimes leads to ….. reactions….
  • 97.
    25 @SvenRuppertThe way ofworking Start Learning again this sometimes leads to ….. reactions…. or only feeling to old
  • 98.
    25 @SvenRuppertThe way ofworking Start Learning again this sometimes leads to ….. reactions…. or only feeling to old
  • 99.
    26 @SvenRuppertThe way ofworking Start Learning again this sometimes leads to ….. reactions….
  • 100.
    26 @SvenRuppertThe way ofworking Start Learning again this sometimes leads to ….. reactions…. if you don´t want to loose them
  • 101.
    26 @SvenRuppertThe way ofworking Start Learning again this sometimes leads to ….. reactions…. you have to deal with this if you don´t want to loose them
  • 102.
    26 @SvenRuppertThe way ofworking Start Learning again this sometimes leads to ….. reactions…. you have to deal with this if you don´t want to loose them make them happy again
  • 103.
    26 @SvenRuppertThe way ofworking Start Learning again this sometimes leads to ….. reactions…. you have to deal with this if you don´t want to loose them make them happy again
  • 104.
    26 @SvenRuppertThe way ofworking Start Learning again this sometimes leads to ….. reactions…. you have to deal with this if you don´t want to loose them make them happy again How we solved this?
  • 105.
  • 106.
    27 @SvenRuppertThe way ofworking we are a product company
  • 107.
    27 @SvenRuppertThe way ofworking we are a product company with a lot of LTS contracts
  • 108.
    27 @SvenRuppertThe way ofworking we are a product company with a lot of LTS contracts we created three streams
  • 109.
    27 @SvenRuppertThe way ofworking we are a product company with a lot of LTS contracts we created three streams Consultants - play and throw away
  • 110.
    27 @SvenRuppertThe way ofworking we are a product company with a lot of LTS contracts we created three streams Consultants - play and throw away Core Developers - collect and clean
  • 111.
    27 @SvenRuppertThe way ofworking we are a product company with a lot of LTS contracts we created three streams Consultants - play and throw away Core Developers - collect and clean LTS Developers - keep alive
  • 112.
    27 @SvenRuppertThe way ofworking we are a product company with a lot of LTS contracts we created three streams Consultants - play and throw away Core Developers - collect and clean LTS Developers - keep alive Why ?
  • 113.
    28 @SvenRuppertThe way ofworking Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive Why ?
  • 114.
    28 @SvenRuppertThe way ofworking Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive Why ? some want to learn and experiment
  • 115.
    28 @SvenRuppertThe way ofworking Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive Why ? some want to learn and experiment some need more stabil environments
  • 116.
    28 @SvenRuppertThe way ofworking Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive Why ? some want to learn and experiment some need more stabil environments some did not want to change something
  • 117.
    29 @SvenRuppertThe way ofworking Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive Why ? some want to learn and experiment some need more stabil environments some did not want to change something
  • 118.
    29 @SvenRuppertThe way ofworking Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive Why ? some want to learn and experiment some need more stabil environments some did not want to change something amount of hours paid by the customer
  • 119.
    29 @SvenRuppertThe way ofworking Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive Why ? some want to learn and experiment some need more stabil environments some did not want to change something amount of hours paid by the customer rated on hours the systems are stabil
  • 120.
    29 @SvenRuppertThe way ofworking Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive Why ? some want to learn and experiment some need more stabil environments some did not want to change something amount of hours paid by the customer rated on hours the systems are stabil fixed income - bonus based on Change Request
  • 121.
    30 @SvenRuppertThe way ofworking Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive
  • 122.
    30 @SvenRuppertThe way ofworking Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive
  • 123.
    30 @SvenRuppertThe way ofworking Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive
  • 124.
    30 @SvenRuppertThe way ofworking Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive customer driven
  • 125.
    30 @SvenRuppertThe way ofworking Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive customer driven
  • 126.
    30 @SvenRuppertThe way ofworking Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive SCRUM customer driven
  • 127.
    30 @SvenRuppertThe way ofworking Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive SCRUM customer driven
  • 128.
    30 @SvenRuppertThe way ofworking Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive SCRUM customer driven roadmap driven
  • 129.
    30 @SvenRuppertThe way ofworking Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive SCRUM customer driven roadmap driven
  • 130.
    30 @SvenRuppertThe way ofworking Consultants - play and throw away Core Developer - collect and clean LTS Developer - keep alive SCRUM Kanban customer driven roadmap driven
  • 131.
    31 @SvenRuppertThe way ofworking SCRUM Kanban Consultants LTS - Developers Core - Developers Core - Developers Consultants
  • 132.
    31 @SvenRuppertThe way ofworking SCRUM Kanban Consultants LTS - Developers Core - Developers Core - Developers Consultants
  • 133.
    31 @SvenRuppertThe way ofworking SCRUM Kanban Consultants LTS - Developers Core - Developers Core - Developers Fire Consultants
  • 134.
    31 @SvenRuppertThe way ofworking SCRUM Kanban Consultants LTS - Developers Core - Developers Core - Developers Fire Consultants
  • 135.
    31 @SvenRuppertThe way ofworking SCRUM Kanban Consultants LTS - Developers Core - Developers Core - Developers Fire Consultants
  • 136.
    31 @SvenRuppertThe way ofworking SCRUM Kanban Consultants LTS - Developers Core - Developers Core - Developers Fire Consultants
  • 137.
    32 @SvenRuppertThe way ofworking SCRUM Kanban
  • 138.
    32 @SvenRuppertThe way ofworking SCRUM Kanban LTS - Developers LTS - Developers LTS - Developers
  • 139.
    32 @SvenRuppertThe way ofworking SCRUM Kanban Consultants LTS - Developers Consultants Consultants Consultants LTS - Developers LTS - Developers
  • 140.
    32 @SvenRuppertThe way ofworking SCRUM Kanban Consultants LTS - Developers Consultants Consultants Consultants LTS - Developers LTS - Developers
  • 141.
    32 @SvenRuppertThe way ofworking SCRUM Kanban Consultants LTS - Developers Consultants Consultants Consultants LTS - Developers LTS - Developers time based planning
  • 142.
    32 @SvenRuppertThe way ofworking SCRUM Kanban Consultants LTS - Developers Core - Developers Consultants Consultants Consultants LTS - Developers LTS - Developers Core - Developers Core - Developers time based planning
  • 143.
    32 @SvenRuppertThe way ofworking SCRUM Kanban Consultants LTS - Developers Core - Developers Consultants Consultants Consultants LTS - Developers LTS - Developers Core - Developers Core - Developers time based planning
  • 144.
    32 @SvenRuppertThe way ofworking SCRUM Kanban Consultants LTS - Developers Core - Developers Consultants Consultants Consultants LTS - Developers LTS - Developers Core - Developers Core - Developers time based planning version based
  • 145.
    32 @SvenRuppertThe way ofworking SCRUM Kanban Consultants LTS - Developers Core - Developers Consultants Consultants Consultants LTS - Developers LTS - Developers Core - Developers Core - Developers time based planning fixed size time slots version based
  • 146.
    32 @SvenRuppertThe way ofworking SCRUM Kanban Consultants LTS - Developers Core - Developers Consultants Consultants Consultants LTS - Developers LTS - Developers Core - Developers Core - Developers time based planning fixed size time slots version based dynamic size time slots
  • 147.
  • 148.
    33 @SvenRuppertKnowledge Sharing Consultants LTS -Developers Core - Developers build a source of knowledge
  • 149.
    33 @SvenRuppertKnowledge Sharing Consultants LTS -Developers Core - Developers build a source of knowledge
  • 150.
    33 @SvenRuppertKnowledge Sharing Consultants LTS -Developers Core - Developers build a source of knowledge
  • 151.
    33 @SvenRuppertKnowledge Sharing Consultants LTS -Developers Core - Developers build a source of knowledge
  • 152.
    34 @SvenRuppertKnowledge Sharing Consultants LTS -Developers Core - Developers Hacking session Articles / Blogs Screencasts Refactoring Sessions POC
  • 153.
    34 @SvenRuppertKnowledge Sharing Consultants LTS -Developers Core - Developers Hacking session Articles / Blogs Screencasts Refactoring Sessions POC
  • 154.
    34 @SvenRuppertKnowledge Sharing Consultants LTS -Developers Core - Developers Hacking session Articles / Blogs Screencasts Refactoring Sessions POC
  • 155.
    34 @SvenRuppertKnowledge Sharing Consultants LTS -Developers Core - Developers Hacking session Articles / Blogs Screencasts Refactoring Sessions POC
  • 156.
    34 @SvenRuppertKnowledge Sharing Consultants LTS -Developers Core - Developers Hacking session Articles / Blogs Screencasts Refactoring Sessions POC
  • 157.
    34 @SvenRuppertKnowledge Sharing Consultants LTS -Developers Core - Developers Hacking session Articles / Blogs Screencasts Refactoring Sessions POC
  • 158.
  • 159.
  • 160.
    35 @SvenRuppertTechnical Migrations if youask the consultants… to scale or change you need at least … ;-)
  • 161.
    35 @SvenRuppertTechnical Migrations if youask the consultants… to scale or change you need at least … ;-) NoSQL
  • 162.
    35 @SvenRuppertTechnical Migrations if youask the consultants… to scale or change you need at least … ;-) NoSQL Akka / Scala
  • 163.
    35 @SvenRuppertTechnical Migrations if youask the consultants… to scale or change you need at least … ;-) NoSQL Events Akka / Scala
  • 164.
    35 @SvenRuppertTechnical Migrations if youask the consultants… to scale or change you need at least … ;-) NoSQL Events Akka / Scala Reactive
  • 165.
    35 @SvenRuppertTechnical Migrations if youask the consultants… to scale or change you need at least … ;-) NoSQL Events Akka / Scala Reactive Functional
  • 166.
    35 @SvenRuppertTechnical Migrations if youask the consultants… to scale or change you need at least … ;-) NoSQL Events Akka / Scala Reactive Functional maybe ;-)
  • 167.
  • 168.
  • 169.
  • 170.
  • 171.
  • 172.
  • 173.
  • 174.
  • 175.
  • 176.
    36 @SvenRuppertTechnical Transformation Swing Vaadin HashMapHazelcast - Map JDBC - ResultSet Speedment - Streams
  • 177.
    36 @SvenRuppertTechnical Transformation Swing Vaadin HashMapHazelcast - Map JDBC - ResultSet Speedment - Streams what is the right technology for your team?
  • 178.
    36 @SvenRuppertTechnical Transformation Swing Vaadin HashMapHazelcast - Map JDBC - ResultSet Speedment - Streams what is the right technology for your team? what is the right order?
  • 179.
    37 @SvenRuppertTechnical Transformation what isthe right technology for your team?
  • 180.
    37 @SvenRuppertTechnical Transformation what isthe right technology for your team? what is the right order?
  • 181.
    37 @SvenRuppertTechnical Transformation what isthe right technology for your team? what is the right order? reduce complexity
  • 182.
    37 @SvenRuppertTechnical Transformation what isthe right technology for your team? what is the right order? reduce complexity the team could work with
  • 183.
    37 @SvenRuppertTechnical Transformation what isthe right technology for your team? what is the right order? reduce complexity scale the team could work with
  • 184.
    37 @SvenRuppertTechnical Transformation what isthe right technology for your team? what is the right order? reduce complexity scale the team could work with a lot more….
  • 185.
    37 @SvenRuppertTechnical Transformation what isthe right technology for your team? what is the right order? reduce complexity scale the team could work with a lot more…. start with new modules ?
  • 186.
    37 @SvenRuppertTechnical Transformation what isthe right technology for your team? what is the right order? reduce complexity scale the team could work with a lot more…. start with new modules ? start with the oldest one ?
  • 187.
    37 @SvenRuppertTechnical Transformation what isthe right technology for your team? what is the right order? reduce complexity scale the team could work with a lot more…. start with new modules ? start with the oldest one ? most komplex one?
  • 188.
    37 @SvenRuppertTechnical Transformation what isthe right technology for your team? what is the right order? reduce complexity scale the team could work with a lot more…. start with new modules ? start with the oldest one ? most komplex one? … or ….
  • 189.
  • 190.
    38 @SvenRuppertTechnical Transformation on thingthat would limit your speed… time
  • 191.
    38 @SvenRuppertTechnical Transformation on thingthat would limit your speed… time number of versions
  • 192.
    38 @SvenRuppertTechnical Transformation on thingthat would limit your speed… time number of versions v1
  • 193.
    38 @SvenRuppertTechnical Transformation on thingthat would limit your speed… time number of versions v1
  • 194.
    38 @SvenRuppertTechnical Transformation on thingthat would limit your speed… time number of versions v1
  • 195.
    38 @SvenRuppertTechnical Transformation on thingthat would limit your speed… time number of versions v1 v2
  • 196.
    38 @SvenRuppertTechnical Transformation on thingthat would limit your speed… time number of versions v1 v2 stabilize
  • 197.
    38 @SvenRuppertTechnical Transformation on thingthat would limit your speed… time number of versions v1 v2 stabilize
  • 198.
    39 @SvenRuppertTechnical Transformation on thingthat would limit your speed… time number of versions v2 stabilize
  • 199.
    39 @SvenRuppertTechnical Transformation on thingthat would limit your speed… time number of versions v2 stabilize delta t compared to project lifetime
  • 200.
    39 @SvenRuppertTechnical Transformation on thingthat would limit your speed… time number of versions v2 stabilize delta t compared to project lifetime
  • 201.
    40 @SvenRuppertQM / QS- TDD Do you have bugs in your code ?
  • 202.
    40 @SvenRuppertQM / QS- TDD Do you have bugs in your code ? no
  • 203.
    40 @SvenRuppertQM / QS- TDD Do you have bugs in your code ? since years you are working hard on this…. no
  • 204.
    40 @SvenRuppertQM / QS- TDD Do you have bugs in your code ? since years you are working hard on this…. no
  • 205.
    41 @SvenRuppertQM / QS- TDD Codebase is > 13 years old remember…. how to start? what is the right point to start? how to increase the quality of the tests?
  • 206.
    41 @SvenRuppertQM / QS- TDD Codebase is > 13 years old no test coverage remember…. how to start? what is the right point to start? how to increase the quality of the tests?
  • 207.
    41 @SvenRuppertQM / QS- TDD Codebase is > 13 years old no test coverage how to decrease complexity? remember…. how to start? what is the right point to start? how to increase the quality of the tests?
  • 208.
    42 TDD with jUnit@SvenRuppert
  • 209.
    42 TDD with jUnit@SvenRuppert are you using jUnit?
  • 210.
    42 TDD with jUnit@SvenRuppert are you using jUnit? assume that the following would make sense.. ;-)
  • 211.
    42 TDD with jUnit@SvenRuppert are you using jUnit? assume that the following would make sense.. ;-) public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 }
  • 212.
    42 TDD with jUnit@SvenRuppert are you using jUnit? assume that the following would make sense.. ;-) public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ?
  • 213.
    42 TDD with jUnit@SvenRuppert are you using jUnit? assume that the following would make sense.. ;-) public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ? it depends ;-)
  • 214.
    43 TDD with jUnit@SvenRuppert public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ? it depends ;-)
  • 215.
    43 TDD with jUnit@SvenRuppert public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ? it depends ;-) for line 100% coverage
  • 216.
    43 TDD with jUnit@SvenRuppert public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ? it depends ;-) for line 100% coverage 2
  • 217.
    43 TDD with jUnit@SvenRuppert public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ? it depends ;-) for line 100% coverage 2 but will this be enough?
  • 218.
    43 TDD with jUnit@SvenRuppert public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ? it depends ;-) for line 100% coverage 2 but will this be enough? maybe ;-)
  • 219.
    44 TDD with jUnit@SvenRuppert public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ? for line 100% coverage 2 but will this be enough? maybe ;-) it depends ;-)
  • 220.
    44 TDD with jUnit@SvenRuppert public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ? for line 100% coverage 2 but will this be enough? maybe ;-) how to find out, what will be enough? it depends ;-)
  • 221.
    44 TDD with jUnit@SvenRuppert public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ? for line 100% coverage 2 but will this be enough? maybe ;-) how to find out, what will be enough? how to find the right tests? it depends ;-)
  • 222.
    45 TDD with jUnit@SvenRuppert public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ?
  • 223.
    45 TDD with jUnit@SvenRuppert public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ? @Test
 public void testAdd001() throws Exception {
 final int add = new Service().add(0, 0);
 Assertions.assertThat(add).isEqualTo(0);
 }
  • 224.
    45 TDD with jUnit@SvenRuppert public class Service {
 public int add(int a, int b){
 if(a<2){
 return (a+b) * -1;
 } else {
 return a+b;
 }
 }
 } How many tests you will need ? @Test
 public void testAdd001() throws Exception {
 final int add = new Service().add(0, 0);
 Assertions.assertThat(add).isEqualTo(0);
 } @Test
 public void testAdd002() throws Exception {
 final int add = new Service().add(3, 0);
 Assertions.assertThat(add).isEqualTo(3);
 }
  • 225.
  • 226.
    46 Mutation Testing @SvenRuppert MutationTesting is a structural testing method
  • 227.
    46 Mutation Testing @SvenRuppert MutationTesting is a structural testing method we want to find a way to write "good" tests
  • 228.
    46 Mutation Testing @SvenRuppert MutationTesting is a structural testing method we want to find a way to write "good" tests how to find "good" tests?
  • 229.
    46 Mutation Testing @SvenRuppert MutationTesting is a structural testing method we want to find a way to write "good" tests how to find "good" tests? let the machine find the targets
  • 230.
    46 Mutation Testing @SvenRuppert MutationTesting is a structural testing method we want to find a way to write "good" tests how to find "good" tests? let the machine find the targets let´s mutate it... but how?
  • 231.
    47 Mutation Testing -the Idea @SvenRuppert
  • 232.
    47 Mutation Testing -the Idea @SvenRuppert a mutation is a small change in the code
  • 233.
    47 Mutation Testing -the Idea @SvenRuppert a mutation is a small change in the code .. small enough to be a small defect
  • 234.
    47 Mutation Testing -the Idea @SvenRuppert a mutation is a small change in the code .. small enough to be a small defect P will be the program
  • 235.
    47 Mutation Testing -the Idea @SvenRuppert a mutation is a small change in the code .. small enough to be a small defect P will be the program T will be the collection of all tests / Test Suite
  • 236.
    48 Mutation Testing -the Idea @SvenRuppert P will be the program T will be the collection of all tests / Test Suite
  • 237.
    48 Mutation Testing -the Idea @SvenRuppert P will be the program T will be the collection of all tests / Test Suite we will create a sequence of mutations / P1,P2,P3...
  • 238.
    48 Mutation Testing -the Idea @SvenRuppert P will be the program T will be the collection of all tests / Test Suite we will create a sequence of mutations / P1,P2,P3... .. Px will have only one mutation compared to P
  • 239.
    48 Mutation Testing -the Idea @SvenRuppert P will be the program T will be the collection of all tests / Test Suite we will create a sequence of mutations / P1,P2,P3... .. Px will have only one mutation compared to P running all tests from T against Px
  • 240.
    48 Mutation Testing -the Idea @SvenRuppert P will be the program T will be the collection of all tests / Test Suite we will create a sequence of mutations / P1,P2,P3... .. Px will have only one mutation compared to P running all tests from T against Px green: T will kill the mutation
  • 241.
    48 Mutation Testing -the Idea @SvenRuppert P will be the program T will be the collection of all tests / Test Suite we will create a sequence of mutations / P1,P2,P3... .. Px will have only one mutation compared to P running all tests from T against Px green: T will kill the mutation .. at leased one test from T will fail
  • 242.
    48 Mutation Testing -the Idea @SvenRuppert P will be the program T will be the collection of all tests / Test Suite we will create a sequence of mutations / P1,P2,P3... .. Px will have only one mutation compared to P running all tests from T against Px green: T will kill the mutation .. at leased one test from T will fail red: if all tests are green
  • 243.
    49 Mutation Testing -the Idea @SvenRuppert
  • 244.
    49 Mutation Testing -the Idea @SvenRuppert if we kill k out of n mutants
  • 245.
    49 Mutation Testing -the Idea @SvenRuppert if we kill k out of n mutants -> we are not good enough ;-)
  • 246.
    49 Mutation Testing -the Idea @SvenRuppert if we kill k out of n mutants -> we are not good enough ;-) we are perfect enough if we are reaching : k == n
  • 247.
    49 Mutation Testing -the Idea @SvenRuppert if we kill k out of n mutants -> we are not good enough ;-) we are perfect enough if we are reaching : k == n how to create all versions of Px ?
  • 248.
    49 Mutation Testing -the Idea @SvenRuppert if we kill k out of n mutants -> we are not good enough ;-) we are perfect enough if we are reaching : k == n how to create all versions of Px ? .. the good thing..
  • 249.
    49 Mutation Testing -the Idea @SvenRuppert if we kill k out of n mutants -> we are not good enough ;-) we are perfect enough if we are reaching : k == n how to create all versions of Px ? .. the good thing.. we could almost generate/ automate everything
  • 250.
  • 251.
    50 Mutation Testing @SvenRuppert generatingthe mutants and practical TDD with Mutation Testing
  • 252.
    50 Mutation Testing @SvenRuppert generatingthe mutants and practical TDD with Mutation Testing running all junit tests
  • 253.
    50 Mutation Testing @SvenRuppert generatingthe mutants and practical TDD with Mutation Testing running all junit tests check the reports
  • 254.
    50 Mutation Testing @SvenRuppert generatingthe mutants and practical TDD with Mutation Testing running all junit tests check the reports write more / better tests
  • 255.
    50 Mutation Testing @SvenRuppert generatingthe mutants and practical TDD with Mutation Testing running all junit tests check the reports write more / better tests loop until quality target reached
  • 256.
    51 Mutation Testing -Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } else { return a+b; }
 }
 }
  • 257.
    51 Mutation Testing -Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } else { return a+b; }
 }
 } how many test you will need for..
  • 258.
    51 Mutation Testing -Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } else { return a+b; }
 }
 } how many test you will need for.. 100% Line Coverage… and…
  • 259.
    51 Mutation Testing -Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } else { return a+b; }
 }
 } how many test you will need for.. 100% Line Coverage… and… to be save ?
  • 260.
    51 Mutation Testing -Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } else { return a+b; }
 }
 } how many test you will need for.. 100% Line Coverage… and… to be save ? 2 for Line Coverage
  • 261.
    51 Mutation Testing -Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } else { return a+b; }
 }
 } how many test you will need for.. 100% Line Coverage… and… to be save ? 2 for Line Coverage we will see ;-)
  • 262.
    52 Mutation Testing -Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } else { return a+b; }
 }
 } 100% Line Coverage… and…
  • 263.
    52 Mutation Testing -Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } else { return a+b; }
 }
 } 100% Line Coverage… and… we have one if statement
  • 264.
    52 Mutation Testing -Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } else { return a+b; }
 }
 } 100% Line Coverage… and… we have one if statement with an else branch
  • 265.
    52 Mutation Testing -Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } else { return a+b; }
 }
 } 100% Line Coverage… and… we have one if statement with an else branch this will lead to 2 jUnit Tests to get 100 %
  • 266.
    53 Mutation Testing -Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } 
 else { return a+b; }
 }
 } 100% Line Coverage… and…
  • 267.
    53 Mutation Testing -Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } 
 else { return a+b; }
 }
 } 100% Line Coverage… and… @Test
 public void testAdd001() throws Exception {
 final int add = new Service().add(0, 0);
 Assertions.assertThat(add).isEqualTo(0);
 }
  • 268.
    53 Mutation Testing -Hello World @SvenRuppert public class Service { public int add(int a, int b){ if (a<2) { return (a+b) * -1; } 
 else { return a+b; }
 }
 } 100% Line Coverage… and… @Test
 public void testAdd001() throws Exception {
 final int add = new Service().add(0, 0);
 Assertions.assertThat(add).isEqualTo(0);
 } @Test
 public void testAdd002() throws Exception {
 final int add = new Service().add(3, 0);
 Assertions.assertThat(add).isEqualTo(3);
 }
  • 269.
    54 Mutation Testing -Hello World @SvenRuppert final int add = new Service().add(0, 0);
 Assertions.assertThat(add).isEqualTo(0); final int add = new Service().add(3, 0);
 Assertions.assertThat(add).isEqualTo(3);
  • 270.
    54 Mutation Testing -Hello World @SvenRuppert final int add = new Service().add(0, 0);
 Assertions.assertThat(add).isEqualTo(0); final int add = new Service().add(3, 0);
 Assertions.assertThat(add).isEqualTo(3);
  • 271.
    54 Mutation Testing -Hello World @SvenRuppert final int add = new Service().add(0, 0);
 Assertions.assertThat(add).isEqualTo(0); final int add = new Service().add(3, 0);
 Assertions.assertThat(add).isEqualTo(3);
  • 272.
    55 Mutation Testing -Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations Killed 3
  • 273.
    55 Mutation Testing -Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations Killed 3
  • 274.
    55 Mutation Testing -Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations Killed 3
  • 275.
    56 Mutation Testing -Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations Killed 3
  • 276.
    56 Mutation Testing -Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations Killed 3
  • 277.
    56 Mutation Testing -Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations Killed 3
  • 278.
    Killed 3 57 Mutation Testing- Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations
  • 279.
    Killed 3 57 Mutation Testing- Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations final int add = new Service().add(2, 0);
  • 280.
    57 Mutation Testing -Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations final int add = new Service().add(2, 0);
  • 281.
    Killed 4 57 Mutation Testing- Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations final int add = new Service().add(2, 0);
  • 282.
    Killed 4 57 Mutation Testing- Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations final int add = new Service().add(2, 0);
  • 283.
    Killed 4 57 Mutation Testing- Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations final int add = new Service().add(2, 0);
  • 284.
    Killed 4 57 Mutation Testing- Hello World @SvenRuppert final int add = new Service().add(0, 0); final int add = new Service().add(3, 0); >> Generated 54 mutations final int add = new Service().add(2, 0);
  • 285.
    Killed 4 57 Mutation Testing- Hello World @SvenRuppert final int add = new Service().add(0, 0); >> Generated 54 mutations final int add = new Service().add(2, 0);
  • 286.
    Killed 4 57 Mutation Testing- Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0);
  • 287.
    Killed 4 58 Mutation Testing- Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0);
  • 288.
    Killed 4 58 Mutation Testing- Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0); final int add = new Service().add(1, 1);
  • 289.
    58 Mutation Testing -Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0); final int add = new Service().add(1, 1);
  • 290.
    Killed 5 58 Mutation Testing- Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0); final int add = new Service().add(1, 1);
  • 291.
    Killed 5 58 Mutation Testing- Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0); final int add = new Service().add(1, 1); killed 9:1
  • 292.
    Killed 5 59 Mutation Testing- Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0); final int add = new Service().add(1, 1); killed 9:1
  • 293.
    Killed 5 59 Mutation Testing- Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0); final int add = new Service().add(1, 1); killed 9:1 final int add = new Service().add(2, 2);
  • 294.
    59 Mutation Testing -Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0); final int add = new Service().add(1, 1); killed 9:1 final int add = new Service().add(2, 2);
  • 295.
    Killed 6 59 Mutation Testing- Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0); final int add = new Service().add(1, 1); killed 9:1 final int add = new Service().add(2, 2);
  • 296.
    Killed 6 59 Mutation Testing- Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0); final int add = new Service().add(1, 1); killed 9:1 final int add = new Service().add(2, 2);
  • 297.
    Killed 6 59 Mutation Testing- Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0); final int add = new Service().add(1, 1); killed 9:1 final int add = new Service().add(2, 2);
  • 298.
    Killed 6 59 Mutation Testing- Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(2, 0); final int add = new Service().add(1, 1); final int add = new Service().add(2, 2); killed 11:1
  • 299.
    Killed 6 59 Mutation Testing- Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(1, 1); final int add = new Service().add(2, 2); killed 11:1
  • 300.
    Killed 6 60 Mutation Testing- Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(1, 1); final int add = new Service().add(2, 2);
  • 301.
    Killed 6 60 Mutation Testing- Hello World @SvenRuppert >> Generated 54 mutations final int add = new Service().add(1, 1); final int add = new Service().add(2, 2);
  • 302.
    61 Mutation Testing -in short words @SvenRuppert
  • 303.
    61 Mutation Testing -in short words @SvenRuppert mutation testing is an add on to normal jUnit TDD
  • 304.
    61 Mutation Testing -in short words @SvenRuppert mutation testing is an add on to normal jUnit TDD tools are supporting it well
  • 305.
    61 Mutation Testing -in short words @SvenRuppert mutation testing is an add on to normal jUnit TDD tools are supporting it well generating and running all tests are time consuming
  • 306.
    61 Mutation Testing -in short words @SvenRuppert mutation testing is an add on to normal jUnit TDD tools are supporting it well generating and running all tests are time consuming but most important
  • 307.
    61 Mutation Testing -in short words @SvenRuppert mutation testing is an add on to normal jUnit TDD tools are supporting it well generating and running all tests are time consuming but most important will effect your project structure
  • 308.
    62 Mutation Testing -Lesson Learned @SvenRuppert
  • 309.
    62 Mutation Testing -Lesson Learned @SvenRuppert mutation tests are often leading to
  • 310.
    62 Mutation Testing -Lesson Learned @SvenRuppert mutation tests are often leading to …cleaner code compared to jUnit only
  • 311.
    63 Mutation Testing -Lesson Learned @SvenRuppert public static final String[] discardCommonPrefix(String a, String b) { String[] ret = { a, b }; int l = a.length() < b.length() ? a.length() : b.length(); for (int i = 0; i < l; i++) { if (a.charAt(i) == b.charAt(i)) { if (i + 1 < l) { ret[0] = a.substring(i + 1); ret[1] = b.substring(i + 1); } else { if (a.length() < b.length()) { ret[0] = ""; ret[1] = b.substring(i + 1); } if (a.length() == b.length()) { ret[0] = ""; ret[1] = „"; } if (a.length() > b.length()) { ret[0] = a.substring(i + 1); ret[1] = „"; } } } else break; } return ret; }
  • 312.
    64 Mutation Testing -Lesson Learned @SvenRuppert public String[] discardCommonPrefix(String a, String b) { final String[] ret = new String[2]; int l; if (a.length() < b.length()) { l = a.length(); } else { l = b.length(); } int position = 0; for (; position < l; position++) { final char charA = a.charAt(position); final char charB = b.charAt(position); if (charA != charB) { break; } } if (position >= a.length()) { ret[0] = ""; } else { ret[0] = a.substring(position); } if (position >= b.length()) { ret[1] = ""; } else { ret[1] = b.substring(position); } return ret; }
  • 313.
    65 Mutation Testing -Lesson Learned @SvenRuppert Version 1 Version 2
  • 314.
    65 Mutation Testing -Lesson Learned @SvenRuppert Version 1 Version 2 for { if { if else { if if if } } else }
  • 315.
    65 Mutation Testing -Lesson Learned @SvenRuppert Version 1 Version 2 for { if { if else { if if if } } else } if else for { if } if else if else
  • 316.
    66 Example of uselessCode @SvenRuppert
  • 317.
    66 Example of uselessCode @SvenRuppert
  • 318.
    66 Example of uselessCode @SvenRuppert
  • 319.
    Summary 67 @SvenRuppert Now it istime to relax again ;-)
  • 320.
    Summary 68 @SvenRuppert If you areinterested… have a look at GITHUB ProxyBuilder Dynamic-Dependency-Injection Java-Microservice or contact me ;-) @SvenRuppert
  • 321.
    Summary 68 @SvenRuppert If you areinterested… have a look at GITHUB ProxyBuilder Dynamic-Dependency-Injection Java-Microservice or contact me ;-) @SvenRuppert Thank You !!!