Introducing
Your new presentation assistant.
Refine, enhance, and tailor your content, source relevant images, and edit visuals quicker than ever before.
Trending searches
But what about Tomorrow?
What about 5 years from now?
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.
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.
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
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.
A time dependent property of
Software Systems
A subjective measure of how much
effort it takes to make any change in
a software system.
“Software Entropy will always increase for every change, unless effort is made to reduce it.”
(Meir M. Lehman)
Code I just wrote - is fully maintainable the coming seconds,
by me.
Time dependent
property
Complexity requires
cognitive effort
Proof that
Maintainability affects economics
Everyone's problem
Might not be the coolest
start up product
Or the new greenfield
project at the company
An evolutionary process,
where modifications and corrections
are made to a software product
after delivery.
Keep (a building, machine, or road) in good condition or in working order, by checking or repairing it regularly.
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.
More people
More work hours (overtime)
Work requires more time.
But there are a limited set of
control variables for managers.
External Quality is the only thing users of the system can perceive. It is easily measured.
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
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.