{"id":12,"date":"2011-05-08T12:56:47","date_gmt":"2011-05-08T12:56:47","guid":{"rendered":"http:\/\/www.inospito.net\/?p=12"},"modified":"2015-08-19T21:38:47","modified_gmt":"2015-08-19T21:38:47","slug":"loosely-coupled-management","status":"publish","type":"post","link":"http:\/\/www.inospito.net\/2011\/05\/loosely-coupled-management\/","title":{"rendered":"Loosely coupled management"},"content":{"rendered":"
Software development has this concept of \u201cloosely coupled\u201d components, which are components that reduce to the absolute minimum their dependence on other components. Actually, <\/span>the definition<\/span><\/a> is even stricter, saying that components should reduce to the minimum their knowledge of other components:<\/span><\/p>\n In computing and systems design a loosely coupled system is one where each of its components has, or makes use of, little or no knowledge of the definitions of other separate components.<\/span><\/p><\/blockquote>\n The main advantage of these systems is that they are much easier to manage. For example:<\/span><\/p>\n <\/a><\/p>\n Recently, there has been a growing interest in asynchronous communication, like Message Queue or Publish\/Subscribe systems, where the component that sends the request doesn\u2019t block waiting for a response. Again, this is the \u201cloose coupling\u201d principle put in practice. There are some producers who produce messages and there are some consumers who consume messages. <\/span>What makes it loosely coupled is that fact that producers don\u2019t have a clue on who are the consumers and vice-versa.<\/b> This makes it possible to build applications in completely parallel branches. You can have two independent teams who are completely oblivious of the existence of the other, one developing a producer and another developing a consumer. The application is worthless without these two pieces, but each one can function by itself.<\/span><\/p>\n The advantages of these systems are well understood and recognized by experienced software developers, but I wonder if the same principles wouldn\u2019t apply to project management in general. One of the most difficult things to manage in a project is task dependencies. That\u2019s where you\u2019ll find the bottlenecks: <\/span>some people have to stop their work because their tasks depend upon completion of another task.<\/b> In other words, the tasks are as tightly coupled as they can get: they not only depend on other tasks, they have to know about the other tasks (at least, they have to know which tasks they depend upon and when those tasks finish).<\/span><\/p>\n What if you could manage the project in a completely loosely-coupled fashion? You would setup a simple rule: <\/span>everyone in the team must be able to finish their tasks without depending on someone else<\/b>. This means that when two tasks have a dependency between themselves, you have to mercilessly remove that dependency at all costs by:<\/span><\/p>\n If you fail to remove that dependency, then those two tasks must be done by the same person.<\/span><\/p>\n Now, I won\u2019t lie to you: this comes at a price. Removing the dependencies will probably make the tasks longer, because you have to develop additional mechanisms, like simulating the output of other tasks. Assigning a sequence of tasks to the same person is also a risky move \u2013 that person may be doing a series of mistakes but since she doesn\u2019t depend on anyone, you\u2019ll only notice it later than in a typical project.<\/span><\/p>\n\n
\n