Agile has helped teams to collaborate and organize work better. That’s great. Better teamwork and better understanding of the work definitely helps a team to do right things. Agile has also lead the way toward technical practices such as Continuous Integration and Delivery, Test Driven Development and SOLID-architecture principles. Great, these things definitely help the team to do things right.
Then again, most of the time in software projects goes into problem solving and similar creative acts. Agile has relatively little to give on these areas. Currently, agile is not about creativity nor is it about problem solving.
This coaching circle session will focus on the creative core of software development: solving creatively novel, original and broad problems more effectively all the time. I will introduce some principles and tools I’ve found useful when helping people to solve hard problems and to find creative solutions.
1. How to coach teams in
creative problem solving
Ari-Pekka Lappi (@ilmirajat)
2. After this presentation
everyone has at least 1
creativity tool they can use
in their everyday work
within next two weeks.
• Introductions round(s)
• Short intro
• Some creative tools
• Exercises (here and home)
• Coaching exercise (optional)
• Next catching circle session
3. Who am I?
• Hybrid philosopher-engineer
• Developer, ScrumMaster, architect
• M.A. majoring theoretical philosophy
from Helsinki University
• Entrepreneur in Flowa
• Big fan of functional programming
(F# and Clojure), philosophy of
Nietzsche
• Hobbyist game designer and game
researcher
• Part-time artist in Reality Research
Center
Thus Spoke Zarathustra by Atanas Botev.
Oil on canvas/collage 2004
7. Everyone is creative
in their own way when they want to!
Not in your way and when you would like them to!
8.
9. …remove the obstacles blocking their inherent creativity
…encourage people to step aside routines and accustomed
pattern and presumptions
…amplify their creative potential by ensuring that they do things
they love
…help them see opportunities and options beyond constraints
and obligations
11. My focus in this session
…remove the obstacles blocking their inherent creativity
…encourage people to step aside routines and accustomed
pattern and presumptions
…amplify their creative potential by ensuring that they do things
they love
…help them see opportunities and options beyond constraints
and obligations
13. How can you support
people in problem
solving?
Image: Epsos.de
14. Think of pains and struggles just
before the moments of
”heureka” and ”aha, I got it”
What creative struggles have had?
How it feels just before ”heureka” and why?
15. The most common pains and
struggles in problem solving
My observations
24. Case 1: Bootstrap doesn’t work anymore. It
worked last week. What I have messed up?
Download
Bootstrap
Ensure that it
works
Something
else for week
and two
Continue
(following
the tutorial)
It does not
work
anymore
Something that worked
last week doesn’t
work anymore!
26. Bootstrap did work week
or do ago
Bootstrap doesn’t work
anymore. It worked
last week.
Bootstrap works again
(=problem solved; what might
be differently)
CSS markup and bootstrap files
Html and link to css file
Browsers default rendering rules
Examples in the tutorial
CSS markup and bootstrap files
Html and link to css file
Browsers default rendering rules
Examples in the tutorial
27. Web site documentation
Development community
Browser version
Version 2.x (newest)
=> Default docs for v2.x
Web site documentation
Development community
Browser version
Version 3.0 (newest)
=> Default docs for v3.0
Bootstrap did work week
or do ago
Bootstrap doesn’t work
anymore. It worked last
week.
Bootstrap works again
(=problem solved; what might
be differently)
CSS markup and bootstrap files
Html and link to css file
Browsers default rendering rules
Examples in the tutorial
CSS markup and bootstrap files
Html and link to css file
Browsers default rendering rules
Examples in the tutorial
28. Solutions
Bootstrap 3.0 was released a week ago. I had
downloaded the bootstrap 2.x files and tested it
using version 2.x tutorial. Now I continued by
using 3.0 tutorial. There’s a mismatch…
29. Case 2: After customer have paid, delivery of the
product fails in 1 of 10 000 case due fatal system
failure
Order Payment
Process
order and
payment
Delivery
Fatal (seeminly
non-repetable and
rare) error here
30. Much earlier: Recurring session
related problems and fixes
Customer service
Company reputation
Customer select product
Customer confirm order
Customer pays product in third party
payment system
When customer returns to the
our system, system throws
fatal error sometimes.
Delivery of the product fails in 1 of
10 000 cases due a fatal server error.
Customer calls to the customer
service and complains about the
problem.
Database call
UI interaction
Session handling
Database calls
Cryptographic stuff (ensure validity
of order)
Cryptographic stuff (ensure validity
of payment)
Database calls (get product data, get
order related data, store payment
related data…)
Session handling
Session expiration
Annoyance about the failed delivery
Call to customer service
31. Much earlier: Recurring session
related problems and fixes
Database server
3rd party payment system
Error logs and audit logs
Web server and application server
Request routing
Caching mechanisms
Customer service
Company reputations
Customer select product
Customer click order and pays
product in thrid part payment system
Customer returns to the our
system. System throws fatal
error.
Delivery of the product fails in 1 of
10 000 cases due a fatal server error.
Customer calls to the customer
service and complains about the
problem.
Database call
UI interaction
Session handling
Database calls
Cryptographic stuff (ensure validity
of order)
Cryptographic stuff (ensure validity
of payment)
Database calls
Session handling
Session expiration
Annoyance about the failed delivery
Call to customer service
Log entries mapped to the
approximate time of the error and
type of error
32. Solution
The solution was that in some rare cases a field returned by SQL server was
null (value did not exist) and the system threw NullReferenceException*. The
end user saw just a generic “something went wrong” error.
You needed to add a null check.
[*] As some of you guessed already, the language was C#. In Java you get
NullPointerException, not NullReferenceException.
37. Where?
• Where should startups do risk management?
• Irrelevant
• Where should startups not do risk management?
• Customer premises?
Image: Nasa
Fine, but this does not
yet solve the problem!
38. When?
• When should startups do risk management?
• Hour or two once per quarter is probably enough
• Where should startups not do risk manement?
• Irrelevant
A solution; maybe good enough
39. Conditions? Interfaces?
• In which cases or within which conditions startups should do risk
management?
• If they need to do decision having big financial impact
• In which cases or within which conditions should not startups do risk
manement?
• If they do sales
• As a part of their everyday work (usually)
Great, we have a solution!
40. Outcome
The coachee decided that:
Once per quarter he will go to a restaurant with the founders
of a startup. During that evening they go through what all
could go wrong and get drunk (or another way around).
After that evening, the people switch back to the optimistic
mode.
41. Case 3: We want to write and read
massive amount of data from a table
at the same time in SQL Server
Guess what --- we had a serious performance
problem.
44. Where?
• To where need I write data quickly?
• I don’t care as long as the data is persisted to the database and never lost
• From where need I read data quickly?
• I don’t care if I get valid data from database
Image: Nasa
NO WIN!
45. When?
• When do I want to read data quickly?
• When customer wants to download a dataset he have earlier stored to the
system
• When do I want to write data quickly?
• When customer want to save or upload data to the system
NO WIN!
46. Conditions? Interfaces?
• In which cases or within which conditions I want to read data quickly?
• Always
• In which cases or within which conditions I want to write data
quickly?
• Only in those cases it have impact to user experience. If I do some stuff as a
background job it does not matter if it takes time.
ROCK! Now we’re talking…