November 22, 2008 at 11:38 am
· Filed under New Blog
I’ve finally changed my blog from carrying the Thoughtworksuk inital to a more general kashanuk. The blog is now going to continue at: http://kashanuk.wordpress.com/
It has some new and cool posts about job hunting, generalising language experience, reporting and scope changes, as well as what a Microsoft Shop is.
Permalink
September 8, 2008 at 3:24 pm
· Filed under Coding Practices ·Tagged java, errors, logging, coding practice
In a recent chat iwth Daniel Bodart, I realised that after programming Java over the past few years, it offers programming an open option of handling bugs. Handling errors needs great care and scrutiny and care. When writing error handling code one has to decide – do you really want to handle the code?
It’s not too uncommon to encounter a code which logs every single error (e.g. user did not enter his telephone number in the online form) into a log file. This results in a horribly long, few gigs of error log file daily depending on site usage. Then looking through that file is like finding needle in a haystack, unless the large log file in itself does not cause issues serious enough (system hangs, time consuming to search).
The idea here is to either handle an error as it is if possible to handle it, otherwise should we let the system crash on errors we don’t know how to handle giving the user a negative experience.
If we had 10,000,000 users signing up for a £20 service. The system does not work for 0.05% of them which results in 5,000 users having issues resulting in £100,000 direct loss of potential revenue. It also depends on how fast the technicians are in catching the error, thus if we catching it after 1,000,000 users used the system, the direct loss of potential revenue will be reduced by a 10th to £10,000, all the while causing no issues that the remaining users that might have had the same problem. But any potential loss is hit on the revenue and needs to be balanced out.
Permalink
August 29, 2008 at 4:33 pm
· Filed under Design ·Tagged Design, intuition, mingle, mql, Thoughtworks, thoughworks studios
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.
Permalink
August 20, 2008 at 9:32 am
· Filed under Food ·Tagged coding food, coding snacks, Food, programming food
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).

http://www.gourmetindia.com/img/achar.jpg
Permalink
August 18, 2008 at 2:27 pm
· Filed under Comparative ·Tagged c#, java
This is what I understand about the Java Vs C# conflict from the open source perspective:
We have come a long way since The Semicolon Wars
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 the whole 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 refugees but 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!
Permalink
August 18, 2008 at 2:25 pm
· Filed under Non-technical ·Tagged Musharraf, Pakistan
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!
Permalink
August 15, 2008 at 2:23 pm
· Filed under Coding Practices ·Tagged Programming methods, variables
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.
Permalink
August 11, 2008 at 11:03 am
· Filed under Learning, pair programming ·Tagged acquiring, Learning, technical skills
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.
Permalink
August 8, 2008 at 11:12 am
· Filed under pair programming ·Tagged Agile, coding, pair programming, software
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.
Permalink
August 6, 2008 at 9:48 am
· Filed under Meetings ·Tagged Meetings, Money off your back, problem solving, Thoughtworks
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.
Permalink
Older Posts »