Introducing 

Prezi AI.

Your new presentation assistant.

Refine, enhance, and tailor your content, source relevant images, and edit visuals quicker than ever before.

Loading…
Transcript

But what about Tomorrow?

What about 5 years from now?

  • Remembering what you did.
  • Remembering where you did it.
  • Remembering why you did it.
  • The landscape has probably changed.

cognitive effort

Comprehension is imperative

in order to successfully

work on software systems.

The needed effort

is proportional to the complexity

of the system

we wish to comprehend.

Complex solutions

require more cognitive effort

to comprehend.

I want to work smarter, not harder.

  • Automation
  • Exploit common patterns
  • Use the right tool for the job

Keep it simple

Use the right language and right level of

abstraction so that I can express something complex in a simple way.

The role of the Engineer is to reduce complexity.

To use the appropriate techniques with which the technical solution can be expressed with the minimal amount of cognitive overhead.

  • A computer program that is used will be modified

  • When a program is modified, its complexity will increase, provided that one does not actively work against this.

Coupling - Increase of dependencies between software parts

Cohesion - Decrease of orthogonal separation of concerns

This scales

The only way to go fast is to go clean.

Internal Quality dictates the rate at which we will be able to respond to change.

If we wish for changes to be done quickly,

we must have a software system with a low Read/Write ratio

as well as an accommodating design.

This means that we need an easily comprehended system on both architectural level as well as code level.

This means having software system with low complexity

Maintainability

Code as a time sponge

Complexity? No thanks!

Read to Write Ratio (R/W)

x 200

Given that complexity requires cognitive effort,

it means that I have to put in more work!

Before code was written, something was comprehended (time has been absorbed).

It took time to write the code and test it properly (more time absorbed).

Now, every time someone will comprehend this new piece of code, they will sacrifice time

again (even more time absorbed).

Studies by Microsoft and IBM shows that on average,

work in large legacy system has a R/W ratio of 20.

For every 1 hour spent writing code,

there has been 20 hours reading code.

It takes twenty times more effort to comprehend the complexity of the system than to introduce the change in it.

Complexity is our enemy.

Maintenance is a GOOD thing!

What is maintainability?

Software Entropy

Maintainability is

A time dependent property of

Software Systems

A subjective measure of how much

effort it takes to make any change in

a software system.

Maintainability

“Software Entropy will always increase for every change, unless effort is made to reduce it.”

(Meir M. Lehman)

A time dependent property of a Software System

A subjective measure of how much effort it takes to make any change in a software system.

Code I just wrote - is fully maintainable the coming seconds,

by me.

Different mechanisms by which

Software Entropy increases

Product in maintenance

Summary

Time dependent

property

Complexity requires

cognitive effort

It is better than that

Proof that

  • someone uses the product
  • pays for it
  • wants to continue using it

Maintainability affects economics

Everyone's problem

Might not be the coolest

start up product

Or the new greenfield

project at the company

Maintainability is economics

Meaning of maintenance

Software Maintenance

An evolutionary process,

where modifications and corrections

are made to a software product

after delivery.

Quality

Keep (a building, machine, or road) in good condition or in working order, by checking or repairing it regularly.

Speed vs Quality

Increased complexity

leads to smaller margins

Increased complexity means more effort.

More effort means more work.

More work means more time.

More time means higher costs.

Higher costs means smaller margins.

Internal and External

Quality

More people

More work hours (overtime)

The managers dilemma

Work requires more time.

But there are a limited set of

control variables for managers.

External quality

Internal quality

External Quality is the only thing users of the system can perceive. It is easily measured.

  • Amount of error reports
  • Compliance levels to standards
  • Load capacity
  • Uptime
  • Response times

Customers care only for the External Quality – until they want a change or have an error report that needs handling.

Internal Quality is what only the developers of a system can perceive. It affects

  • cost of feature introduction
  • cost of correction

But not necessarily functionality.

Internal quality is very hard to measure, there are numerous software metrics, but they will at best give a possible indication that something might be wrong.

  • Cyclomatic complexity
  • Naming schemes
  • Source Lines of Code (SLOC)
  • Code Coverage
Learn more about creating dynamic, engaging presentations with Prezi