Latam vs. India

Posted on May 27th, 2010 by Ricardo Farias

A few weeks ago I attended the webinar “Near-shoring in Latina America” organized by ThinkSolutions and the Outsourcing Institute. Although this webinar was targeted to US companies seeking to offshore, it was very interesting to participate as a services provider.

I was surprised, and so were the organizers, about the large number of people attending the event –a proof of how Latam is stepping forward to a major role in the global outsourcing industry. The webinar´s themes were about the outsourcing differences between Latam and India and what are the strengths of the region.

Here is a summary of the main points discussed that are worth mentioning:

First, as India is experiencing the new IT “gold-rush”, its average service price is rising. Second, English is taught as a second language in Latin-America. Third, the region is closer than India to the US market. Finally, Latam has lower turnover than India and it has a closer cultural affinity with the US.

These last two stand out as they represent the greater pain-points for an IT manager looking to offshore. The lower turnover means a more stable team for a smoother and timelier project; in fact Latam has 5% less turnover than India. Latam´s cultural affinity with the US plays a key role in the communication process between the two parties, lowering the risk of unwanted surprises. Moreover, Latam culture replaces the Indian “Yes to everything” to the “straight answers one.

Some of the other advantages of outsourcing to Latam discussed in the webinar are: good telecommunications infrastructure, high quality education system, similar time-zone with the US, presence of the leading technology providers like IBM and Microsoft, well trained developers and managers, who already have experience in important projects and finally the rising support of the local governments.

To sum up, many people in the US and other markets seem to be recognizing that Latam has unique competitive advantages, quality resources and the technical capability to seduce US business to work with local companies. The industry is growing fast, and there is no doubt about the arrival of the region as a major player in the global outsourcing scene.

Is decision making a key skill for software engineers?

Posted on April 16th, 2010 by Santiago Ceria

A few weeks ago I attended the 23rd annual software engineering education and training conference in Pittsburgh. One of the keynotes was given by Alistair Cockburn, one of the authors of the Agile Manifesto. His lecture was titled “Teaching the next generation software engineering”, and the slides he used can be found here: http://alistair.cockburn.us/Teaching+the+next+generation+software+engineering.pps. In his lecture, Mr. Cockburn explained that people can learn skills in three stages, following a Japanese martial arts concept: Shu – Learn one technique, Ha – collect techniques, and Ri – Invent / Blend techniques. Mary Shaw, who always has good questions that are hard to answer, was in the audience and seemed very interested in the subject. This time her hard question was: “How do you teach students how to choose between different techniques?”

I often say that the best software engineer is the one who knows many different tools, techniques, methods, and has the skills and judgment to choose among them. Now… the question is: how do you do that? This is like going to a restaurant. On a plane, the dinner decision “chicken or pasta” only takes a few seconds. In some Argentine restaurants the menus are up to 10 pages long, and it takes forever to make up your mind. Of course there are several standard decision making techniques that we can use as software engineers. But I’ve never seen that as a focus of our education or the skills that we need in our job. Maybe it’s time to review that. Also, we might need specialized decision making techniques. For example, the SEI has done a nice job by linking quality attributes to architectural decisions. We need more of that for other key decisions we have to make when we develop software, both for managerial and technical issues.

On the cruelty of trying to be a software engineer

Posted on April 8th, 2010 by Santiago Ceria

Last month I had the chance to go back to Carnegie Mellon, the place where I studied 17 years ago. It was a great experience to see how the place has changed and to meet again good old friends. I was given the chance to give an alum presentation that I decided to title “On the cruelty of really applying what you learn in the MSE (Masters of Software Engineering)”. The title was inspired on Dijkstra’s manuscript “On the cruelty of really teaching computer science”, which is very, very interesting, because it describes how sometimes we fail to recognize some things that are radical novelties as such. The problem in these cases, according to Dijkstra, is that we try to link the radical novelty to what we already know, the new to the old, and, according to him, these attempts are doomed, because what we know is “hopelessly inadequate”. I used this title because applying what I learned in that program is also cruel in some ways. First, because what you learn there is fundamental, so some things can’t be applied directly, second, because some things are novel, so they can’t be applied immediately, and third, because our field is too wide, so some things might not be useful to all students.
But there’s also the cruelty of trying to be a software engineer. Many say that software development is not an engineering discipline because it’s not mature enough. Dijkstra used to say that it’s a doomed discipline because it’s an attempt to apply something familiar (engineering) to a radical novelty. Others say that developing software is more an art than an engineering discipline. And traditional engineers, when you explain them that physics and chemistry are of little relevance for developing software say “if it doesn’t require physics or chemistry, then it’s not engineering”.
But let me get to Dijkstra’s argument, which is very interesting. How many times did we make mistakes in the past by trying to apply practices from other engineering disciplines that were not adequate for software? Is that the case of many things we tried to copy from manufacturing? Is that the root cause of the “waterfall mentality” that still persists in many places? I think that saying “All previous engineering knowledge is useless for developing software” is clearly wrong. But we should also be more careful when we try to use things from other disciplines. And this applies not only to people like me that want to inspire in traditional engineering, but also to people that claim that software is an art (I’m talking here about developing large software systems, not the “art of programming” that Knuth described so well).

Some of the problems I see in Agile Methods – Part 3

Posted on December 11th, 2009 by Santiago Ceria

A few days ago I was talking to a colleague and he told me “I’ve convinced my boss to start using Scrum”. “Great!”, I replied. But then he started to describe his situation and the problems he is having. And the main problem was that they still didn’t have a product backlog. And his question was “What do I do before I’m ready to do my first sprint?”.  This is not exactly the issue I would like to discuss, but it reminded me of another problem I see in agile methods, and it’s the idea that “all sprints are equal”.

Let’s analyze some differences between two iterative and incremental processes: Scrum and UP (or RUP). One significant difference is that UP has the notion of Iteration Phase, or Iteration Type. This means that not all iterations are equal. And this makes a lot of sense to me. Not all iterations are equal because when you start a software project there are many unknowns and things you have to analyze and think about. And when you are about to deploy a system to a production environment or release it to customers there are many other things you need to do that are different from what you do during construction. This doesn’t happen all the time, but it happens often. And then you start seeing agile teams that do “Stabilization Sprints”, or “Release Sprints”. I’m sure those are forbidden words for many agilists, but at least I was relieved to read a post by Mike Cohn about release sprints where he describes a Bank that manages a 13 million LOC core system that needs them. Believe me, they are not alone.

I think Agile methods should put more focus in these issues, which are very relevant in many projects. And give practical and specific advice on how to do all this while being agile. In other words, I don’t think minimizing the potential differences in sprints is a good idea.

So, in this case, the problem I see in Agile methods is not related to what they say, it’s to what they don’t say.

Google DevFest 09

Posted on November 25th, 2009 by admin

17th of November was a very cool day, i could enjoy the Google DevFest 2009 in Argentina and i will share you some exiting thinks from this event.

Some news about Google Apps

Google is working in a lot of new stuff, one of them is the improvement of the GEO API. The 3th version of Javascript API for Google Maps is growing up faster and its focused on speed browsing and will bring us some new cool feautres.

Read more »

Some of the problems I see in Agile Methods – Part 2

Posted on November 22nd, 2009 by Santiago Ceria

Another problem I see in some Agile Methods is a lack of flexibility about the rules they propose. I see that as some kind of contradiction: for example, Scrum is empirical only for things that it does not define beforehand.

“Don’t change Scrum” is something that Ken Schwaber wrote in his book Scrum and the Enterprise. Here’s his rationale for this: Scrum isn’t a process that you can modify to fit your enterprise. Instead, it exposes every dysfunction in your enterprise while you build products… Whenever people change Scrum, it’s because they’ve run into a problem, dysfunction, or conflict that they do not want to face and fix. Instead, they change Scrum so that the problem remains invisible and remains deadly to the enterprise. If you allow this to happen, you will have lost Scrum’s primary benefit”.

Read more »

Some of the problems I see in Agile Methods – Part 1

Posted on November 10th, 2009 by Santiago Ceria

First of all, I admit I do not consider myself an expert in Agile Methods. Yes… I’m a Certified Scrum Master and I’ve been involved in several agile projects. But let’s say I don’t know enough and have enough experience to consider myself an expert. Even with this, I will dare say which are the issues that I don’t see addressed correctly in these methods, or at least in the typical “Scrum + XP” combination that used in most cases in Industry. The risk here is that someone will quickly reply with a link to explain how these issues can be solved. Oh well… I’ll take that risk.

I also want to say in advance that in general I have a positive view on Agile methods. I think they are an interesting packaging of useful practices and that they have made a huge contribution to development practice in general. I also value some new practices like TDD and Continuous Integration that have provided smart answers to increasing challenges of software development.

Read more »

Is Semantic Web the Web 3.0? (I)

Posted on October 29th, 2009 by admin

semantic web

People have been talking about web semantic and web 3.0 and we need to understand that they are two very different thinks. The term of the semantic web is coined by Tim Berners-Lee and there is no full consensus about what Web 3.0 means.

We can say that Web 3.0 is defined as the creation of high-quality content and services produced by gifted individuals using Web 2.0 technology as an enabling platform. At its core, the semantic web comprises a set of design principles, collaborative working groups, and a variety of enabling technologies.

Read more »

Co-evolution – Brooks did it again

Posted on October 21st, 2009 by Santiago Ceria

In a previous post I commented about Fred Brooks’ great conference when he received the Turing Award. He named it “The Design of Design”. In that conference he spends a lot of time discussing life cycle models and explaining why the Waterfall model is wrong (“dead wrong” as he calls it). And he also presented what he thought was a better model: the co-evolutionary model, attributing it to Maher and Cross. In this model, from a Problem P1 you get a Solution S1. And from P1 and S1 you get a new problem, P2. And from P2 and S1 you get a new Solution, S2. This simple concept explains that the problem and the solution evolve in parallel. And it’s one of the good things that Agile Methods have adopted. If you use agile methods, your lifecycle model is not only iterative and incremental. It’s also co-evolutionary. Let me explain this better.

Read more »

Significant Design Up Front, When?

Posted on August 25th, 2009 by Santiago Ceria

So in my previous post I said that nowadays there are fewer cases when building models before building the actual code of an application makes sense. In which cases does it make sense? More explicitly, in which cases should we spend a significant amount of time creating architecture and design models before we run to code? Let’s ignore for a while safety critical applications and “for other reasons very critical applications”, the easy answer to the question (I know that more and more applications are becoming critical, but still I want to focus on the other ones, at least for this post). My question is equivalent to asking “when do we need significant design up front”?

Read more »