Principles of Modern Software Development

The how and why of embracing change

Panu Kalliokoski
24.8.2015
CSC

Practicalities

What does modern mean here?

[a tyre swing]

What do principles mean here?


<q>If you obey all the rules, you will miss all the fun</q>

Course content preview

Some underlying principles

This section is to set up the goal of forthcoming principles.

In this section:

Why embrace change?

because it exists, d'oh

Why embrace change (even more)?

How to embrace change?


Automate all the things!

Time for break or discussion?
hetkinen…

Publicly keep track of everything

document all
the things!

Automate everything that is possible

Find problems proactively as soon as possible


[when you fix one bug, you introduce several new bugs]

Use safety nets for easily rolling back changes


The name of the game is to avoid decisions, at least the big and painful ones. Linus Torvalds

Some actual principles

Now we look at practical principles that help fulfill the aforementioned goals.

In this section: use a bug database, use source control, fix bugs before writing new code, automate tests, automate builds, automate change staging, refactor, explicitly declare and isolate dependencies, make daily builds, have someone responsible for testing, make code reviews, document your use cases, do hallway usability testing, design to distribute and scale with the process model, ensure uninterrupted work, separate stateless and stateful components.

Use a bug database


[bug database]

Use source control

[comics about being able to revert]

Fix bugs before writing new code

Automate tests


Debugging sucks but testing rocks.

Automate builds

[my code is
compiling]

Automate change staging

[home staging]

Refactor


Code refactoring - it won't be long

Explicitly declare and isolate dependencies

[locusts on the dependency list]

Make daily builds

Time for break or discussion?
hetkinen…

Have someone responsible for testing

[how to explain the testing profession to the lay person]

Make code reviews


[constructive code reviews]

Document your use cases

a wonderful
machine

Do hallway usability testing


<q>That's not how you're supposed to use it!</q>

Design to distribute and scale with the process model


[communicating sequential processes]

Ensure uninterrupted work


[detour for rope-walkers]

Separate stateless and stateful components

Stuff to discuss

Time for break or discussion?

Where to next?

In this section:


[simple way forward]

Other checklists

Types of testing


[a breath test]

Other levels of improvement