Apathy, Malicious Obedience and Personal Responsibility

Friday, December 16th, 2011 | Uncategorized | No Comments

That was a long pause since my last post. A lot of things happened since than. The current post is more of an outcry, an attempt to reach people’s consciousness in order for them to realise the importance of personal responsibility in their daily life — both professional and private.

The aspect of personal responsibility I’m concerned with is the professional responsibility. Often when working in an environment of the Management 1.0 (as opposed to Management 3.0) style of command and control, people find easier not to do anything that is not requested of them directly instead of thinking of the best ways of dealing with any task at hand.

This might seem as a self preservation mechanism — usually as the result of multiple failed attempts in the past to be proactive and trying to do their job in the best possible way. Failed attempts because of the managerial approach of shutting such attempts down with statements “you’ll be doing what I tell you to do” and “I can have you on the street any time if…”. After a while, people become reluctant to think proactively, loose any incentive to be self-motivating and become downright supporters of the malicious obedience. While not thinking proactively and absence of self-motivation is not helping any company to succeed, the malicious obedience has an extremely destructive power.

Malicious obedience is:

The Modus Operandi adopted by those who work for people convinced of their own infallible decision-making prowess, where one gleefully does what they’re told, even though they know it’s misguided, and waiting for the moment when it all blows up in their supervisor’s face. The precursor to schadenfreude.

One could always blame the management — this is the easiest and least resistant way of dealing with cases of Management 1.0 techniques. And most likely no one could object to the fact that it is first of all the management issue. However, IMO everyone who works for the company should always use their consciousness as the guide to their actions. This implies that instead of the apathy or malicious obedience one should always take personal responsibility in their actions with understanding that they themselves would be hurt more than anyone else by not taking a proactive action or actioning a bad order with a malicious intent.

Why would such person suffer most of their lack of personal responsibility replaced by malicious obedience? First of all because usually the ordinary employees, who are not the owners of the business and have no high-salary managerial position, are the ones to be least protected. Thus, if the business goes sour because of the poor management decisions that person would be the first to feel it.

There is a famous quote by Jim Rohn:

You must take personal responsibility. You cannot change the circumstances, the seasons, or the wind, but you can change yourself. That is something you have charge of.

Therefore, whatever is our job we should always take personal responsibility in performing it. Do your best to understand the opinion of your superior, of your co-workers, and do your best to communicate your own position to others. And if there is a true problem where your valid opinions are often ignored and incompetent decisions are made just because the management is simply incompetent to even listen to what your have to say, then do not go against you consciousness — quit and find a place where your expertise would actually matter.

This post could potentially be of interest for further reading. Also, this podcast and this video offer some interesting, fresh perspective on management.

Happy personal responsibility in the coming year to all who cares!

Forest and trees: code comprehension

Friday, November 6th, 2009 | Uncategorized | No Comments


Recently I was asked to investigate a piece of relatively old production code (one class actually), which started causing problems after some recent modifications. Unfortunately, the class in question had some… let’s say it was programmed by following not the best practices, which included mutable global states, static state modifiable from public static methods and very long methods. This made analysis of the code somewhat challenging and I’ve ended up refactoring it in order to reduce the state scope and its mutability.

There was one really long method consisting of 314 lines of code. This was not just a linear piece of code — it had many conditional operators resulting in cyclomatic complexity of value 44 (almost 42).

After finalising all required work to correct the reported problem I have sent an email to the team responsible for maintaining the class in question. This email addressed a matter of higher code quality with a special emphasis on facilitating code comprehension by avoiding global mutable state and reducing the size and cyclomatic complexity of methods.

Here is a snippet of the reply I have received:

Although advocating low code cyclomatic complexity, in the extreme case it is easier for a business analyst [code name for a person amongst other things also doing programming, 01es], especially one not intimately familiar with Java or the listener [a Java class, 01es] in question, to parse and understand a single method with 314 lines than 314 methods with 1 line each. Especially when debugging, where one long method can be traced in 314 steps, but many smaller methods cause jumping throughout the code causing distractions while trying to follow a (potentially simple) execution path.

I’d like the reader to ponder the above quote for a few seconds …

Forest and trees

Walking in the forest between the trees is wonderful… especially in Autumn when there are plenty of colourful leaves on the ground. However, walking between the trees won’t tell us how large is the forest or where does it have clearings. If one would like to comprehend these questions s/he needs to rise above the forest high in the sky — zoom out to see a more generic picture. Hovering above in the sky one could see the boundaries of the forest and clearings. If forest clearings are not visible very well then a slight descend could help — zoom in to see the necessary details. Having descended to the ground facilitates a close inspection of the trees again.

Hope that the forest and trees metaphor can easily be translated into the comprehension and debugging of the code. Don’t forget the stepover and stepin capabilities, which are featured in most modern debuggers.

Have a nice code comprehension experience,

Language influence

Friday, May 8th, 2009 | Uncategorized | No Comments

About two years ago I have decided to learn more about LISP mainly because I’ve got intrigued by Paul Graham essays. Then of course the famous Structure and Interpretation of Computer Programs, which was an excellent way to learn LISP (Scheme), introduced me more into the functional programming paradigm.

The experience of just playing with LISP and learning functional concept (e.g. immutability) had a tremendous influence on my programming in Java (the day-to-day language for me), which I believe helped creating more reliable code. LISP has not become my programming language of choice, but it definitely widen the horizon for me as to where programming, even with imperative languages like Java, can be taken.

As mentioned in the previous post, Scala has become our primary language of interest — the target on the horizon, so to speak. And so far it was only a pleasant experience. Similarly to LISP, Scala also makes people think differently and make better, more concise programs. In How Scala Changed My Programming Style Bill Venners shares how Scala influences his programming in Java. This is a really nice post, which basically shows that even if Scala will not become your primary language it is worth learning just to become a better programmer.



Monday, January 12th, 2009 | Uncategorized | No Comments

It has been quite a wile since the last post… Since then several things have happened. First of all we have got a permission to open source our Query API, which will be happening in the next several month or so.

Also, the Trident Genesis platform is nearing its first milestone providing the core functionality for creating domain driven applications. The platform has been already successfully used in several trial projects. The current development is focused on enabling HTTP data marshaling to provide the RIA aspect of the platform, which is one of its key features.

In the past we have discussed the possibility of developing a Domain Specific Language (DSL) for the Trident Genesis platform, but the choice of technology for that task was not clear until now. In the past we have discussed different approaches, which included the use of ANTLR and a custom Eclipse plugin. However, all of that required a huge effort up-front as well as down stream for providing continuous support for a custom DSL and IDE integration. Lately, our particular interest was in exploring languages with meta-programming support, which would compile down to JVM binary code and could be integrated with Java. It appears that Scala is a very promising technology meeting our requirement. Developed in Scala DSL is internal to Scala taking advantages of all language features and IDE support, and at the same time it can be considered as an external DSL to Java providing all the required bindings to the Trident Genesis platform.

So, lots of exciting developments are in progress and even more is planned (:

All the best to everyone in 2009 — work hard and stay happy!

A quick update

Tuesday, September 23rd, 2008 | Uncategorized | No Comments

Dear visitors,

We’re currently flat out working on a new platform for development of EAM systems, and as a result have literally no opportunity to progress further with our site.

There are however some good news too (:. We’re planning on open sourcing our in-house Query API, which is an internal DSL/framework for writing JDBC/SQL queries. It is being used in production for over a year now, and due to the recent express of interest in the blog sphere to similar frameworks we’ve decided to share our own creation. Some of the main features are type safety, full support of PreparedStatement and parameters value reassignment, sub-selects (e.g. select from select, in select), variable arguments, easy to use for obtaining single row/value, convenient resource management (i.e. closing of result sets and prepared statements).

So, please stay tuned — Query API should be released as soon as we get a clearance from the upper management.

Under construction…

Wednesday, August 20th, 2008 | Uncategorized | No Comments

As part of an effort to restructure our internal practices, we’ve dicided to go online. Currently the web site is under construction, so please make sure you visit us in a short while.