As the World Turns to Digital — The Digital Matrix Book

As the World Turns to Digital

Por primera vez en la historia, los 5 mejores empresas son todas las empresas digitales; que son todas las empresas estadounidenses -pero con alcance global, impacto e influencia. Todos ellos son relativamente jóvenes (menos de 40 años de edad) y que puedan afectar las industrias tradicionales, ya que la digitalización de sus productos, procesos y servicios. Estas empresas ya han influido en varios sectores como la salud, el comercio minorista, medios de comunicación y entretenimiento, telecomunicaciones, automoción, la publicidad, el marketing y las comunicaciones y así sucesivamente.

#1 Apple ($582 billion)

#2 Alphabet ($555.7 billion)

#3 Microsoft ($452.1 billion)

#4 Amazon ($364.4 billion)

#5 Facebook ($358.6 billion)

Facebook just edged out Exxon which was #6 at $358.3 billion.

For the first time in history, the top 5 companies are all digital companies; they are all US companies —but with global reach, impact and influence. They are all relatively young (less than 40 years old) and they are likely to impact traditional industries as they digitize their products, processes and services. These companies have already influenced several sectors such as healthcare, retailing, media & entertainment, telecommunications, automotive, advertising, marketing & communications and so on.

I believe that they are just getting started as they expand their scale and scope at speed that’s unprecedented. With their increasing R&D investments and patenting proclivity, they could exert significant influence as we rely more on artificial intelligence in areas such as conversational bots (example: Amazon’s Alexa and Apple’s Siri), drones (Amazon, Facebook, Google), healthcare (Alphabet and Apple), virtual reality (Microsoft hololens and Facebook Oculus), cloud (Amazon Web Services, Microsoft Azure, Google and possibly the other two) and Internet of Things (where all five would jockey in different ways). More opportunities to enhance efficiency as well as usher innovations that solve fundamental problems in industry and society.

We are just getting started and the road to 2020 and beyond will see greater dominance and influence of these digital giants and others such as GE (ranked #8), AT&T (ranked #9), Verizon (ranked #15), Alibaba (ranked #16), Intel (ranked #26) and IBM (ranked #32).

It’s a far different state of affairs than the irrational euphoria of the dotcom boom and bust of 2000. We are truly shifting to a post-industrial, digital era.

Fuente: As the World Turns to Digital — The Digital Matrix Book

Hybrid Apps and the Future of Mobile Computing – DZone Mobile

Fuente: Hybrid Apps and the Future of Mobile Computing – DZone Mobile

Hybrid Apps and the Future of Mobile Computing

Learn how hybrid app development is pulling ahead of native in the constantly changing and fluctuating mobile ecosystem.

· Mobile Zone

Launching an app doesn’t need to be daunting. Whether you’re just getting started or need a refresher on mobile app testing best practices, this guide is your resource! Brought to you in partnership with Perfecto.

The jury is out on which type of mobile app is the future of mobile computing. The stats point to native being the dominant app type in use. Most of the top 100 apps in the app stores are native, and comScore reports that 50% of all time spent digitally is spent on mobile apps (though it doesn’t give a split between native and hybrid), and just 7% is spent on mobile web apps.

Digital Time Spent in July 2016

Source: comScore

While native apps are great for engagement, mobile websites still draw a majority of traffic. Applause accurately says, “The Web Gets Eyeballs, Apps Keep Them.”

Top 1k Mobile Apps v Top 1k Mobile Web Properties

Source: comScore

Clearly, relying on native mobile apps is not enough. For this reason, Bloomberg and many large mobile app publishers use both web and native mobile apps, not wanting to miss out on either. However, this is far from efficient. What we need is to build and ship mobile apps much like web apps—Deploy once, and it works across all platforms. Fortunately, there are exciting developments on this front.

There are two strong currents in mobile app development bound to intersect in the near future. On one side, there are many app development frameworks that help you build hybrid apps with native-like functionality. These include frameworks like React nativeCordovaNativeScript, and Ionic. They promise the best of both worlds- use HTML, JavaScript and CSS to build mobile apps, and let those apps access native device functionality.

On the other side, the two major mobile platforms, iOS and Android, are taking steps to make mobile web apps function like native apps, allowing web apps to place their icons on the homescreen or app drawer, send notifications, and even leverage device functionality. Google’s Progressive Web Apps are the most recent development in this regard, and there are already numerous examples of apps that have gone progressive.

As these two trends converge in the future, they will lead to a shift from native mobile apps to hybrid apps. There are a couple of reasons why hybrid apps are set to trump native apps in the near future:

App Store Limitations

Today, releasing a native mobile app involves packaging the code, submitting it to the app store, and waiting for it to be approved. The entire process can take anywhere from two to seven days. This is an eternity in the mobile world. Mobile app developers (especially those that already practice DevOps for their web apps) want to be able to update their mobile apps like their web apps, multiple times a day if necessary. This is not possible with the limitations of app stores, and hybrid apps are the way out.

Code Reuse

As most apps have an iOS and an Android version, they are developed using each platform’s preferred programming language- Objective-C or Swift for iOS, and Java for Android. Hybrid apps, on the other hand, let you build mobile apps with the same languages your developers are already familiar with- HTML, JavaScript, and CSS. You can write code once, and deploy it across all your mobile platforms. Mobile app testing equally benefits because you don’t need to write unique test scripts for each app type. Testing against a single codebase also reduces the testing infrastructure you need and simplifies the QA process. With the increasing fragmentation in device types and OS versions, this is becoming a necessity for mobile development.

The Rising Talent Gap estimates there will be 1.4 million computing jobs available by 2020, and only 400,000 computer science students. This is also true for mobile development. Truly great iOS and Android developers are a rare find. It’s a better strategy to make the best use of the existing talent you have than to leave your mobile development at the mercy of scarcely available new talent.

Faster Time to Market

The popularity of mobile apps rises and falls faster than their web counterparts. Ratings, reviews, installs, daily active users and churn rate all add up to decide the fate of a mobile app. In this fast-paced world, hybrid moves you faster from idea to app than native.

DevOps for Mobile

Finally, hybrid apps let you extend DevOps to your mobile apps, too. They let you go from mammoth quarterly app updates to a bi-weekly cycle, and eventually let you update as frequently as your web app- which is close to impossible with native apps today. To update at this frequency, you’ll need to automate the two key parts of your continuous integration (CI) process: builds and tests. This is where tools like Git, Jenkins, and Appium have a key role to play. When well-integrated, they can let you focus exclusively on developing and testing your app, rather than worrying about mobile platforms’ norms. This gives you the confidence to release multiple times a day, and take ownership of your mobile development process.

This post will sound too one-sided if I ignore the fact that as of today, native apps deliver a much better and faster UI than hybrid apps. This is the single biggest reason they’re so popular with developers and users alike. However, hybrid apps are fast approaching native-like functionality. All of the reasons above add up to show why native apps, though the de facto choice for many today, can’t hold that position for too long.

The mobile ecosystem changes faster than we’d like to believe. And it won’t be long before we look back at how primitive our mobile app development was in the era of app stores and their policing of native apps. Hybrid apps are the future of mobile computing.

Keep up with the latest DevTest Jargon with the latest Mobile DevTest Dictionary. Brought to you in partnership with Perfecto.

El Matrix Voice transforma la Raspberry Pi en un Amazon Echo – FayerWayer

El Matrix Voice transforma la Raspberry Pi en un Amazon Echo

Este dispositivo de código abierto permite a los programadores armar su propia versión de Alexa.

Recientemente la compañía Matrix Labs lanzó un accesorio para la Rasperry Pi llamado Matrix Creator, el cual le agrega a este pequeño computador diferentes usos y sensores como de temperatura, Ultravioleta, presión, etc.

Siguiendo este paso, la compañía creó una especie de sucesor de Creator llamado Matrix Voice, que solo se enfoca en el reconocimiento de voz y es más barato. Tuvo una exitosa campaña en Indiegogo y planean distribuirlo en mayo de este año (vía TechCrunch).

Como mencionan en el video, la compañía está buscando unir el internet de las cosas con inteligencia artificial, creando este dispositivo de reconocimiento de voz de código abierto. Incluye siete micrófonos y un anillo de luces LED; permite integrar softwares personalizados y otros ya establecidos como Alexa de Amazon Echo y Google Voice Service.

El Matrix Voice cuesta USD $55 en Indiegogo y también tiene una versión con un microcontrol con Wi-Fi y Bluetooth a USD $65. Mientras tanto el Matrix Creator tiene un precio de USD $99.

Ver en YouTube

Sígannos y comenten en Facebook.

Fuente: El Matrix Voice transforma la Raspberry Pi en un Amazon Echo – FayerWayer

Of Gods and Procrastination: Agile Management

Of Gods and Procrastination: Agile Management

Common errors in Agile management, and how to get the best quality code from your developers without tying them to their keyboards.

Quickly embraced by some, completely ignored by others, Agile management spent the last decade and a half gaining popularity. Today it has become one of the most trendy phenomena, and most companies claim to have adapted and applied its principles. And indeed, that is true, yet almost always in a modified, and even sometimes in a corrupted, way.

Most of us in software development have been in different teams and projects, as developers in some, and as team leads & managers in others. We coped with clients in kick-off meetings, decoding acceptance criteria and wireframes, defining the MVP, accepting changes in the requirements, and modifying the scope in the middle of the sprint. We made mistakes and learned the hard way. Mistakes that we should not commit again. Yet sometimes, we see them happening again in our own team, when visiting clients, or meeting teams with whom we will collaborate, etc. Today, I want to focus on the troubles I see the most among managers with software developer teams.

Agile Management Common Errors

Meeting a Tight Deadline by Adding Additional Resources to the Team

You check the estimation for the running sprint and find out that the team is currently 16 hours behind the schedule. It seems like no problem at all; you have a developer that just finished his project, he will join the struggling team for two days, and you guys will be back on track.

By doing this, the team probably won’t meet the deadline. Why? The mistake here is to think that a developer performs easy, automatable work. Well, he doesn’t. Even if he is familiar with the technologies used in the project, he still needs an introduction to what the project is about, what has already been done, where all the documentation is, what wireframes are still being reviewed, and a very long list of other things. Besides the fact that the productivity of this developer will be low (at least in the beginning), he will also need to be assisted by the rest of the team to be taught everything described above. A task that is usually assigned to one particular person. Well, that person’s productivity will also drop as he will be distracted and will have to spend hours helping and training the new member of the team.

Parkinson’s Law

In the beginning, Parkinson’s Law had a different meaning. Today it states that work expands to fill the time available for its completion. Let’s say we are having a performance issue with a particular project. So we assign one of our best developers to investigate what the problem is and to fix the bottleneck. To do that, we decide to spare a week of time.

Parkinson’s Law is not always present in a developer; sometimes it’s stronger, sometimes it’s weaker. Yet freedom of time in a task, especially if it doesn’t have a clear where-to-end point, will lead to its expansion, occupying all the time available for it. Sometimes it can even be worse, where the resulting solution suffers from over-engineering that adds unnecessary complexity to the project. To avoid this situation, the task must have strict goals and acceptance criteria, or otherwise, a frequent polling in order to see the results achieved so far.

Multiple Projects and Distributed Teams

Although out there you can find an enormous amount of articles on how to succeed with distributed teams applying Agile, keeping in mind an even distribution of tasks, understanding time and cultural differences, etc, not all projects are good to do such a thing. Especially when each developer forms a part of several different teams at the same time. In the attempt to make each one of the developers an ‘all-terrain’ developer, they end up working on multiple projects at the same time; for instance, Monday and Tuesday on project A, and from Wednesday to Friday on project B.

You have probably heard about the developer’s focus. This is when the developer is in their most productive state of mind. Once they lose that focus, however, it takes some time to get it back. Well, the same thing happens when switching between projects and checking what was missed while being away. Although some tools help to mitigate this effect, Dailies, Jira or Trello, for example, it still drags down one’s productivity.

It’s easy to disagree about this topic, but by default, I do defend the 6th principle of the Agile Manifesto, for both ‘co-location’ and ‘co-time’:

“The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.”

Time Pressure Increases Productivity

It’s surprising how common it is to discover among your co-workers and professional colleagues that they had the same dark experience. Often in a startup or in a small company, with a very talented manager that made them ‘believe in themselves and in the product,’ which ended up in countless extra hours, tons of stress, and impossible-to-meet deadlines. As developers accept such working conditions, it allows their manager to presume that the team is quite productive, as the ratio of delivered functionalities and time is unbelievably high.

In fact, the productivity of the team might be considered high, as long as you don’t take into account the quality of the work done and the extra (and unpaid) hours. Those kinds of conditions inevitably lead to two results:

  • First, the quality of the code goes down hill. This means more bugs passing through (no need to explain that a bug in production is hundreds of times more expensive for the company than the time needed to get it done right in first place), the test coverage fails, functionality is implemented partially, etc. Under time pressure, developers won’t work more, developers will work faster. Basically quantity over quality.
  • Second, at a certain point, the developer ends up quitting. Once he realizes that things won’t change and that his workaholic attitude and commitment to the company isn’t really good for him, he will definitely find another place to try his luck. Usually, the one that leaves is the one that had the most pressure, i.e. the one that can actually leave because he knows he has another option. And guess what? That’s the developer that you can’t let go.

To finish with this paper, I would like to point out the link between the code of a developer and his motivation. Usually, Software Development is not just something that ‘pays the bills,’ it’s someone’s passion. For a developer, to have the chance to write quality code means a burst of motivation. Take that chance away, and the motivation is gone.

And when a manager’s focus for the team is to keep up the productivity, the quality rarely increases in a significant way. When the focus is on quality, however, productivity tends to soar.

Fuente: Of Gods and Procrastination: Agile Management – DZone Agile

¿Es un pájaro? ¿es un avión? ¡No! ¡Es Scrum!

En un principio se crearon los programadores y los proyectos, pero no había nada más que tinieblas y el espíritu del cliente cabreado planeaba por los departamentos.
Así que un buen día, dos tipos llamados Takeuchi y Nonaka dijeron: ¡Hágase el Scrum!
Y vieron los jefes de proyecto que era bueno, y volaron sombreros en algarabía.
Casi sin saberlo, se había inventado lo que iba a ser una de las implementaciones Agile más populares del planeta.

¿Qué aportó Scrum que lo diferenció del resto de formas de gestionar proyectos? En mi opinión dos aspectos básicos: transparencia con los clientes y ciclos de release periódicos y definidos.
En los otros sistemas de gestión que usé anteriormente (if any!) los proyectos se cargaban de una pesada losa de documentación que se llevaba casi la mitad de los costes disponibles y que el cliente debía firmar entre un mar inmenso de dudas (y de papeles).
Esta es la semilla de las frustraciones y lo que ha marginado a los proyectos de software hacia una de las experiencias más insatisfactorias que pueda sufrir el ser humano, junto a la de participar en juegos de azar y ponerse a dieta.

Tocar el producto desde el principio

Ver el producto mientras crece (Fuente:

Ver el producto mientras crece

Este aspecto es el más valorado por el cliente, quien es ni más ni menos que el que nos paga.
La sensación de estar metido desde la “mórula”, la génesis de su proyecto, les hace ser más comprensivos con los posibles imprevistos que puedan ir surgiendo, amén de proporcionarles una infinita tranquilidad sobre su inversión.
Yo lo comparo con comprar por internet: pagas por algo que no has tocado, ni olido ni visto. ¿Quién no mira el tracking code para ver dónde está el paquete? Puede que esté parado en Berlín y lleve tres días, pero sabes que está ahí.

Con Scrum el futuro propietario del producto, el padre adoptivo, también sabe dónde está, y además también sabe cómo se va construyendo. Esto que parece nimio es nuestra revolución. ¡Estamos iniciando a un muggle a los rudimentos de la magia! Esta persona aprenderá que los programas no son “dar un botón y listo”, que tienen tanto de artesano como ese Murillo que tanto admira y que sabe que es único.
Será comprensivo (salvo Saurons) cuando le digamos que ese BotónVerdeQueSaltaYVuela que le prometimos es totalmente imposible, pero que intentaremos hacerlo de una manera parecida.

Lo que hay que hacer bien clarito

La gran herramienta de Scrum es el Product Backlog, que no es ni más ni menos que la lista de funcionalidades que debe realizar el software que vamos a empezar a hacer, perfectamente ordenada y documentada incluso a nivel de procesos.
Es la Herramienta, así con mayúsculas, y todo el mundo podrá verla y tocarla desde el principio.
Lo ideal es montarla como una Wiki, y que vaya evolucionando como el germen de la documentación del proyecto, ayudándolos de los resultados de los sprints y las actas de reunión.

Mantener al equipo centrado

Es común que haya interferencias externas (teléfono, propuestas de cambio, etc) que desconecten a los programadores de su tarea. Tarea dicho sea de paso que está mal reconocida y valorada. Programar es algo muy complejo y necesita una altísima carga de concentración y de eficiencia mental. Cualquier distracción hará que el desarrollador tenga que perder dicho estado de foco en la tarea y, después de 10 minutos al teléfono, tenga dificultades para saber qué estaba haciendo justo antes.

Programadores concentrados en la tarea (Fuente:

Concentrarse en las tareas evita errores
y facilita los objetivos (Foto:

El Scrum Master es nuestro “papi”, que lo arregla todo todo, y que evita que tengamos que sufrir dichas distracciones y cuyo trabajo nunca es fácil, teniendo que manejar las situaciones con la maestría que les caracteriza.
Este rol es fundamental y, bajo mi punto de vista, es el más importante de todos. Era un rol que hacíamos los programadores habitualmente cuando llamaba el cliente para quejarse por algo o para preguntar qué tal iba el módulo ChachiOptimizador que le estábamos haciendo.

Objetivos cercanos y factibles

Los Sprints son eso: objetivos a realizar en un corto periodo de tiempo que incrementarán la funcionalidad del software.
Para los programadores este aspecto es magnífico porque nos permite saber qué tenemos que hacer (ojo a ese plural) para cumplir la planificación prevista.
Las tareas son concretas, divisibles por módulos y asignables libremente (en principio), y usando un Pomodoro todo parece más fácil, y lo mejor de todo es que ¡es trabajo en equipo!

Scrum Board, tomado de

Scrum Board de tareas domésticas (Foto:

Cualquier cambio o nueva característica habrá de respetar el Sprint. Nada de imprevistos durante ese tiempo cerrado e intocable, ya se planificará en la siguiente iteración.
Ah, y ojo con valorar dichas novedades en tiempo y dificultad sin contar con los que las tienen que hacer: en Scrum eso es ilegal.
Y nada de sofisticados sistemas: una pizarra, papeles y un reloj de cocina es lo único que vamos a necesitar. Con esto no habrá proyecto que se nos resista.
Esta es la revolución Scrum, y ha venido para quedarse, al menos en mi equipo.
Ha llegado la cordura a la gestión de proyectos.

Fuente: ¿Es un pájaro? ¿es un avión? ¡No! ¡Es Scrum!

Google’s Improbable Deal to Recreate the Real World in VR | WIRED

GOOGLE’S IMPROBABLE DEAL TO RECREATE THE REAL WORLD IN VRISLAND CREATOR, FROM WORLDS ADRIFT, BY BOSSA STUDIOS.LET A THOUSAND virtual worlds rain down from the clouds. Or rather, the cloud. That’s the call from Google as it gets behind a tiny British startup called Improbable.

Founded by two Cambridge graduates and backed by $20 million in funding from the venture capitalists at Andreessen Horowitz, Improbable offers a new way of building virtual worlds, including not just immersive games à la Second Life or World of Warcraft, but also vast digital simulations of real cities, economies, and biological systems. The idea is that these virtual worlds can run in a holistic way across a practically infinite network of computers, so that they can expand to unprecedented sizes and reach new levels of complexity.

Fuente: Google’s Improbable Deal to Recreate the Real World in VR | WIRED

CUEC!!! SOLUCIONADO hace musho rato ;) – PhoneGap. Cómo acceder a servicios del teléfono desde la web.

PhoneGap is an open source project that does precisely what we need, with a few useful extras. It provides us with a JavaScript bridge API to underlying hardware, such as the camera, GPS, and accelerometer, as well as the file system. It also supports a number of different platforms such as Apple iOS, Google Android, RIM’s BlackBerry, Palm’s webOS, and soon, Windows Phone 7. That’s quite a list, covering a sizable portion of the smartphone market.

Vean la página 223 del libro que les dejo en este enlace.

Las 9 cosas más difíciles que tienen que hacer los desarrolladores

Como cualquier estudiante de ingeniería tuve que cursar un asignatura de informática básica. En mi primera universidad en vez de dar Basic o C++, las clases giraban en aprender a programar con Pascal. Era Computación I y II y no os puedo negar que tuve que tomarme más de un café o pincharme con el lápiz para no dormirme. Pero esa no es la cuestión. Este artículo es sobre las tareas más difíciles que tienes que hacer cuando te sientas a programar.

Phil Johnson, columnista de ITWorld investigó un poco y descubrió a través de hilos de conversación en Quora y un foro de Ubuntu (tomó en cuenta los comentarios de aproximadamente 4500 desarrolladores) que lo que más cuesta es:

1. Poner nombres

Sí, elegir los nombres de las variables, funciones, clases, objetos…es lo que consideran más difícil la mayoría de los programadores. Seguro pensabais que era documentar el código o el tener que usar el trabajo de otro, ya que suele ser el debate común cuando hablamos de programación.

Una buena elección de los nombres, que transmitan lo que hacen y que sean concisos son vitales cuando se desarrolla, incluso si es un programa pequeño o una aplicación.

Sólo hay dos cosas duras en Ciencias de la Computación: Invalidar una memoria caché y nombrar las cosas.

Es una de las cosas más importantes, si quieres que tu código sea legible por otros.

2. Explicar lo que se hace (o no se hace)

¿Quién entiende el arte de la programación? Solo los programadores. Para algunos es difícil hacer entender a sus familiares y amigos (no programadores) lo que conlleva su trabajo. Todos piensan que puedes solucionar cualquier problema relacionado con la informática.

El intento de explicar a (casi todo el mundo) que no sé cómo arreglar su ordenador.

3. La estimación del tiempo para completar las tareas

Un programador puede pasar varias noches picando código para cumplir con los plazos de entrega de un proyecto. En el comienzo nunca se saben los imprevistos que pueden ocurrir.

Resulta extremadamente difícil estimar cuántas sorpresas a un problema de programación se presentarán cuando el trabajo sea llevado a la práctica.

4. Tratar con otras personas

Explicar tecnicismos a personas sin conocimientos técnicos. Hay que proporcionar informes sobre el estado de la gestión, consultar con otros ingenieros sobre el proyecto, estar de acuerdo con otros desarrolladores…

Es mucho más fácil convencer a un procesador que haga lo que quiero que a algunas personas.

Lidiar con ingenieros tratando de decirme cómo escribir código…

5. Trabajar con el código de otro.

Tener que entender, depurar o mejorar la aplicación o trozo código de otro, además de adivinar las intenciones del desarrollador original. Y si el código está mal escrito, comentando o documentado, el trabajo es mucho más tedioso.

Vivir con el código de alguien que en principio no estaba tan calificado para escribirlo.

Tratar de descifrar miles de líneas de código sin comentar.

6. La implementación de una función con la que no se está de acuerdo.

Tener que implementar una característica o función que, por cualquier razón, sientes que no debe ser incluida, pero que el cliente, o alguien por encima de tu nivel, insiste en incorporar.

7. La documentación

Crear la documentación que explique lo que hace el código o cómo funciona una aplicación. Puede ser una tarea que consuma mucho tiempo, que pueda sentirse como una pérdida de horas si nadie la va a leer. No un secreto que muchos programadores suelen preferir escribir código que documentarlo.

Tener que escribir documentos inútiles que nadie va a leer o usar, sólo porque es parte del proceso.

¡Escribir una documentación que sea buena, explicativa y concisa, y todo al mismo tiempo!

En Geeky Theory hemos escrito sobre este tema, te recomendamos: Comentar o no comentar el código, esa es la cuestión  y Un código autodocumentado.

8. Pruebas

Tener que escribir pruebas para pequeñas unidades de código y asegurarse de que funcionan correctamente. Estas pruebas ayudan a dar cuerpo a errores desde el principio del proceso y pueden facilitar el testeo cuando el código se modifica o se actualiza.

9. El diseño de una solución

Tienes un conjunto de requisitos y eres el arquitecto que debe diseñar una solución técnica e implementarla. Además de satisfacer las necesidades del cliente y cumplir con el plazo requerido.

Pensar en cómo ir del punto A y terminar en el Z es la parte más difícil.

Es difícil anticipar cómo serán las cosas en realidad antes de empezar a trabajar en ello.

Conclusión: Resulta que realmente escribir código no es una de las partes más difíciles de la programación.

Muchos diferirán del orden, en mi caso, el punto 9 y el 1 eran los que más me costaban —no tengo el ADN coder—.

Y a vosotros, ¿qué os cuesta más? ¿O que agregaríais?

Fuente: Las 9 cosas más difíciles que tienen que hacer los desarrolladores