I like pictures and one of my hobbies is photography.
Now I’d like to explain why pictures are an essential tool for engineers.
Point 1:
They reckon that the earth is about 4.5 billion years old.
We have been using language for approximately 50 thousands years.
On the evolutionary scale that’s not very long at all.
We have apparently descended from fish. Fish are around for 330 million yrs.
Fish have eyes and a brain to interpret the images that they see.
We have an incredible brain that interprets images that we see which has been fine tuned through millions of years of evolution.
So we have been using language for 0.015% as long as we have been processing images.
(666 generations : 4.4 Million generations)
Consider the every day scenario where you are out playing football with your brother.
Your brother is 30meters away and throws the ball to you.
You use your stereoscopic vision which gives you depth perception to determine your brother distance from you.
You then calculate the trajectory of the ball and the speed of the ball to enable you to move into position to catch that ball.
At the perfect moment you bring up your hands and you catch the ball. This all happens in 2-3 seconds
Our brains are adapted to process images. They are not very well adapted to process text.
During the 3 seconds it take for the ball the shoot from your brother to you how much text or speech do you think you could process? A paragraph; a sentence maybe?
Point 2:
It is known that one key difference between the elite sporting performers and the rest is that they have impeccable timing and reflexes. Formula 1 drivers, boxers, soccer players, martial artists all have this in common. Their brains visual feedback loop is so adapted that they practically see things in slow motion.
Point 3:
Language can easily be misinterpreted. Plane crash investigation experts know, for example, that the causes of certain plane crashes is due to miscommunication between the pilots and ground control. The found that a number of planes that crashed in US airspace had south Korean pilots. When the investigated further they found that in all of these cases the pilot had radioed to ground control to say he was running out of fuel. Ground control confirmed that they could not land and to keep their holding pattern. The south Korean pilots were not assertive enough. This had devastating consequences. They put it down to cultural differences. South Korean pilots were too submissive. North American ground control were very assertive/ almost aggressive.
Even though they speak the same language their intent is misinterpreted.
Point 4:
People have a limited vocabulary and many of us speak different languages. Images/pictures are our universal language.
This is why I firmly believe that software engineers must use pictures to communicate complex problems and solutions.
The point is if clever software is too clever and too complex for people to maintain, debug or extend then its not a good thing.
Clarity is key. Sometimes that translates into keeping it simple!
The software you write belongs to the company. It has a cost associated with it (maintenance, quality etc.).
Do companies understand how much your software costs them?
Do you understand how much your software costs your company?
This can fit in the static model or the dynamic.
Static Qualities – My process consists of these threads/thread pools and these queues.
Dynamic Qualities – Overlay interaction or msg/packet flow to show how threads interact!
The dynamic model captures/defines how your software (objects/components/modules) interacts and behaves over time.
It captures the dynamic behavior of the software. (e.g. When event A occurs actions 1 and 3 are carried out)
The dynamic model captures/defines how your software (objects/components/modules) interacts and behaves over time.
It captures the dynamic behavior of the software. (e.g. When event A occurs actions 1 and 3 are carried out)
The dynamic model captures/defines how your software (objects/components/modules) interacts and behaves over time.
It captures the dynamic behavior of the software. (e.g. When event A occurs actions 1 and 3 are carried out)
Doesn’t meet all requirements! or misinterpreted requirements.
Difficult to understand or unclear.
Boundaries of responsibility are not well defined. Some modules doing too much. Responsibilities not functionally grouped.
Not obvious how to transition to implementation.
Difficult to maintain
Difficult to ramp people
Difficult to extend (simple modifications/additions difficult)
Difficult and time consuming to debug
Difficult to test. Not obvious. Test points not considered.
End result is poor. Buggy Solution.
Absorbs resources. A Bottomless pit!
Any ‘weakness’ in the system will impact overall quality.
Quick and accurate feedback loops are essential at every stage in the process.
A central theme in maintaining quality throughout the chain is to have very strong communication! (i.e. Use tools that provide visual feedback (pictures) where possible)
Many feedback points:
Design/test review
IDE gives you syntax highlighting feedback, debug ability etc.
Building the code we get feedback (compiler warnings/errors)
Static analysis feedback
Unit testing/ sub-system testing, emulation (test results, coding errors, code coverage etc.)
Tools like valgrind, jprofiler, jtest can give quick accurate feedback.
The quicker and more accurate the feedback loop the better. This leads to better productivity and better quality. e.g. Writing the code, building it and installing it in order to test it is a slow feedback loop with limited feedback!