Loading presentation...

Present Remotely

Send the link below via email or IM


Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.


Software As A Circus

No description

Daniel Steenblik

on 27 April 2015

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Software As A Circus

For Example:
The Customer:
A Colon Cancer Diagnostic Laboratory
Software As A Circus
How do we do it?
Dan reminisces about his first job...
Cubicle of Monte Cristo
Quiet as death
One team meeting in four months
Top 5 Hot Tips for Programmers
Hello, World
Software & Service for Biotech
Invents laboratory software, hosts servers
Downtown SLC, UT
Since 2008
Clown Computing with
Daniel Steenblik
Software @

"Sampleminded manages mission critical specimens and test results for regulated diagnostics labs, research labs and clinical trials"

5% of the U.S. population will get colon cancer
50,000 will die this year
2nd leading cause of cancer death (U.S.)
Survival 12% @ late stage discovery
and yet...
when discovered early*
That means
Get Tested
That means
Oh. No wonder people die.
Another way?
So not that way...
Intense Creative Collaborative Trusting Energetic Fun Invention Workshop
High Tech Anthropology
Paired Programming. Paired Testing. Customer Pairing. Team Inventing.
Invention idea comes ...
Decide to focus on idea
Invent details with team:
experts, programmers, testers
between owner, programmers, testers
Explicit Tests!!!
Programmers pair on code and tests while
Testers expand
Contract into Tests Cases
Hand-off #1
- Demo contract and witness explosions
Hand-off #2
- Smooth sailing
Focus! Our agile approach
Repeat until One Million Lines of Code in a half dozen languages
Sequence Diagrams
Action shots of software design
Don't Trap Exceptions
Never? Pretty much.
Boxes & Arrows
Give yer design the ol' simple Boxes & Arrows test
Box 1
Box 2
Read Stack Traces
It's pretty easy. A Trail of breadcrumbs!
Single Responsibility Principle
Good Design!
Box 1
Box 2
Bad Design!
at com.clinitraq.web.server.SomethingTest.someMethodWeJustIntented(SomethingTest.java:31)
at com.clinitraq.web.server.SomethingTest.test(SomethingTest.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
My favorite. The One and Only Principle.
Borrowing from Wikipedia

“The single responsibility principle states that every class should have responsibility over a single part of the functionality provided by the software, and that responsibility should be entirely encapsulated by the class. All its services should be narrowly aligned with that responsibility.”
How to teach real-world software development
ala Dan
Step 1. As Freshman: Hello World
Full transcript