The past couple of days were spent working on Mingle. I had used mingle a few months ago, and it seemed fairly simple. This is because most of the features like any good user-interface programs are intuitive.

The beauty of Mingle is that it is for all kinds of people in a project. It seems to be geared with projects that rely on Excel to manage business points and stories. In the “old way”, by giving the Excel file to the client, information is shared. However, that seems risky business as not everyone (yep, its true) has Excel (or Excel 2007 with .xlsx extension that can’t be read by old readers – painful when you have v2003 at home).Transferring to Mingle from excel via import is a simple process.

I particularly like the way reports are customisable without going to extreme lengths by keeping everything associated with cards (stories/business point) and their properties. Generating tables from queries, as well as having graphs, pie charts are fairly simple to do – given that there is a readily available example. There are examples included from the Thoughtworks studios website, but going through Thoughtworks sandbox and looking at what other people have done was the best way for me to learn [Learning by example]. No thorough studying or learning is necessary to work in MQL.

It is also vital to understand the limitations, and what a person can’t do at the present (like extracting comments, or cards that were modified recently) in reporting. Perhaps those sort of things are not intended for MQL, or maybe Mingle was not set up correctly by its users as they did not know what sort of report they wanted, thus Mingle was not being used the way it was intended.

But nevertheless, I’ve been able to do almost everything that was requested in generating reports, and that after a few minutes of looking at other projects MQL usage.

It comes back to saying how important a good user-interface design is, and that coupled with making different parts intuitive for Devs, QAs, Clients, and PMs which I think is the #1 reason for Mingle ‘s success.

I am different states of mood when I am coding which does not involve tea or coffee after lunch. Depending on the code, I develop different tastes and cravings that go with the coding I do.

1. No mangoes I’ve tried can ever begin to taste like Indian and Pakistani Mangoes. I tried having Oceanic and African Mango which tasted horrible as compared to these sweet mangoes. Unfortunately, they are only available from Jun-Aug. If care is taken to remove the skin and cut into cubes, coding is easy while eating with a fork, otherwise be prepared for some mess while eating if they are cut into slices. The most popular varities in Pakistan are are Sindri, Anwar Rathore, and Chaunsa. These go really well when leisure coding.

http://img.alibaba.com/photo/11436654/Mangoes_From_Pakistan.jpg

2. The best food is Mango Pickle. Calling it pickle is doing disservice to the food. It should be called Achar (as it is called in Pakistan and India) in English as well because it does not taste at all like the pickles we’d find in the UK supermarkets. It is an oily flavoursome extreme of a pickle which can be enjoyed with a Paratha (flat bread).

There is an everlasting debate about open source software has done considerable damage to the commercial aspect software community. Or perhaps this debate brought in competition and improving standard causing the damage argument to no longer hold as consumers get more for less (therefore reducing potential profits of companies like Microsoft).

But with open source and further advances in technologies, there is always a technological exchange taking place between commercial software enterprises and open source community (more like adopting each others ideas).

Borland’s C was once the dominant force in these barrens lands which very few people like Turing trekked beforehand. Eventually the monopoly was broken up by lack of market understanding and internal political issues in the company, and thus with time, Visual C and Java emerged.

As soon as it became apparent that nothing was free and something had to be done to provide free extensions to the language and the environment, thus Open Source Guerrilla’s gained force and members. It is interesting to note that Guerrilla’s did not just stay with their own party and focus on improvement of one subset of thewhole developer land. Some rebels, encouraged by Microsoft, started open source community through the flexibility afforded by Microsoft and won some rebels back which helped start an Open Source movement of its own.

Now, there are many Java and .Net (probably those that migrated from C and C++) users. Microsoft tried to tug by building a failed language such as J# to entice users. It probably even paid people to write books and promote the language. But the propaganda machine in this war did not work. Java users would not have it no more. They were there to stay, not as refugeesbut a dominant source of power in their territory.

In the end, both Java and C# are facing each other eyeball to eyeball waiting for the other side to blink and lag behind after which the commercial force will wipe the enemy. For now, no treaty will be signed, but the temporary harmony will remain until the next version!

I would normally reserve non-technical posts for my personal blog, but think that given the attention it caught that I would post it here.

“At last, Musharraf is gone!” is what most people in Pakistan would say. But don’t we always start accusing government of corruption and malpractice at the cost of Pakistan’s poor after 2 or 3 years of their resign.

Each of Pakistan’s government could be summed up by a quote from a 1999 movie Sunshine based on two great Hungarian Jews who won Gold in 1936 Berlin Olympics. Valerie comments:

“I have seen the collapse of government after government, and they all think they can last a thousand years. Each new one always declares the last one criminal and corrupt, and always promises a future of justice and freedom.”

Musharraf sold out (to some foreign power) lots of Pakistanis by means of disappearances. Probably the most famous one is known as “Prisoner 650” (Dr. Afia Siddiqui) – an MIT PhD graduate who studied genetics was kidnapped by Pakistan’s intelligence agency (ISI) and held in Afghanistan without any charges and for more than 4 years (and counting) and tortured (beyond mental capacity). Her husband, 3 small children, had to endure life of uncertainty.

Other political parties in Pakistan are being ruled like a sub-Monarchy. The current leading party – PPP was handed down to Benazir by her father, and now – temporarily to her husband until her son is capable of taking over after finishing his education from Oxford University. It is a culture where the elite pursue super-elitism without any sense of fairness.

Pakistan’s history has been rather cyclical in the past fifty year, because no new figure has really emerged in the political scene!

I’ve been working with C# for the past few months, and never encountered a “var”. Mark commented seeing var’s all over the code base he is working on here.

It probably happens that once in a while a person encounters ancient code base, or people still using old methods of coding. I remember a few years ago in VB class at university, they were saying that to improve readability, variables should be named as “String strReceipt” and “int intTotal” which was probably the most ridiculous thing I’ve ever heard.

Even worse was the (Q)Basic era where variables were variables were named a, b, c and when there were too many, I was told to keep some sort of documentation for future reference as to which variable is for what for purpose. No matter how primitive, this can never be beautiful as some things I found in my previous blog about Ugly Code turning beautiful.

In the past year I’ve realised that learning is a key aspect to developing and staying in touch with what is current. Essentially, there are two ways of doing this:

1) Adapted learning: This is when some members of your team have acquired a skill which is used in the currently project. You see how it is being used, and try to catch on and try to mimic the usages yourself at a different point in the project.

2) Educational learning: When you are on a project, in your spare time you come across a new technique someone might have suggested, or read it in a book. You try out some examples, and evaluate to check if it is really a good fit. Once satisfied, you try out the technique in the real project, and once satisfied, bring it up with adapted learners.

This works well with open source projects, such as Accuracy of stormwindproject.org by Bernardo which offers powerful potential over its rivals in Acceptance testing which replaced the existing way of automated testing we were using.

Now, this does not mean all devs can be classified into these two categories, but rather, a pattern of exchange that exists. Someone might know autoboxing, while others may be familiar with generics. All this learning however comes into play via learning exchange that takes place thorugh efficient-pairing as mentioned in my previous blog.

I’ve noticed that once a person starts on a new project, he tries to understand the dynamics and the potentials of the team. About two weeks down, the project team evolves and each person on the project has a small subset of people that he will pair with regularly. This could limit the understand of the keep causing potential problems when rolling-off from a project as well as egos and intimidation (http://en.wikipedia.org/wiki/Pair_programming)

A solution proposed by Eric Plue when he manages his teams is via a pair matrix. This way, he does not assert each day that certain people must pair together, but instead, the team learns self discipline and tries to keep the pair matrix more balanced by making people who pair less, pair more when convenient. This method has been replicated well, as a result the team did not become static after some time, but more results were seen, and knowledge was spread. This is particularly helpful, because if a certain aspect of the code is latent, it may become more clear as long as there is good pair rotation.

My driving instructor told me that he used to be a contractor at IBM and several other companies in the past. Now he does small freelance work and driving with his primary source of income. In one of the lessons he told me that when he used to go to meetings, one of the primary objectives was to off-load a “monkey off your back” or “put your monkey on someone else’s back”. This way, an issue becomes someone else’s problem.

When I started working at thoughtworks I realised after a few months that there were no such meetings, and each “story” card that was worked on, if unresolved, we could either swap in a different pair, get advice from peers, or ask the tech lead for guidance. There have been stories which turned into mega stories and we had to prioritise things accordingly. But I never noticed that ending a problem was to throw off to someone else.

I came across a horrible piece of code written a few months ago. It was a client side javascript code which was ambiguous, used Basic era variables like a, b, c and relied on checking all user entered field every few seconds. The very first thing I remember while looking at this code was screaming like a child. It was as if I had lived my whole life in a cave when I thought I had seen everything possible.

When I first looked at the code it was if it were suspended in time by the person living in a private world of darkness where programming dimensions such as decent variable names and exploiting modern technology for problem-solving.

I went back at the code, and decided to have a look in between the lines, keeping in mind that I shouldn’t be surprised by what I see because this was not normal code, and not just Java script, but was in fact Basic parading around as Javascript.

Looking at the code even deeper I began to talk to the person that wrote this code. Of course, the person who actually wrote this code had left some time ago. But it was more like the code I was talking to. With it line, it had a feel to it. What kind of world is it where ugliness is the norm, and beauty, a potential deviation from the norm.

I guess the answer is that it does not matter! Because the old saying “Beauty is in the eye of the behold” is true! No matter at what time in the future, or the past, where ever this code is written, beauty is in the eye of the beholder. The code belonged there exactly as it was. It did not need any rescuing, nor any help. I can not make ugliness a crime, because beauty is not skin-deep. We should allow code to be different.

A Thoughtworker, Developer by choice, but with an age-old problem. He can make the artistic choices of patterns and models which embeds itself through the life of the code on the system. But like each of us, he has trouble chosing which road to travel, especially when that road winds deep into a territory from which there isn’t always a return.

If he takes one road over the other, there is no turning back.

The song remains unsung, a wish, unfulfilled. Even with the solution present, there is the chill of an eternal loss. For every choice made, wrong or right, a thousand alternatives will be denied. When tomorrow calls, sometimes the heart must be denied. For this Thoughtworker, there will be other tomorrows, other joys, and yet …fading …fading. For one trembling instant, he was given the opportunity to make choice between the path he will take, and the alternative future. Some snapshots remain forever undeveloped in the darkness of time.