If you've spent enough time programming software, chances are you've had quite a few "a-ha" moments where you realize your past efforts suck.
If you really like programming, you enjoy learning from those a-ha moments, and then spend a lot of time figuring out how to write better software.
After a while you'll start to realize that software development is hard, and it's tougher to become better if you're in the "wrong" environment. It's like trying to grow plants in barren land (not that I ever tried, but it sounds like it wouldn't have the best results).
In Mexico, I spent my share of time trying to become a better software developer. But I realized it was not the best environment. Even though I tried (and I did become better), the biggest thing that hindered my growth was indifference.
1. The developers didn't care
Some did, but most didn't. Since developers didn't care there was no one to look up to. In this types of environments, most of the time you'll be learning the right lessons on your own. This was also true for the community. I'm sure things are changing (I'm talking about 3 to 5 years ago). I also believe there are companies out there with outstanding development practices, but it's difficult to know about them all (especially if they don't foster this culture outside, with the community).
2. The clients didn't care
And because the clients didn't care, there was not enough money to fund our self growth. Once I had enough knowledge to say with confidence that there was a better way, and that it was much more valuable, a lot of my effort went towards convincing new clients of this. Changing their mind was not difficult, but the bigger problem I faced was convincing my own co-workers that it mattered. This is essential if we are going to build better software, because one person cannot carry the others if they just don't get it or don't care bad enough. I've come to the conclusion that a team of professionals can grow exponentially as long as there are no "bad apples" slowing them down.
Once I had enough of this indifference, I decided not to fight against the current for a change, and come to the US to work first-hand with one of the companies that I admire, and was mentoring me indirectly anyway through books, blog posts, conference talks, etc: 8th Light. This company has a very high regard for well crafted software, and the people who work here care deeply about their craft. We try to improve every day, help each other, and our work environment fosters learning and self growth.
Some things we do that I wish I was doing back in Mexico:
- Lead the industry by example
- Identify knowledge gaps between newcomers and seasoned developers
- Mentoring relationships between seasoned employees and newcomers
- Share our knowledge outside of the company– conference talks, attending and hosting meet ups, writing blog posts, etc.
- Identify developers who care, and support them to become better
- Encourage developers to expand their knowledge by attending conferences, having a "self-edification" budget to purchase books, online courses, or anything that helps us improve
While not every US company is like this, in my opinion there's a lot of lessons Mexico could learn from the general tech scene here. Leaders of the industry invite people over to their offices to talk about better software practices, or show the solution to hard engineering problems they faced. And they do it for free. Of course this is also a strategy to hire new talent, but anyone who wants to learn can attend these meet ups, and there's usually a lot of qualified people willing to help. This is a whole different culture that not until recently Mexico started to adopt. I may be wrong because there are many cities in Mexico and I can't speak for all of them. I'm from Monterrey which I think is a fair representation of other cities that are strong in tech, and I'm just talking about what I experienced there.
It surprises me that there are claims (like the article in this link) saying there's a lack of qualified professionals in the tech industry in Mexico. In my experience the reality is that there are not enough qualified tech companies in Mexico. I think there's a misunderstanding worth having a conversation over.
The tech leads of big Mexican companies need to improve their software practices, their own teams, and their hiring and training processes. With proper guidance it's not difficult, but first of all they need to care and take their share of ownership instead of laying the blame on universities or novice developers for "not knowing" what the company needs (which is likely outdated and so specific to that company that it would be useless elsewhere). On top of that, the compensation these companies offer doesn't even come close to what is offered in other countries for similar positions. I'm not saying that developers are perfect or that companies "should" pay more just because, my point is that software development does not have the same value in Mexico as in the US or other countries, and the reason, I believe is indifference. We can change that and show its real value by creating software of higher quality. But in order to achieve that we need developers and companies who care, and who are willing to make a joint effort instead of competing against each other for better compensation, or demanding long work hours, cranking out more features, faster, without actually backing them up economically.
The following statement will not apply to every company but it will apply to a great majority: until Mexican companies and developers recognize and experience the higher value of well crafted software, their products will not be top of the line, salaries will not be top of the line, and the general market offers will be mediocre (appealing to guess what kind of developers? the ones that don't care, and companies complain about).
If you're a software developer or tech lead of a company, and feel identified with some of what I described, please reach out to me. If you're serious about becoming better I'll do my best to help you out. I can at the very least recommend you some essential books that I really enjoyed and I know helped others. I'm also available twice a week for pair programming sessions.