Saturday, May 12, 2007
How Indian Outsourcing Firms encourage Bad Software Development Practices
Here are several thoughts on how Indian outsourcing firms encourage CMM Level Five repeatably bad software development practices...
| | View blog reactions- We should strive make it easy for developers by having them merely translate design documents into code. This of course implies that the entire software development lifecycle results in one-to-one translations and simply ignores any gaps that will arise. Should enterprises ask themselves whether the end-product benefits if a developer understands just a little bit about what comes before and after their process or should they simply focus on their task at hand?
- It is crucial for all designs to be clearly documented. After all, how can Americans throw it over the wall and lets folks in India do their wonderfully successful translation? It is important to avoid any notion of a face-to-face conversation and even a phone-to-phone conversation with developers in India and instead declare a BEST PRACTICE to put liasons in the middle.
- Security should continue to be an after-thought. Don't expect your outsourcing firm to write secure code, instead allow them to develop "services" around this in the form of one-time audits, so that they can charge you more for all the code they wrote. Ignore the fact that less than 0.1% of their developers have the proper security tools on their desktops to get it right the first time.
- Allow outsourcing firms to also provide review services. While you are at it, let them conduct all design and code reviews without your own employees having the ability to participate. After all, it is in their best interest especially in fixed bid situations to give you the absolute highest quality code even if it requires them to take a lot longer on their own nickel.
- Focus on CMM so as to avoid learning about Agile Software Development principles. It is vital that outsourcing firms keep their clients 100% away from the Agile Manifesto as we wouldn't want anything that could possibly increase developer productivity which of course would reduce the amount of folks needed to develop high-quality working software. After all, we have hundreds of thousands of folks to employ and our strategy of simply charging lower rates and using more heads would fall apart.
- Find the slickest bullshitter to be the client interface and always give wonderful glowing status reports. In fact, make sure that IT executives choose not only folks whom you will interface with that haven't read the Agile Manifesto, also make sure that they are non-technical. If you don't, this person may think that working software is more important than comprehensive documentation and discover how far behind the project really is. For outsourcing to succeed, one must understand that software is not the primary measure of progress, but whatever is communicated in a slickly written status report is. Besides, the business customer doesn't really need that system to work, they only need to feel good about themselves
- The customer should always clearly articulate requirements. Our mantra of caring all about quality is the savage believe that quality equals serving the customer. If the customer asks for something braindead, we will throw our most braindead staff at the problem and give it to them with passion. If the customer didn't ask for loose coupling, a user interface that is in English or even code that compiles then it isn't important to them.
- Nothing is more important than repeatability. All processes must be 100% repeatable by any individual. In fact, you could take our processes and put them against any domain. We can even take an overweight idiot Enterprise Architect and turn him into a horse jockey. We can also take 100 LB 5'2" Indian guy and make him the Center on an NFL football team.
- Convince your clients to not think of software in the form of the building trades and instead talk to them about assembly line. We have hundreds of thousands of robots in India on our assembly lines where if we give they a certain input, we will produce a certain output. Don't however let the client conclude that garbage-in equals garbage-out as they may realize that outsourcing produces a lot of manure...