domingo, 25 de septiembre de 2022

More inefficient when we take on more projects

When we work in two projects, and we swap from one to the other we have a cost. We know that two times 50% equal 100%, but it is not always as a valid analogy to use in some context. When two people work half time that not necessary mean one person can do the same work in a day.
"While it takes one woman nine months to make one baby, nine women can't make a baby in one month."

From Brooks's Law
At the end of the former century it was when we use the term multitasking operatins system with computers that only had one CPU. It appears to work in many tasks at the same time but it is not. What really happen is the CPU work in one task A during certain time, save the status of the task A, then start or continue with a task B during certain time, and so on. That means the computer works for a lapse of time in one task at a time and then in another, then to finish one task it could takes many work lapses on the task. This happen so quickly that seems to do many tasks at the same time. But this context switching have a cost.

Multitasking is not as effective as appears

Also, people must let all ready to continue a tasks in the future when is stoping a current task that is not finished yet. Then when they retake on the task it would be easier to continue and to go in a flow state, be productive. Sometimes to change context is necessary to refresh ideas, let time to creativity, have other perspectives. This is context switching in order to rest some area that need it. If the sight sense is tired then to move to other project does not mean to rest the sight if both projects need an effort of sight.

For each additional project someone undertakes, he lose up 20% of his time to the act of context switching. (1). In the next figure we can see if we work in three projects we lost up 40% in context switching instead of doing the work then the time to work would be 20% to each project instead 33,33%.
  • (100% – 20%) / 2 = 40% available to each of the 2 projects.
  • (100% – 40%) / 3 = 20% available to each of the 3 projects.
  • (100% – 60%) / 4 = 10% available to each of the 4 projects.
  • (100% – 80%) / 5 = 4% available to each of the 5 projects.

From the side of a client we can think about if we hire someone who is working in many projects, as more they would be less would be the time to our project (it could affect in quality or the time to finish the work).

How to cut the cost of switching context?

First at all, we can delegate, pospone, do it. For a company to delegate would be assigned it to a free group. Same as a computer uses more than one CPU.

If we will work on several project then we need to find a way to do the context switching efficiently, to reduce as much as posible the cost and to do a quick switching and continue where it was paused. We can learn agile frameworks and metrologies where it is used small task that are atomised, that meas they are divided in small tasks, detailed, understandable to not lost time understanding what is the task and if something is necessary, they have an precisely action to do.

Brooks' Law is about projects that are behind schedule and if we add manpower, it will cause them to be further behind schedule. Then when we can add manpower at the beginning of a project with less cost than if we do it in a later time. More later more cost. Also, there are tasks that can do new manpower and it does not necessary cause delay to the project because these tasks are complementary, do not have an impact in others tasks, need to be started, are not complex.

Just as two part-time people do not necessarily do the work of one. If both people are inexperienced, neither full-timer will do the job of a part-time expert. For this reason, introducing highly qualified personnel, without being more than necessary, can shorten times if it does not entail the incorporation of other techniques, methodologies whose use or learning of these is another impediment. The knowledge of the tools, knowledge about the needed area, similar projects, etc. have a great influence.

So, do not make the mistake of lightly using an engineer, architect, programmer as any other resource (a battery) as a replacement for another without this causing a cost. If in the change of a battery can be repercussions then there can be much more repercussions in the change of people. And the more specialised or complex the project, the more notorious the change in human resources.

References

(1) Gerald Marwin Weinberg. An Introduction to General Systems Thinking.
Don McGreal, Ralph Jocham. The Professional Product Owner.

sábado, 24 de septiembre de 2022

How to hide toolbar buttons in Autodesk Forge Viewer?

 



First, we can print in console the toolbar variable in order to show controls values. These are the sections of the toolbar.


Each control:

  • navTools
  • measureTools
  • modelTools
  • settingsTools
Then, if we expand one of them we can see the buttons inside controls


To hide or remove the camera button we can do some like this:

this.viewer.toolbar.getControl('navTools').removeControl('toolbar-cameraSubmenuTool');

Let's remove some more and see how it is showed.

this.viewer.toolbar.getControl('settingsTools').removeControl('toolbar-propertiesTool');
this.viewer.toolbar.getControl('settingsTools').removeControl('toolbar-modelStructureTool');
this.viewer.toolbar.getControl('settingsTools').removeControl('toolbar-settingsTool');
this.viewer.toolbar.getControl('modelTools').removeControl('toolbar-explodeTool');




jueves, 22 de septiembre de 2022

¿Cómo ocultar botones de la barra de menú de Autodesk Forge?

 



Podemos empezar imprimiendo en consola la variable toolbar para ver los valores de controls. Los cuales son las secciones en las que se divide la barra.


Podemos ver que  cada sección se llama:

  • navTools
  • measureTools
  • modelTools
  • settingsTools
Y si expandimos una de ellas podemos ver que dentro encontramos controls donde está cada botón de la sección. 


Es decir, si queremos ocultar la cámara de la primera sección tenemos que hacer algo como:


this.viewer.toolbar.getControl('navTools').removeControl('toolbar-cameraSubmenuTool');

Vamos a ocultar algunas más y ver el resultado.

this.viewer.toolbar.getControl('settingsTools').removeControl('toolbar-propertiesTool');
this.viewer.toolbar.getControl('settingsTools').removeControl('toolbar-modelStructureTool');
this.viewer.toolbar.getControl('settingsTools').removeControl('toolbar-settingsTool');
this.viewer.toolbar.getControl('modelTools').removeControl('toolbar-explodeTool');