Automation is not helping ship reliable Software quicker

Microsoft announced that their long overdue Vista will be delayed even further.

This annoyed a number of Microsoft employees, some who don’t work with Windows, some who don’t even work with Microsoft anymore (ex). But seriously, the effects are far-reaching. I am sure there was considerable thought put inot the decision.
Anyhow, one voice piped in that automation of tasks, including Quality Assurance wasn’t helping: (from Mini-MSFT)

In the last 18 months this org:

1) Cut the number of testers (several times) from approx 50 to now much less than a dozen. Of
course, many top performers also left MS entirely because of middle mgmt in this org.

2) Hired more PMs
3) Cut the scope of testing (anyone done any real code coverage testing lately?)

4) Cut the number of promotions in the test orgs – nothing like a little ‘de-incentivization’ to increase ‘bad attrition’

5) Dictate that everything can and should be automated.
(Ignore that eyeballs catch more in less time…) way to go Darren. Of
course, you
were probably lied to by your underlings, so it’s not entirely your
fault. Uhh, yes it is – you made the call.

6) Hire only a small handful of devs to write automation
code. Oh, and don’t forget to swamp them with added process and have
embittered leads review their code…

7) Hire more PMs

8) Outsource all testing to non-accountable and barely trained CSG firms
overseas (Ever try to translate/clarify a bug written not by a tester, but by their lead based on notes? )

Limit the number of heads
the abovementioned overseas firms can use. > Fewer testers, less
experienced, with little training, a much (ahem) ‘slower’ approach to
testing. Results: Client appcompat % hovering at <40% (GASP –
INTERNAL INFO… better moderate this one out!!!!)

an anomaly for PM’s to ‘splain away. If automation is such a great
tool, why is it not finding more bugs than a small handful of testers
in a lab on the other side of the planet?

Very Interesting observation. The largest software projects are
traditionally proving grounds for automation techniques. I wish the
authors of Windows Vista come out with a sequel to The Mythical Man-Month.

Updated: San Jose’s Mercury News also cites the same book and the Vista delay but in an altogether different context.

The challenge of big software projects was probably best
described by Frederick P. Brooks Jr. in his classic 1975 book, “The
Mythical Man-Month.” Brooks, a professor of computer science at the
University of North Carolina at Chapel Hill, stated then what he called
Brooks’ Law: “Adding manpower to a late software project makes it
later.” The need for latecomers to get up to speed and communicate
with their
predecessors, Brooks says, takes up more of the team’s time than what the added workers contribute.It’s even theoretically possible to reach a kind of software
gridlock, where the team is so big that all its time goes to
communicating among
each other and making revisions — with the project never reaching

GMail Feature Revision: We no longer want you to archive all your email

It looks like the Google’s Gmail team have revised their user guidance on deleting email. The delete action has now moved from the drop-down of possible user actions, to its own button over your view pane. In my opinion, the change signifies that GMail has stopped trying to educate users to archive all their email. Perhaps they found it was silly to keep those daily stock ticker notifications of their own stock wildly fluctuating, archived in their Inbox.

There is a lesson somewhere here for me. The lesson is not that you cannot educate your users into behaving differently; the lesson is – you have to give your users what they want! If they want to delete their old email, do not fight it by obscuring the delete button into a drop-down.

If your reading this and going “old news”, you have to forgive me for being so slow to catch on. I was trying out different locale’s on GMail and it seems the new web features were not available to me on English, UK. I thought it was a bit odd to tie the user selected Locale in with the actual regional deployment features (I might be wrong about this). I thought they would use my registered location (US) and give me the new features anyway. Then again, the new features just might not have been localized yet 🙂 a common problem with all web applications.

Related:  Just recently, Guy Kawasaki talked about trying to simply “Sell”, instead of trying to enable “Buying” – “The Art of Rainmaking“. I thought this was very related. I feel, in the long run, Google’s GMail will be remembered more than Hotmail will. They were the first to realise the potential of giving away very large Inbox’s to their users in return for the right to show them targeted ads. I thought that that was a very smart move on their part. At that time, other email providers were struggling to bring users on board with paid email models. Perhaps somewhere down the line GMail folks decided that they would convince their users to stop deleting messages, which would be very beneficial to them. The basic premise behind that thought is, the more email the user stores, the more precise the advertising. While GMail did find the market – they couldn’t stop users from deleting their messages, atleast I did not stop doing so. At this point its useful to quote directly from Guy’s website,

Many companies freak out when unintended customers buy their product. Many companies also freak out when intended customers buy their product but use it in unintended ways. Don’t be proud. Take the money. 

Lightweight Architecture

Original Article: “Google, Amazon, and Yahoo! point enterprise developers towards “lightweight” architecture” – Open Resource, InfoWorld.

Quite a few folks are beginnning to realize that most big websites, including Yahoo!, Google and, run on lightweight architecture. To define lightweight architecture, it is helpful to define its opposite:

Heavyweight architecture means you are running complicated infrastructure software like J2EE with complicated API’s on a small cluster of expensive SMP machines.

Lightweight architecture means you are running straightforward, usually open source, software stacks with service oriented API’s on large clusters of commodity machines.

Overall, the article does describe the industry trend correctly. I can’t think of a good reason why Google, Yahoo, or Amazon would want to transition to J2EE. Their architectures are cost-effective and scale well. But I beg to differ with Peter’s complex use of the word complicated. A Development team can complicate applications & API’s built on even the simplest of frameworks. It is not hard to see that. Also suspect is the use of the word ‘Heavyweight’.

If anyone from the J2EE community is reading this, would it be accurate to equate your site with a Hummer?

Peter Yared is also responsible for the alarmist piece in Business Week – “Java it’s so Nineties“.

Could the people out there who regularly rubbish Java (and other frameworks) publish anything close to a definitive study that either proves, or disproves the efficacy of one architecture over another? I would really like to see a piece that takes a complex web application and benchmarks the application of each possible framework in implementing it. Metrics must include not only developer productivity, must also talk about performance, scalability, power and ease of expression, adaptability, defect rates, time to fix, interoperability, code re-use, framework tools and other aspects.

It is so easy to mouth off.  Here is one side by side code comparision [“Ruby/Python/C++ Java comparision” – DMH2000] of popular frameworks.

Culture, programming and technology

The global nature of the Internet offers an interesting insight into cultures around the world. As an observer, you may want to focus on the positives or the negatives.

For example, the Tokyo Stock Exchange just suffered two embarassing glitches in their software and electronic systems (see “Tokyo Exchange Struggles with Snarls in Electronics” – New York Times).

An excerpt:

In a hastily called news conference late Sunday evening, the exchange’s president and chief executive, Takuo Tsurushima, admitted that a failure by the exchange’s computer system was also at fault. Previously, the exchange had squarely blamed Mizuho, saying that the brokerage had not only botched the trade order but also had made an error as it tried to stop the order.

But Mr. Tsurushima also made reference to a glitch on Nov. 1 that froze trading on the Tokyo Stock Exchange for all but 90 minutes of an entire day, an unusual and embarrassing mishap for one of the world’s top bourses.

“I feel a heavy responsibility for having caused turmoil in the market twice in such a short time,” Mr. Tsurushima told reporters. He said he might resign, a customary gesture in Japan to take responsibility.

So, the Japanese take responsibility very seriously, seriously enough to consider resigning their positions or taking a pay cut as punishment. Obviously, some engineer somewhere in the Fujitsu ranks made a mistake. His management were more than ready to take the blame. I need not add that the Japanese are highly regarded for the lowest error rates in their software.
I sense a widespread trend amongst many American technology employees to prop up Indian programmers in general for a dressing down.

Take these comments below (original story “Competing to work for Microsoft” – Slashdot). The original story is about the Microsoft programming competition in India. The winner gets to work with Bill himself.

Give me that guy’s code, and I’ll find at least a dozen things in it that are pretty much fireable offenses in any reasonably disciplined dev org. During my time at Microsoft (5+ years), I’ve known no less than 50 Indian SDEs (MSFT jargon for software developer). Only two of them could write what I’d call “good code”. One of these two was a freakin’ genius, but I digress. I don’t know if it’s cultural or not, but it seems that Indians are predisposed to writing horribly convoluted, unmaintainable cut&paste garbage (sorry, I can’t call _this_ “code”). For most of them, if it works _somehow_ means it’s good enough. If it were up to me, half of these folks (not just Indian, of course) would be gone and the rest would be scared of checking in atrocities they check in right now for others to rewrite later.

And the thing is, the culture at MSFT is such that you can’t just email into dev team alias and say “this is crap, and this needs to be rewritten”. You’d “hurt people’s feelings”, which will affect your yearly review, pushing it towards (or below) 3.5 grade, for which you get bonus and stock grant that may or may not cover the cost of living. So folks just shut up and suffer.

BTW, this is not a racist or anti-outsourcing rant. Test folks in China did (and no doubt still do) a stellar job. I’m just puzzled that Indians fuck up so badly time after time. If you guys are reading this, you’ve got to realize that sooner or later it will become clear to the higher ups that company money is better spent in China, despite pretty shitty English that Chinese folks speak.

How is this not a rant against Indian programmers in general, or not racist in nature? When did dev orgs start firing people they hired for the code they write? The comment promotes the assertion that if your Indian, and your a programmer, you probably suck at programming. But isn’t the real issue the culture at the authors company that does not promote self-improvement? Is it not a problem that Microsoft is hiring people who can’t write code in the first place? At least give them an opportunity to improve? No, of course not, the author intends to conclude that the programmers country of origin is an issue here. Does it piss me off to see that Slashdot condones such a narrow, misdirected view? Yes, it does.

Someone followed with comments that came closer to appropriating the blame:

I totally agree with you but I think your aim is a bit off. I do not see the engineers from India as competitors. I see it as my managers just gives my job away to anyone they feel like. If my manager does not value my competence there is nothing I can do about it.

The company I work for outsource projects to Wipro and TCS. The thing that is strange is that any person they send is automatically accepted as an engineer without any tests or screening what so ever. Ofcourse this is now being abused and I am now seeing 24 year old graduates arriving into mission critical projects.

The problem is that management is seeing software development as hard as digging a ditch. You just give anyone (preferebly the cheapest one) a shovel and off he/she go. The thing that is most funny is that in the company I work for it is all based on a lie. My manager plus a senior manager I spoke to 2 days ago claims that I cost 4 times as much as a resource from India. This is not true. What they are comparing is my funny money internal cost with the real fee from Wipro or TCS. What I really cost is 1.5 times. (+ the cost for my office) Of the cost for my salary the Swedish government is taking 55% and when ever I buy something I pay around 25% sales tax. (Food is 12.5% and taxi/bus is 6%) so in the end I might earn LESS than my Indian counterpart.

I want to finish off my rant with a quote from a management book, Object Technology – A Manager’s Guide. Page 11. I think this quote explaines quite well managements view on us software developers. “For most business people, polymorphism is so obvious that they have a hard time seeing what is so special about it”

He is right to a certain degree – the process of outsourcing to India should not worry the good Engineers in the U.S. In the majority of shops in India, mismanagement (in outsourcing shops) is possibly the rule rather than the exception. New Engineers are often inducted without sufficient training. However, I will also point out – don’t be so condescending as to dismiss all Indian Engineers as incompetent. The ranks of the smartest at Microsoft are replete with Engineers from India. People of Indian origin, or with education from India count themselves amongst eminent scientists and businessmen in the technology area. They have worked hard to get there.
I promise you, the code written by this guy who will win this Microsoft competition will blow your socks off. Next time you see some junior developer write poor code – don’t blame his country of origin. Criticise him, give him an opportunity to improve, display some maturity in thought!

Java applications: Performance tuning tools

Pet Peeve. On having reached Code Complete, I get around to experimenting with performance optimizations for my application(s). I came around to Java a while ago (circa 2000 from the “C” camp). The “C” developer community has a plethora of professional tools available under various licenses. The set of free tools for “C” are enough to get by on, some even provide additional value. In contrast, looking for Java performance tools has always been frustrating. I have trouble finding even the most basic tools I can use, tools that will give me some insight into whats going on under the hood of my application.

Looking for the profiler. In the past I have used JMechanic with Eclipse. I personally thought it was a very simple plugin to use. It got the job done. The plugin was unable to provide timing statistics but it was able to provide a good heap analysis. Unfortunately, JMechanic was abandoned when Hyades (now known as TPTP) for Eclipse came around. Before trying Hyades, I tried a bunch of profilers. None worked out as intended – they either did not work, or fell short of what is expected.

Act 2: There are no free lunches. Main characters are, Santosh, an intermediate developer as far as Java is concerned. Sarinder, a wisened veteran 😉 of professional java programming.

Santosh: Damn, this memory profiler will list the objects created, but won’t filter them by namespace.Sarinder: Which profiler are you using?

Santosh: This free plugin for eclipse.

Sarinder : Ahh, see that’s your problem right there. It’s free.

First attempt. My current Eclipse install was originally based on Eclipse 3.1M3. Somewhere down the line, I upgraded it to Eclipse 3.1 final release. Why is this relevant? It seems the upgrade had everything to do with what was to come next. Before installing TPTP I walked through their installation guide, downloaded and installed all the pre-requisites for TPTP. Unfortunately, I did not get very far. “Unable to create part: Profiling Monitor”. So frustrating, the message was not even helpful from any possible perspective. I guess thats what happens when you don’t pay attention to exceptional circumstances (see “Grouchy Code”). Wait a minute, I just found another installation guide on the Eclipse home site. It appears I may have missed a few components. Which would mean that the original TPTP documentation isn’t complete. So I go ahead and install the missing components. That doesn’t help either and I am still stuck with the lame error message.
My question is, how do I debug the problem with TPTP in Eclipse and understand where it failed?

Cleaning house. On Day 2, I decided I had to blow away my current Eclipse install and make a fresh attempt at installing Eclipse TPTP features. :P. I hate to do this. But it worked, arggghhh :-). I am no officially in the “try it, see if it fails or works” club that Steve McConnell warns about :-). I now have TPTP working and if I can get anything useful out of it, I will definitely write about it as a matter of record.

The Java Performance Tuning Page.
The Java Manageability Page.
Grouchy Code.
Installing Hyades.

Java applications: Get supported Locale

For web application developers, internationalization of the application is an absolute neccesity. The user should be able to select a locale that suits him from a supported set of locales. What locale is appropriate when the locale has not already been selected? One solution is to fall back on a default locale, provided it is supported by the users browser.

I found a small, useful snippet of code on The application checks to see if it can match up any of the locales supported by the Browser to the locales that it can support. For those unfamiliar with Java, understanding the underlying concepts is easy. These concepts are really language-independent and are good to know if your interested in web services. For intermediate level web developers, this is probably a concept encountered and learnt often.

The key idea is a simple one. Java Locales are a combination of language and country. While there exist different locales for “English, US” and “English, UK”; a web application will often support just the English language in an answer to both locales. However, Browsers will explicitly list “English, US” (or UK as the case may be). A strict match between “English”, and “English, US” will fail (see Locale.equals()). Instead, applications must treat the supported language – “English”, as a wildcard, matching it with “English, US”, when appropriate.

Be wary of the pitfalls in this approach. You can get away with showing “English, US” to users from UK. You might now get away with showing a page rendered in “Chinese, PRC” to users from Taiwan. I’m not sure if this example is the best one, but it illustrates the problem. To summarise, the application may be written treat the supported locale “English” as a wildcard. On the other hand, when explicitly told to support “English, US” it should resort to strict matching of locales to locales supported by the browser.

You can also enhance the scheme by matching Brand’s default locale before looking at other locales.


Programming in Java: Suggestions to Sun

Came across this post. Glad to have found another blog that will talk about Java. I was a little surprised to read that people still prefer to avoid IDE’s. For a couple of years now, Industry has been pushing Dev’s to embrace IDE’s. But it’s true. Folks will still prefer to use Vi, Emacs, and maybe even Notepad (shudder) as they start out in Java.

Here are a few topics that I thought were interesting that came up: