Category Archives: People


Knowledge adds certainty to our doing things right and doing the right things.   We are knowledge workers after all,  so we should strive to become really good at learning and how it can make us more knowledgeable. 

Learning is the information economy’s production function.  Unlike the capital or land intensive production functions of other economies, this one requires primary inputs of data and information along with a healthy dose of human motivation, curiosity and time.  People learn by doing, reading, writing, listening and observing.  And as Drucker suggested, we should know which works best for us. 

When we learn, we apply our existing knowledge to extract relevance and purpose from data.  Data are just facts about things and our knowledge helps assemble these facts in a way that helps us know more.

Machine learning works in much the same way.  In supervised machine learning, a data scientist uses her domain-specific knowledge to extract a set of features from tons of data representing an observed phenomenon.  Each row of features is associated to a desired output and an algorithm generates a model to optimally map the two.   The model is then capable of predicting the output value for a new row of features.  The more  rows come in, the more this new data can be used to retrain the model to make it more accurate.  More accuracy means knowledge is gained and the model has learned. 

AI 3.0

AI, Machine Learning (ML) and Deep Learning (DL) are all the hype these days, and for good reason. By now we know progress in AI accelerated over the past decade thanks to a convergence of factors including Big Data and compute power. And results are impressive as a recent Economist article highlights:

In February 2015 DeepMind published a paper in Nature describing a reinforcement-learning system capable of learning to play 49 classic Atari video games, using just the on-screen pixels and the game score as inputs, with its output connected to a virtual controller. The system learned to play them all from scratch and achieved human-level performance or better in 29 of them.

Over the next two years, many businesses will continue ramping up their ML/DL initiatives with the hope of improving every aspect of their business performance. These companies will follow a path similar to Major League Baseball’s pursuit of sabermetrics, or Wall Street’s appetite for algorithmic trading.

I think at some point in 2018, the latest wave of AI hype will peak and begin receding thereafter. Ongoing issues with model accuracy, as well as high costs required to operate less-than-stellar model performance will be two of the primary reasons behind this. I also believe decision-makers will feel increasingly vulnerable as AI effectively detaches them from understanding and refining the theories underlying their business performance.

This will usher in a new period of enlightenment  where companies adjust their be-all-end-all expectations of AI in favor of empowering their people to effectively coexist with AI.  This will be good news for workers too as Tyler Cowen suggests in Average is Over:

As intelligent-analysis machines become more powerful and more commonplace, the most obvious and direct beneficiaries will be the humans who are adept at working with computers and with related devices for communications and information processing. If a laborer can augment the value of a major tech improvement by even a small bit, she will likely earn well. This imbalance in technological growth will have some surprising implications. The key questions will be: Are you good at working with intelligent machines or not? If the answer is yes, then your wage and labor market prospects are likely to be cheery. If the answer is no, but you have an unusual ability to spot, recruit, and direct those who work well with computers, then the contemporary world will make you rich.

A short lesson on data

You can do a lot of things on the Internet but whatever you do requires data.  The Internet has a lot of data.  Some say roughly 1,000,000,000,000,000,000,000,000 GB of data are available but no one really knows the exact amount.

GB is short for gigabytes, or one billion bytes.  We measure the size of data in bytes.  One byte is equivalent to eight bits.  You generally need between one and four of these bytes to represent a single letter in the alphabet, or twenty of them for the average English word.

Data needs to be stored and retrieved.  Hard drives were designed for exactly this purpose.  Twenty years ago it cost $259 to store one GB of data on a hard drive. Today it costs just a few pennies even if people prefer storing their data directly on the Internet.  This serves them well considering their phones and tablets don’t even have traditional hard drives.

Data needs to be uploaded and downloaded on the Internet.  And this requires a network connection that moves data to and from a computer and the Internet. Five years from now the average Internet user will be transfering 37GB a year through their internet connections.

Data can be stolen.  Before the Internet, a thief needed to be physically close to a computer in order to steal the data stored on its hard drive.  After computers started connecting to the Internet, thieves could now steel data from anywhere in the world.

You’re probably wondering why someone would steal another person’s data. A person steals another person’s data in order to hurt them.   Data is simply a recording of all the things people think and do in their lives.  Many times what a person thinks or does should remain private or should only be shared with a very small group of trusted people. This is our basic right but when a person steals our data they violate this right.   Sometimes the people we know and want to share our data with also violate our privacy when they accidentally make it available to someone else. 

Data also helps us make better decisions.   You are probably wondering “I make good decisions without needing data from the Internet,” and this is correct.  You rely on your judgement and intuition to make good decisions and this is how it should be.   With data however, you have a way of learning more about the facts that describe, explain or even predict a problem you are facing. When you take this data and apply some fancy math to it, you have a powerful new tool to help you answer tough questions.    And this is why the Internet is so powerful, it not only contains a lot of data (remember all the bytes I mentioned earlier), but it has the fancy math tools that help people make better decisions.

I know you are probably wondering, “If the Internet helps people make  decisions, can it also decide for itself?”  This is a great question, and makes for a great story another day. 

The lesson here is that data is very important in our lives and this will only increase as you grow older.  Learn to protect your data so it can only be seen by those people you trust.   Always rely on your judgement and intuition to make good decisions and learn how to use data to make better and more informed decisions. 

(for my two young daughters)

Tagged ,


Simple is that ‘horse that left the barn’ but remains in your line of sight.  Chase her down and the problem is solved.  Apply best practices in horse management to ensure it doesn’t happen again.

Complicated is trickier.  It’s that feeling of being ‘caught between a rock and a hard place.’  You’re aware of being unaware of how to get out. Nevertheless, you are confident that good survival practices will help navigate you out of this mess soon enough.

Complexity grows each second you ‘grab the bull by the horns.’  Your best bet is to try things, getting a sense for what works and repeat. If you succeed in taming the wild beast, remember to reflect on your experience, teasing out useful knowledge that will help you repeat this success in the future.


We hear these idioms everyday because we encounter these types of problems everyday. Understanding the category of problem we are solving is the first step towards effectively solving it.

The really interesting part is to get better at ordering complex problems, thereby diminishing their complexity, or increasing the order of complicated ones so they become simpler.



A thought hit me the other day which I will briefly share with you in this post.  Read through today’s popular management journals and magazines and you’ll find numerous references to culture and its unique ability to influence quality of work and organizational performance.  Take for instance  Clayton Christensen’s brilliant portrayal in the widely popular article “How will you measure your life?“:

 “Culture, in compelling but unspoken ways, dictates the proven, acceptable methods by which members of the group address recurrent problems. And culture defines the priority given to different types of problems.   It can be a powerful management tool.​”

What hasn’t been clear, at least to me, are the characteristics of culture in achieving this influence.

If you agree with Clayton –  that culture is a mechanism by which individuals prioritize and select ways to tackle recurring problems, then consider that this mechanism is inherently instinctive, not unlike the seemingly innate behaviors that characterize an individual’s unique talents.   So while culture and talent are conceptually different (e.g. the former underpinned by values, the latter by genetics), they both appear to promote instinctive and recurrent behaviors.  It is these same behaviors that can have a huge influence (i.e. positive or negative) on quality and performance.[1]

*** Notes ***

[1] In their book, First Break All the Rules, Marcus Buckingham and Curt Coffman suggest that a focus on talent offers the advantages of a strengths-based hiring approach.  One of these advantages is employee engagement, and as Tom Rath, Author of StrengthsFinder 2.0, points out, “People who have the opportunity to focus on their strengths every day are six times as likely to be engaged in their jobs and more than three times as likely to report having and excellent quality life in general”.

Tagged , , ,

People Narrative

Do you remember when Java’s promise for platform independence opened new frontiers in architectural planning? Or when Extreme Programming gave new life to an audience disillusioned by the Waterfall model?  It seems like only yesterday when these two carried the distinction of  “next great thing”.   A distinction that influences the collective conscience of software professionals, not to mention the effect it  has on the software development ecosystem.  In 1999 we witnessed Windows ME, Outlook 2000, RUP, DCOM, MySQL, personal homepages, and XML vying for this distinction.  Ten years later we find Chrome OS, Google Wave, Agile, REST, NoSQL, Twitter, and JSON picking up the fight.

Programmers and startups have also found themselves vying to become the next Bill Gates, or creating the next Google, but rarely do we sufficiently understand the personal characteristics that inspire such distinction.  For example, we know the benefits behind Agile’s iterative approach,  or model-view controller in Ruby on Rails, but do we agree on the interpersonal traits required for a high-performing individual?  In a world where software development processes, and technologies continue their trend towards commoditization, it is the ability to answer this question, and others like, that will differentiate organizations in the marketplace.

People Narrative is a look at the traits that distinguish talented people in the software development lifecycle.  A comprehensive panorama of such traits can serve as a useful reference for programmers, project managers or executives to better understand, select, and improve the people in their own software development teams.


What talents come to mind when you think of the programmers you’ve worked with?   Was it their strong ambition, power of persuasion, or their ‘seeing eye’ intuition that set them apart?   Or maybe it was their relentless attention to detail coupled with an insatiable curiosity that drove their success.   Like them, you also possess innate abilities that uniquely (un)qualify you for certain types of work. Your ability to perform at a high level will largely depend on how well the unique talents you possess align with the needs of the job.

Still too many companies don’t understand this. They write job postings emphasizing a particular skill or body of knowledge yet neglect to mention specific talents required by the job. As Marcus Buckingham and Curt Coffman so eloquently state in their book, First, Break All the Rules, it is critical for companies to understand that the equation of competence includes the set of talents, skills and knowledge an individual possesses.   The key differentiator between these three is that you cannot teach talent.  For example, I’m willing to bet that an innate attention to detail was a major contributor to the performance of the last superstar programmer you worked with, or that good listening skills contributed to the excellent communication in your current team, but only a healthy dose of empathy has helped you fully understand them (i.e. Peter Drucker’s “the most important thing in communication is hearing what isn’t said”).

The performance of your software development teams will primarily depend on the individual and collective talents that characterize them.    I’ve included a comprehensive list of these talents in Table 1.







































Table 1. Panorama of Individual Talents


To better understand this list, I’ll need to categorize.  In their book,  Buckingham and Coffman offer striving, thinking and relating as three possibilities.  Using this scheme, striving talents such as  determination explain the ‘why’ we perform, thinking talents such as a superior analytical ability explain ‘how’ we perform, and finally relating talents such as charisma explain for ‘whom’ we best perform.

The Theory of  Multiple Intelligences, proposed by Howard  Gardner, and more specifically the categories of intelligence he defines, offers an alternative classification.   Howard suggests eight different types of intelligence including:

  • Bodily-kinesthetic
  • Interpersonal* (i.e. social intelligence)
  • Verbal-linguistic*
  • Logical-mathematical*
  • Intrapersonal* (i.e. emotional intelligence)
  • Visual-spatial*
  • Musical
  • Naturalistic

I’d like to assume that the distinguishing talents of high-performing software development teams span those intelligences marked with an asterisk.   More important is the understanding that successful individuals and teams possess talents not typically understood or revered by hiring organizations or educational institutions.  For example, standardized intelligence tests that limit themselves to measuring logical-mathematical and verbal-linguistic abilities.


In software development terms, think of effectiveness as the runtime engine.  When the code is syntactically correct, it can be executed.  Every programmer can admit to an overwhelming sense of motivation that comes with seeing their code execute flawlessly. But without this runtime engine, even the most beautiful piece of code is rendered functionally useless.

Similarly in people, maximizing effectiveness requires a thorough understanding of their competence so that productive work can be assigned to the right individual.   While it may be straightforward to assign programming work to an individual who stands out for his knowledge of Java, it may not be so straightforward to conclude that the work of a leader should be assigned to an individual with a talent for empathy.   When the full spectrum of an individual’s competence is required for the work at hand, the individual’s motivation will grow, and she will be satisfied in her job.  There has been strong emphasis on aligning business and IT over the years, and it’s time we also realize the impact of (im)properly aligning a person’s competence with their work.

Lacking a thorough understanding of an individual’s competence is a recipe for their ineffectiveness.  Peter Drucker taught us that the job of the knowledge worker is to be effective (and similarly stay motivated) while also reminding us that:

“…people of high effectiveness are conspicuous by their absence in knowledge jobs. High intelligence is common enough amongst knowledge workers. Imagination is far from rare. The level of knowledge tends to be high. But there seems to be little correlation between a man’s effectiveness and his intelligence, his imagination, or his knowledge. Brilliant men are often strikingly ineffectual; they fail to realize that the brilliant insight is not by itself achievement.”

Perhaps he referred to the limited definition of intelligence and brilliance, which is to say, achievement requires the broader set of intelligences usually found in more than one person alone.   Our teams should be formed on this basis and as Marcus Buckingham and Curt Coffman stated, the job of a manager is to convert these combined talents into performance.

3 Stages for High-Performance Teams

Figure 1.  High-Performance Teams


Diana Larsen’s presentation on Trust taught us that an individual’s competence (i.e. talent, skill, knowledge) is a major component towards growing professional trust  (See Figure 1).  A sufficient level of trust must exist in order for a self-organizing team to maximize their individual and collective effectiveness.   It will serve as the foundation for the team’s understanding of each individual’s competence, of how best to organize, as well as maximizing their ability to execute.


It should be clear that before we can preach the benefits of Agile software development, or evangelize the next great programming language, for example, we need to understand the talents of people, because it is these talents, and our ability to identify and nurture them, that will primarily influence the foundation for individual and team trust, effectiveness, motivation and overall performance.

Tagged , ,

Sergio Bogazzi

Describe your first computer program.
The first I remember was a tic-tac-toe Java applet back in the summer of 1995. My good friend John and I purchased O’Reilly’s ‘Java in a Nutshell’ book in March of that year. I voraciously read and tried the book’s examples all during a time when Java was still looked at as a revolutionary technology for delivery software applets over the internet. I remember the excitement as the tic-tac-toe squares lighted up at an increasing pace. This all in my Netscape browser!

Which programmers influenced you the most during this period and why?
My friend John for sure as well as many of the pioneers I discovered reading Programmer’s at Work.

How would you summarize your early professional years?
I started working at the height of the first dotcom bubble which gave me and other young twenty-somethings much more credit than we deserved.   My young age coupled with my lack of experience was, in reality, a forte in the eyes of hiring managers looking to ride the internet bandwagon themselves.  Knowing it was a unique period, I sought as much responsibility and diversity as I could.

What attracted you to the people and process aspects of software development?
I struggled to build software for the sake of building software.  While i didn’t know it early in my career, I came to discover that I was almost single handedly motivated by user needs.  I also realized that much of what hampered the quality of the software products I was involved with had very little to do with the technology being used but instead had a lot to do with the development practices that weren’t being followed or the poor hiring decisions that were jeopardizing team effectiveness.    During graduate school, I turned my interests away from strictly technology and more towards understanding the requirements elicitation process. I came to realize that identifying and building for the right user needs was the single most important step in the software development process.

What are the core values and principles you’ve acquired during your career?
Trust your team.
Continuously improve your skills and knowledge.
Know your talents.
Know the difference between efficiency and effectiveness.
Remember that your first day of work dates back to your job interview.
Be religiously unselfish.
Avoid burn out.
Be unambiguous.
Write Things Down.
Always learn ‘something else’ from what your doing.
Leadership by example.

How do you stay productive?
Agile methodologies, my moleskine, innate discipline, a computer.

How do you see the software industry evolving over the next 5 years?
I’m still trying to catch up from all the changes in the previous 5 years. Big data, real-time social media, dynamic languages, nosql, mapreduce, HTML5, git, Ruby on Rails, Behavior-driven development, 32-core processors, Lean software development, and many more are helping us mature our way out of Web 2.0, out of the need-to-know and need-to-share culture towards one of maybe need-to-predict? Imagine the day when the oceans of heavily merged datasets allow us to introduce predictive intelligence to every aspect of the software development lifecycle.

Gastón Hillar

thumb_gaston_hillarDescribe your first computer program.
I programmed a character-based worm moving on the screen, written in the legendary Texas TI-99/4A Extended BASIC. A few days later, I could create my first sprites and I could detect collisions between them. Many years later, my first computer program for the x86 family was a database manager for electronics components. I wrote it in Turbo Pascal and I also created libraries in C for database access operations. Performance optimization was very important when clock speeds were less than 30 MHz (0,03 GHz).

Which programmers influenced you the most during this period and why?
Andrew Tanenbaum. He is the best explaining how different operating systems work using word pictures and code.
Charles Petzold. I learned to develop Windows software with his books.
Ray Konopka and Marco Cantu. I worked with Delphi for many years. I learned to create components with their books. I could use this knowledge whilst working with other programming languages.
Erik Gamma. Design Patterns. I cannot design software without thinking about design patterns.
Grady Booch and Ivar Jacobson. Object-oriented methodologies.
Steve McConnell. Excellent methodologies and experiences.
David Flanagan. Java.
Kent Beck. Agile manifesto.
James Strachan. Groovy.
Herb Sutter, Cameron and Tracey Hughes, and Joe Duffy. They are evangelizing concurrency and parallel programming in many different programming languages.
Bill Gates, Steve Jobs and Linus Torvalds. Business Intelligence using completely different models.

How would you summarize your early professional years?
I inherited my passion for computers from my father. I had the opportunity to learn about computers electronics “playing” in my father’s electronics laboratory. I could learn how chips worked. Then, I learned how to program them using many different programming languages. I learned reading books and I could create my first commercial software (when software was sold in nice boxes) before going to a University.
I wrote my first book about computers hardware “Estructura Interna de la PC / Inward PC Structure” and my professional career changed in that moment. I became an author and a computer science professional. I never stopped writing. However, I had to work in many ugly programming languages.
I became a project manager too early. However, I stayed tuned with new technologies, new tools and new programming languages.
I understood that it was necessary to be competitive in a very globalized profession. Luckily, nowadays I have 9 clocks in my desktops with different time zones.

What attracted you to parallel programming and multi-core?
I’m always researching about new technologies. I’ve always been fascinated with advances in hardware and in electronics. I have my own laboratory with many high performance workstations and servers.
I’ve always wanted code to run faster. I’ve been optimizing small and huge applications taking advantage of hardware resources.

What are the core values and principles you’ve acquired during your career?
Respect copyrights and licenses.
Research and development is always necessary.
Design, then code.
Organize, then code.
Comment your code.
Rewrite your code.
Test your code.
Re-test, your code.
Learn, learn and learn.
In this industry, there’s always something new to learn about.

How do you stay productive?
Staying tuned with new hardware, methodologies and products. Changing all the time. Making paradigm shifts as soon as possible. Hardware is very important. You need the best hardware to develop the best software and the best information systems. Nowadays, you cannot develop a competitive parallelized application using a single core microprocessor. I always need to improve designs. I read more than 20 books per year and specialized websites and journals.

How do you see the software industry in general and specifically parallel programming and multi-core evolving over the next 5 years?
The programming languages that don’t evolve to offer easy parallelization features won’t survive.
Functional programming features are going to be part of classic programming languages.
Multi-core is here to stay. There are going to be new standardized APIs, new compilers and new programming languages to take advantage of dozens of cores per physical chip. The number of hardware threads per physical core will grow.
There are going to be two worlds: sequential world and parallel world (developers prepared to work with concurrency and parallelism).
There are going to be new operating systems and new versions of existing ones, taking more advantage of parallel hardware. The great question is: Who is going to win the market?
Netbooks and other MIDs will push software developers to take advantage of multi-core CPUs with low clock rates.

Tagged , ,

Juan Gabardini

thumb_juan_gabardini What attracted you to software development?
I got in touch with my first computer back in 83, a TI 99/4A. At this time the high school “Computer Lab” was been installed. It consist of 8 computers. Wow! Just too cool stuff for a nerdy guy, who already thought that soldering transistors and LEDs to make a VU meter is the coolest thing on Earth. Add to this that teaching computer, and so using the Lab, was starting with the then first year students, which I wasn’t!. Ah, eating the forbidden fruit!

For some time I dwelled in the gray area between hardware and software. I finally made my mind due to software’s greater freedom to create or maybe a lack of interesting hardware projects around.

Who influenced you the most early in your career, and how?
I started my carer in a low tech environment, Chaco is not known for its high tech industry. That makes the work of the late Luis ‘Lucho’ Verga more inspiring. He set up an institute where computer skills were taught to children and grown up people. Logo, Basic, Assembler … different students, different teachers, but the same willingness to learn and share in an environment that nourishes it.

How would you summarize your early professional years in technology?
My first job, with 17 years old, was teaching Basic. Then I worked 3 years in business software, in various software companies and freelance. After a period pursuing my engineering degree, I started working in Nuclear Medicine imaging software at Veccsa. This was the first time in that I really felt proud of my work. I designed and built software that interacted with hardware, was supported internationally, had complex algorithms and user interaction, … Paradise.

What are you currently working on?
I’m on agile developing! I’m practicing (mostly testing), teaching and coaching agile development. I also taking part in the organization of Ágiles 200x and the Agile Open Tour.

What are the core values and principles you’ve acquired during your career?
Trust people: in doubt, trust.
Naiveté: I try to keep my mind open and listen, really listen, to people.
Simplicity & Balance: both in technical and human problems, I try to keep it as simple as possible, but not simpler.

How do you stay productive?
I look for learning opportunities, interesting projects and great teams to work with. I talk with different people (as many as I can) and ask them how they do things.

Where do you see the software industry in 5 years?
More people will be exposed to increasingly complex and powerful systems, for instance multi core processors that put parallel processing in the hand of every developer, or smart phones that put computers in everybody, everywhere, everytime. New tradeoffs will emerge about how we program them, what can be done, how we interact between us and with computers.

I think that Apple will continue to be restricted to the high end market and eventually decline due to it lack of community. The walled garden mentality will not nourish it. Open standard, as Android, will grow stronger. Microsoft will be playing catch up with Google for a while. Will Microsoft follow the IBM path, losing dominance? Or would it come out stronger as after the Internet/Netscape episode? If Google maintain its dominance in the cloud, it can get the heat of being the big guy,…and so, it would be also the Bad guy. As we all move more and more to the cloud, tensions between a centralized/commercial data repository vs federated/community model will grow stronger. After free / libre open source we will have a free / libre data social movement. Sites like Facebook will become the new Microsoft.
Interesting times!

Doing to Help the World’s Poor

About 9  years ago I worked for the Food and Agriculture Organization, FAO, in Rome, Italy.   Our team was focused on creating technology solutions to enable sustainable agricultural development in developing countries.  Sounds great on paper, but the most valuable lesson was realizing the magnitude of the world’s hunger problem and how technology could help combat this problem.

Today is Blog Action Day.  Thousands of bloggers will unite to discuss a single issue – poverty.