Scrum Observation

Shorter iterations work better when first starting with Scrum. You have less time to make mistakes!

My experiences with offshoring - Part 4

Getting to know each other

I wanted to be in India at the start of this project - I think it would have helped for me to get to know the new members of my team, and it would have helped them understand my expectations of them. As it so happens because of commitments here, I wasn’t able to go.

I introduced myself and our chief architect to the Indian team over Skype. They had already “met” us before, since we interviewed / tested them, and we spent half a day describing the product and its architecture to them. We ftp’d the databases over, gave them access to the source control server, and documentation on how to build the system on their development servers. We asked them download the code, build the project, point it to their local database and have it functional on their local computers by the time we logged on the next day.

Unintended consequence #1 - We found out the next day – our install documentation was incomplete and outdated and they were unable to complete this task. So Day 2, we helped them build the system, and made sure that our documentation was updated. For the remainder of the week, we brought in one local engineer on the team each day to meet them over Skype and explain a different area of the product to them. By the end of the week they had met the 3 engineers who worked on this product as well as the chief architect and me.

Version upgrades locally take a single iteration with 3 engineers working on it. Our normal process involves a planning poker session - there are some standard tasks which need to be implemented with each iteration (and by now we know exactly how long these take by now – we are on our 7th version upgrade). We also know how long a measure takes to port over to the next version with no changes, the only time unknown is where the specifications have changed and/or new measures have been added. I hand over the new specifications to the local team and ask them to estimate how long it will take and enter each task in team server. For this iteration I opt to hand tasks to the off shore team, with a time estimate of how long we think it should take (adding a % for the inevitable learning curve). The local team is also working on the project, implementing some of the more complicated measures that I wasn’t sure I wanted to hand over till I got a sense of how the off shore team performed. We handed over our version upgrade documentation, had a question and answer session, shifted our daily standup to 9.30am so as to be convenient to both teams.

The problems started as soon as the project did!!!

My experiences with offshoring - Part 3

The Project

What is the right project to start with, is a hard question to answer - how do you transfer knowledge half a world away? We write medical software, so the problem is compounded. We have to transfer domain knowledge, the American health care system is totally unfamiliar to the offshore team, and we have to transfer knowledge about our code base and our development processes.

I decided to start with an existing product. It submits clinical measure data to government agencies every quarter. The government agencies update the specifications every 3 months where they might change measure specifications, or add new measures. The advantage of starting here were

  • It was a working product.
  • The code base for the previous 6 versions was already written, so the offshore team would have a complete blue print to work from. Communication should be easier when you are not relying on verbal communication for everything – code is code in any language and has no accents.
  • The product had to be upgraded every 3 months, having done this for 6 quarters now, we had a documented process in place regarding version upgrades
  • The specifications published by the Joint Commission every quarter were detailed and set in stone.
  • The delivery date was also set in stone – we have 3 months to get the next version of this product to our client sites.

 

The team and the project now chosen, we are ready to start work. But how will teams who don’t know each other, don’t trust each other and don’t work the same hours communicate and collaborate?

My experiences with offshoring - Part 2

The Hiring Process

I picked a company in India that I was comfortable working with. I won’t go into details about this, but it had to be not too big (why would they be interested in us) and not too small (we didn’t want them to fold). We took into consideration their location in India, met their sales and technical staff, and got references. I didn’t pick the cheapest, rather picked the one where I was most comfortable with their CEO – he seemed to understand my requirements and needs, he had, as a young engineer worked in the US after he graduated from school.

Now to find the engineers, we were given the option of picking from the engineers they had on the bench or they would recruit for us. I didn’t mind either option, the only thing I was sure of was I was going to interview every engineer who worked for us. If I had stringent standards for hiring local engineers, why would I compromise my standards on offshore resources? It took some time for the Indian company to understand that I didn’t care about how “well qualified” the candidates was or how well they spoke English. I wanted engineers who were passionate about software and knew how to code. They weren’t going to client meetings; their interaction was going to be only with the local engineering team.

We followed exactly the same method of hiring offshore as we do here. We have a series of tests, where we ask a candidate to write code on 3-5 different areas highlighted in their resume. The candidate, who passes our test, gets the job. The success rate is low in both countries. It always surprises me when an engineer with a stellar resume, a few degrees, and a few more certifications is unable to write code to check if a string is a palindrome. I stopped looking for degrees and certifications years ago.

There are additional challenges conducting tests with employees in distant lands. The time difference – I would conduct interviews at 8am EST which is 6.30pm for India. I didn’t believe it was fair to conduct interviews later (most people don’t interview well at midnight), but that meant I could only schedule 1 interview a day. There are communication problems. Sometimes it has to do with accents, sometimes static over Skype and sometimes they don’t know what a palindrome is. I remind myself, we are looking for engineers not English majors.

Six weeks and twenty interviews later, I had my team. Three Engineers in a faraway land, who I had never met. The offshore team worked the “2nd shift” (1.30pm to 10pm IST) which was 4am to 12.00pm(EST). This was this was suggested by the offshore company we worked with, and something I communicated to every potential team member we interviewed. “This project requires you to work 1pm to 10pm – is this something you are comfortable with?”

Off to the next challenge – finding the right project to start this adventure.

My experiences with offshoring - Part 1

Software development is a team sport – one where 1 + 1 doesn’t equal 2, but maybe be 1.5 or 2.5 depending on how members of a team relate to each other. I’ve never been comfortable with remote teams - so, the idea of an offshore development team half the world away was an anathema. However, with an increased development load, and the unavailability of good engineers locally, (rant on lack of engineers being produced in the US will be the subject of another post), reluctantly with a great deal of trepidation, we decided to try to get resources offshore. Just for a trial 6 month period. I don’t like failing, and this effort seemed to have a higher risk of failure than I like to take.

My first decision, where to get my offshore resources? This for me was a relatively easy decision; I am Indian by birth as are a few of my local resources. Communication and Team building should be easier with an Indian offshore team. India however presents a huge challenge because of the ten and a half hour time difference, and might not have been my ultimate choice if so many members of the local team were not Indian.

Having made the decision to get offshore resources, and to go to India for them – the next challenge, how do I find my offshore team?

Intellectual Property Theft?

Looking through the OdeToCode weblogs for the past week, I noticed that we have been getting referrals to some articles from a site called SSWUG (SQL Server Wordwide Users Group). This is something I consider a good thing - we write articles for the developer community and feel good when other sites, blogs, newsgroups link to them. Out of curiosity however I browsed over to the SSWUG site to check them out and see in what context they were linking to our articles - http://www.sswug.com/see/19274 or http://www.sswug.org/see/19275

 

 It seems that SSWUG is a membership site. To view the OdeToCode articles, you need not only to register on their site, but need to pay a membership fee. Does anyone else think this is unethical?

 

To lift an article from another website, without informing us, let alone asking, put up a teaser abstract, but to ‘Read this article…’, I need to register and pay a membership!!!!!!  In this case Scott and I wrote these articles, and we choose to share them with the developer community – FREE. It’s our way of giving back, to this community.

 

It makes me wonder, how many o the 16556 Articles/Summary or 470 Scripts on this site have been “stolen“? How many other ‘reputable’ websites do this sort of thing? What is the difference between theft and what SSWUG is doing?

 

Interviews

 

Yesterday was interview day! We're looking for a junior developer, 1 or 2 years out of school, with a bit of experience / exposure to Microsoft Technologies. We use .NET, C# and SQL and I expect to have to train them some, (I'm not expecting a Chris Sells or Rory Byth to come walking through my door looking for a Jr. Developers job). A brief synopsis of my 3 candidates yesterday - all of them are CS graduates, and all have the required 1-2 years experience, and each one has spent the last year working in .NET (either VB or C#) and claims to be reasonably proficient in SQL.

 

Excerpts from the SQL Interview

 

Question : What's a clustered index?

Candidate 1 : A class what? Can you say that again?

Candidate 2 : Um….

Candidate 3 : Is that in SQL or in .NET?

 

Question : What's an index?

Candidate 1 : You put an index on a column like 'Customer Name' when you want to do a search on Customers. It makes the query run faster.

Me : Can you have more then 1 index on a table

C1  : I don’t think so but I'm not sure.

Candidate 2 : Um….

Candidate 3 : I don’t know, is that like a primary key?, that’s something you have to have on every table, but I haven't heard of indexes really.

Me : Didn’t you say you did a semester on Relational Databases in college?

C2  : Yes, but I'm pretty sure they didn’t cover indexes.

 

Question : Well you've been working with SQL Server for the past year, what did you do when queries performed badly?

Candidate 1 : Well we had one query which was slow, so we ran a batch job at night which aggregated the data and then ran the query on the aggregated data.

Candidate 2 : Our queries were fine, we never had a problem.

Candidate 3 : We had one query which was very inefficient, it was a directory list of all the employees. So we made Employee Name the Primary Key for our Employee Master instead of Employee Number.

 

A question on GROUP BY somehow got converted into an ORDER BY - I guess they both have 'BY' so that’s close enough. All three of them used embedded SQL in their code, and not stored procedures, on asking why, one said stored procedures were much harder to write, the other said he had a unrealistic deadline for the project and didn’t have the time to learn stored procedures and the third said his boss / mentor didn’t like them. There really was no point going any further with SQL, none of them knew what an index was.

 

Ok, I thought, so SQL wasn’t going well so, lets try programming languages. All of them had studied C++ and Java in college. Two worked on C# apps for the past year and one on a VB.Net app.

 

Question : What is the difference between a public, protected and private member in C#

Candidate 1 : A public member is accessible to everyone, a private within the class it belongs - I never used a protected one so I don’t know.

Candidate 2 : Um….

Candidate 3 : He knew it (thank god - I was ready to start crying)

 

Question : What's option explicit?

The VB candidate : You know I've seen it used in the application on which I was working and always wondered what it did. Can you tell me?

 

Question : So you've worked with both C# and C++, can you tell me some of the differences and if you like one over the other?

C# candidate 1 : I like C# more, its easier

 

Me : Why?

C1 : C++ does a lot of strange things, which C# doesn’t allow

Me : Could you elaborate?

C1 : Um - I read that some where

C# Candidate 2 : In C# I can drag and drop controls, in C++ I cant.

 

OK - no luck here either, So lets see what they know about ASP.NET or just ASP or just anything at all.

 

Question : So you've worked with ASP and ASP.NET, what are the differences, what you like or dislike about ASP.NET

Candidate 1 : Well its nice to separate the UI from the business logic so I like ASP.NET.

Me :(thinking - this is a reasonable answer - I don’t want to ask a follow-up question because he might blow it and I'd be very depressed)

Candidate 2 : Um…..

Candidate 3 : ASP.NET is nice, you can drag and drop everything, but its too big, it has too many libraries and no one can know all of them. I wish they had made it smaller.

 

 


Well it went on and on - by the end of the day I had a splitting headache and was truly depressed. Today, having had a day to reflect, I am angry as well.

What are universities teaching these days. I would have thought public, private, protected would be something covered in the first semester, probably first lecture of a c++ course. Even a databases 101 class should make at minimum a reference to indexes and what they are. Who are these people teaching and why are we allowing them to teach?

 

More disturbing, is these kids learnt nothing at their jobs either. They hadn't heard of Source Control, didn’t understand what I meant when asked about their CM processes, and the only testing they had heard of was unit testing - the application moved directly from their desktop into a production environment. Who are these people in charge of Software development and why are they in charge?

 

 

 

 

Why software developers have a bad reputation

 

Its tax time again, which means that I am once again struggling with  my various bank accounts, IRA's, 410k's. I expect to struggle with this, I'm no financial wizard and the tax laws were evidently written by people who were doped out of their collective minds. What I don’t expect to struggle with, is the downloading my accounts into MS-MONEY.

Believe me this has not been easy. Lets take American Express for example, I have an AMEX card, an IRA and I use their online bank. The card and brokerage account I can set up from within Money, the online bank requires me to log into my bank account and download a file which is subsequently imported in. In fact their online bank does not even exist in the list of Financial Institutions. Fidelity for some reason allows you to download their brokerage accounts into MS-Money or Quicken, but for some reason thinks you have no need to be able to download your 401K. My favorite however is Legg Mason. I couldn’t find any documentation on how to download my 401K into MS-Money but I did find this gem about Quicken on their FAQ

 

How do I set up and download my  account into Quicken?

Click on Section Guide called TRANSACTION HISTORY. Once there you will have an option to "Download Transaction History File" and by selecting that option you can download your selected range of 401(k) account transactions to wherever you want.

You need to download and save it as a text file. Then you can open it in Excel, set the column parameters and then upload it into Quicken.

Quicken has accepted Excel files in the past as some of us have used Quicken before and as far as we know it should still do so. However, their specs might have changed. We will try to locate a copy of Quicken and check on that further.

 

What strikes me as being truly sad, is how easy it to write this code. Not doing it, or providing this half-baked solution which may or may not work 'cos we're just too damn lazy to find out' shows not only total disregard for the user, but a lack of pride in your work, and a lack of professionalism.

 

And we wonder why software developers have a bad reputation.

The News

So today I decided I’d take a break from my normal routine of reading blogs, looking at code and such like. Thought I’d read the news instead, find out what was happening around me, get my finger on the pulse of the nation as it were. Based on todays experience I have decided to make reading the news a weekly feature - it is definately more entertaining and enlightening the what the mainstream media has been handing out namely Kobe Bryant Janet Jackson and Martha Stewart.

 

Lunch-time breast lifts?
Women can get lunch-time injections of Botox and various facial fillers, and now researchers in Sweden may have found a way to boost a woman's breast size during the lunch hour as well. In the near future, Rohrich says, injections of hyaluronic acid, a compound used to fill fine lines and wrinkles, could be used to do temporary breast enhancement. Peering into his crystal ball, Rohrich forecasted what else may be on the distant horizon, including grow-your-own breast implants. “We may one day make our own implants from our own fat where surgeons harvest fat via liposuction and stimulate it to grow," Rohrich says, "so it will be natural but to grow that amount of fat and grow it consistently may be years and years away."

http://www.msnbc.msn.com/id/3972625

 

Yellow Snow Leads To Arrest

Elko police arrested Roger Gray, 25, on the basis of yellow snow he left after relieving himself on the rooftop of a restaurant that had been burglarized. Investigators said the evidence produced enough DNA to link Gray to the scene.

http://apnews.excite.com/article/20040209/D80K1GIO0.html

 

American Airlines Pilot Suggests Passengers Discuss Christianity on Flight

An American Airlines pilot asked Christians on his flight to identify themselves and suggested the non-Christians discuss the faith with them, the airline said. The case was handed over to the airline's personnel department for an investigation, spokesman Tim Wagner said Sunday. "It falls along the lines of a personal level of sharing that may not be appropriate for one of our employees to do while on the job," he said earlier.

May not be appropriate????? I'm not sure whether the pilots remarks or the spokesmens were more inappropriate

 

Winning at any cost

 Three livestock exhibitors at last year's Ohio State Fair have been disqualified for allegedly outfitting their Holstein cows with hairpieces. State Fair inspectors said the three glued or painted hair from another part of the animal or from another animal to create straighter backs on the cows and enhance their appearance in the show ring.

 

The Bride Wore Black Because the Groom Was Dead

NICE, France (Reuters) - A 35-year-old French woman has married her boyfriend 18 months after he was killed in a car accident.  Christel Demichel, who wore black, was married Tuesday under a little-used law in the presence of friends and relatives at city hall in the southern city of Nice, local officials said. It would have been her husband Eric's 30th birthday.  "Eric and I promised when he was alive that we would get married," she told French television. "Even though he is dead, I respect the values I shared with him, especially as his death was not his fault."

http://story.news.yahoo.com/news?tmpl=story&cid=573&ncid=573&e=7&u=/nm/20040211/od_nm/marriage_dc

Christel - I don't think its normally a dead persons fault that he is dead.

 

It’s a dog’s world

ED FALLS, Ohio - Dogs in this Cleveland suburb have something to bark about. OLMST City Council unanimously approved a law Tuesday requiring doghouses to be waterproof and lined with bedding that resists dampness. The houses also must be equipped with self-closing doors or flaps.

Removed from the final law was a provision that required dog owners to bring their pets inside if the temperature dips below 20 degrees.

 

Men march demanding freedom to wear skirts

."We're not transvestites, homosexuals or cross-dressers," David Johnson told the New York Times for Sunday editions. "We don't want you to call us Jean or Sally. We're men - men who want the right to wear a skirt."

http://www.cnn.com/2004/US/Northeast/02/08/offbeat.men.skirts.ap

 

Football seats mark man's grave

Paul Wellener's family found the perfect marker for his grave: two blue plastic seats from the Three Rivers Stadium auction. Wellener, a lifelong football fan and a Pittsburgh Steelers season ticket holder for 42 years, died unexpectedly on March 16. Wellener's son, Paul, and widow, Mary Ann, bought three pairs of stadium seats for $2,100 at an auction — and knew they had found the perfect gravestone.

 

Man receives death notice from Pentagon

General Peter Schoomaker has a message for the bureaucrats at the Pentagon -- he's not dead.

His untimely passing was news to the Army chief of staff -- until his notice arrived at his home in Tampa, Florida. His demise was certainly a surprise to his wife. But there is a reasonable explanation. Schoomaker came out of retirement to take the top Army job. So when his name was dropped from the retired officers payroll, Pentagon accountants figured it was for the usual reason -- death.

This confirms what I have long suspected, no one in the army knows what anyone else in the army is doing

 

Intoxicated drivers take note: Don't ask your 10-year-old daughter to drive you home.
Angela Michelle Brown, 37, was charged Monday with child endangerment and driving under the influence of alcohol after authorities said she got drunk and used her 10-year-old daughter as a designated driver.

http://www.sun-sentinel.com/news/local/southflorida/sfl-210designateddriver,0,2704745.story

My vote for the stupidest person

 

Why does everyone think they can be a Microsoft Developer?

I work at a small startup – owned by a medical doctor who is also the CEO of the company. Leaving work one Friday evening, I noticed a book, ‘Learn SQL in a Weekend’ lying in his office. On Monday morning, he had evidently learnt enough SQL to let me know triggers were the answer to all our problems.

 

This got me thinking, why is it that everyone thinks they can be a developer. I don’t believe reading Gray’s Anatomy (abridged), qualifies me to give medical advice, or scanning through the Wall Street Journal is qualification enough to run a Fortune 500 company. Ok that might not be a great example – looking at the way some of them are run – I probably couldn’t do any worse – but I digress.

 

But getting back to the point – the perception seems to be, that writing software is not a profession, which requires intelligence, training or skill. Why is this?

 

The worst culprits are the authors of books with names like ‘Learn SQL in a weekend’, ‘C++ for dummies’ or ‘Learn C# in 21 days’. If you think you can learn SQL in a weekend, you shouldn’t be writing a book on SQL – you don’t know anything about it, and dummies cannot learn C++, they can become the president perhaps, but C++ requires basic intelligence. I don’t see a doctor writing a book about ‘Learn Brain Surgery in 21 days’ or a lawyer writing one called ‘Bar Exams for Dummies’. Doctors and lawyers and teachers and any other profession I can think of, will let you know how much work it took to acquire the skills they have.

 

A DBA I worked with in the past had obviously learnt SQL in a Weekend. We came close to losing our only client because he couldn’t differentiate a LEFT JOIN from a RIGHT JOIN or an INNER JOIN and for some reason felt a FULL OUTER JOIN would solve the problem. It took us 12 days to load data into the data mart we were building using his stored procedures. After we got our hands on his load script, we got it to load the data mart in under 6 hours. Why is it that any hack thinks its possible to be a MS-SQL DBA. I’ve never seen an accountant or school teacher or graphics designer one day decide to read ‘ORACLE in a weekend’ and become an ORACLE DBA.