← Back

These Months of 2015

A look back at the projects, technologies, reading, and lessons of the first half of 2015, from JavaScript and web performance to work management.

Reflections

Summer is moving along, and soon I’ll take a few weeks off. It’s a kind of pause in your day-to-day life, at work, and in your family routine.

How has the first part of the year gone overall? I can’t help asking myself these kinds of questions. So, although I’m not usually one to share introspective reflections on my website, I’ll look back on this busy year—at least from a professional and technical perspective—and summarize the things and topics I’ve been involved with.

During the first part of the year, we wrapped up important projects and started new ones. We’re working on a software prototype that we’ll use to ask the market how much interest there might be in it, and we’ve already planned an in-depth review of one of the products we sell.

I’ve also made progress on several personal projects (I’ve registered my first trademark), and at last we’ve laid the first stone, as they say, on another project, after three years of plans, architects, permits, and so on.

I wonder how much of the way I manage the software projects I lead carries over into all those projects that, let’s say, take shape outside working hours—and vice versa. Ultimately, I think the ideas of defining roles apply to any activity, and collaboration is better than imposition in all of them. It’s liberating to know that you don’t always have to be right, and that the world takes shape as you do things and solve problems.

What I do know is that every one of these projects, whatever kind they may be, moves forward by solving problems. That’s it. Starting something means solving the problems that come up as nimbly as possible. In reality, every problem is something you have to learn, and only the negative emotional weight you choose to give it turns it into a problem. Anyway, I’m rambling.

Here are the things that have been most significant to me during the first part of the year.

It seems we’re seeing a major rise in a language that’s been around for many years. Since the web is becoming central to almost everything we do and, fortunately, we’re moving toward standards, JavaScript was bound to play an important role.

In my opinion, things will get even better as ECMAScript 6 becomes more popular. This revision brings greater maturity and includes features that developers used to other environments have always missed. ES6 is like JavaScript’s older sibling, with which all the environments (NodeJS), libraries (AngularJS), and frameworks that use the language will converge.

Still, I’m surprised that there’s a culture of clean code and continuous refactoring, but for some reason it’s applied to languages like C# and Java and not always to JavaScript development. As a result, it’s very easy to find truly messy JavaScript code everywhere. You only have to poke around with Firebug or Chrome DevTools on any website to discover some genuinely significant and curious things on sites with thousands of daily users. There’s a lot to do…

AngularJS

I started with AngularJS in 2014, and since then I’ve used it in every project I’ve led that had a web interface.

Although it’s better suited to SPAs (single-page applications), you can make use of this library in any web application. There’s no doubt that a JavaScript-heavy solution is faster to write, and if you organize its assets well, it ends up much better structured for maintenance and evolution.

As with anything, using AngularJS well results in a clear, clean, well-structured solution; using it badly can produce something truly messy and difficult to follow.

I love AngularJS directives. Recently I’ve been seeing more and more publications about Polymer, a library for creating web components that I don’t know very well yet and that is similar to AngularJS directives.

Workflows for almost everything

Any job isn’t just about completing a specific task with a beginning and an end; that task needs to be framed within a procedure or workflow that organizes how the work gets done.

Likewise, any work that needs to be repeated and may be more or less complex should be organized so it can be done correctly and efficiently when it comes up again. During the first part of this year, I’ve had to define workflows in different contexts. What’s most striking is how few people seem to care about formalizing these procedures, so they don’t have to rethink how to do the same things over and over (and waste precious time along the way).

On the technical side, I’ve used Grunt extensively for a web application I’ve been working on for a while, and I’ve written several procedures for its orderly deployment, validation, and so on.

We’ve also started a project completely unrelated to software: building some rural accommodation, after several years of planning, drawings, permits, and so on. Since several people are involved—the owners, architect, surveyor, builder, and others—I’ve defined everyone’s role as clearly as possible so that we don’t all have to talk to everyone about everything at every step, blocking day-to-day decisions and creating extra (unnecessary) work. This is the only way to move forward on the different projects in your professional and personal life—or so I hope, right?

Git isn’t just for code

I love Git—who doesn’t? This year I’ve started using it not only as a version-control tool and code repository, but also for other kinds of documents, such as the two books I’m already working on.

Although there are visual tools for Git, and I come from the Microsoft world, you eventually appreciate how convenient it is to use the command line for many tasks; it simply ends up being more efficient. As I write this, I’m reminded of Neal Stephenson’s wonderful classic, In the Beginning… Was the Command Line. Brilliant, and well worth rereading every few years.

Web optimization and performance

Having worked in the backend for many years, I’ve spent a lot of time optimizing code (sometimes out of necessity, and sometimes just for the pleasure of it, to be honest). During the first part of this year, I’ve gone much deeper into optimization—not only of a professional web application’s workflows, but also of all the assets needed to browse its frontend: HTML and CSS files, images, fonts, minification, advanced caching techniques, in-depth analysis of browser requests, good use of CSS selectors, more efficient layout frameworks, the overhead of obsessing over making your application responsive, deliberately delaying resource loading, and a very loooong list of other things.

Curiously, there is hardly any Spanish-language writing on this important topic, given that the web is growing exponentially and few developers know even the most relevant techniques.

The key is to apply all these optimization techniques without obscuring the solution.

I’ve had many interesting conversations about how multifaceted web portal development can be. In addition to choosing the right technologies, you can’t ignore optimization techniques or SEO/SEM strategies, and you need to integrate web analytics, and so on. So when I read a résumé that says “web developer,” honestly, I don’t know what to think…

Nginx and Redis

For the project I’m about to publish, I’ve used Nginx and Redis for the first time. I think both are fantastic projects. Nginx plays a very important role in the deployment architecture of a highly scalable system (with many concurrent users accessing a web portal), while Redis can be used in many ways to achieve huge performance improvements in different kinds of applications.

Visual Studio 2015

Over the past few months, we’ve started using Visual Studio 2015 and diving fully into ASP.NET 5 and DNX, the new version of Entity Framework, and so on. It’s striking to see open-source ways of working being adopted in this new kind of project with Visual Studio 2015 and the new version of ASP.NET.

Cloud development

We’ve continued using Microsoft Azure extensively for our clients, with great satisfaction. Fortunately, the number of subscriptions we’re creating is growing, and clients are getting used to cloud solutions that they connect to through a VPN and, in some cases, even pay for as a service.

Lean entrepreneurship and work management

I’ve read everything I could find about the lean approach to projects. I’ve not only satisfied my curiosity; I’m also about to publish a project using this methodology.

Looking back, it’s surprising how productive you can be when you take a moment once a week to define a set of microtasks—of any kind—that take no more than an hour or two each. Manage them with apps like Wunderlist (I already wrote about task-management tools in this post), and the week goes by before you realize how much you can do (and learn) by finding little pockets of time at night, on afternoons when your daughters might be watching a movie, during a weekend siesta, or on the Seville-to-Madrid train, and so on.

It really comes down to consistency and discipline: most people start many things and finish very few (and, I’m afraid, spend most of their time talking about them instead of working on them). That’s the reality.

Over these past few months, I’ve continued to take a strong interest in work management and time optimization, reading several related books. Deep down, we all sell our time, so we need to optimize it, don’t we?

The Programmer’s Black Book

Sales of The Programmer’s Black Book have increased substantially in the first half of this year. That doesn’t make me happier because of the royalties I might receive, but because I like seeing that the book is genuinely helping create better software developers. Still, I suppose a few extra euros are nice now and then…

At times, Amazon.es has ranked it number one in books in the Programming and Software Development category.

Reading, reading, and more reading

I can’t imagine living without reading. How can we make progress, whatever that means to each of us, without learning about other people’s experiences?

I’ve read a lot on many different subjects: technical books, work organization, marketing, Eastern and perennial wisdom, and so on.

But reading anything is pointless if it has no impact on your life. Why study a book about AngularJS without building a project with that library? Why read about Vipassana if you never take a minute to meditate?

Why all this reading, learning, and doing? All right, I’m not going to advocate moving back to the village, tending a vegetable garden, or living a quiet life close to nature like Thoreau argued for in Walden (a book I do recommend, by the way).

We read to learn, but above all to maintain a sense of humility about our profession and life in general.

It saddens me when people complain constantly, especially to cover up their own incompetence, laziness, or timidity. I’m sorry, but at 41, if there’s one thing I’ve learned, it’s that the more people complain, the more incompetent they really are. Creative, dynamic minds don’t need to hide behind complaints.

We read because we have a responsibility to improve everything we do or touch within our sphere of responsibility. A street sweeper should leave the street just as clean with the same rigor that a NASA engineer brings to figuring out how to send a probe to Pluto. That’s the only way good results will follow naturally. Yet a culture of complaint, of “what’s mine” and “me first,” clouds our judgment and keeps us from moving in a better direction.

So what, then?

The question isn’t “What am I going to do for myself today?” but “What can I do for others?” because you can only make personal progress by helping others, in whatever way. That’s all there is to it. If you think about it, that’s the secret behind everything that works: an employee helps their boss and company achieve results, a supplier helps a client with something they need, a parent helps their daughters grow, and so on.

Well, after this rather Buddhist reflection, I wish you all a wonderful summer.