Kartones Blog

Be the change you wanna see in this world

Book Review: Ready Player One

Ready Player One book cover

Title: Ready Player One

Author: Ernest Cline

In the year 2044, virtual worlds with virtual reality (OASIS) have conquered our lives to the point of people just wanting to be online instead of living a mostly miserable life in a devastated real world. This virtual reality is monetized not only by selling virtual goods, but by charging for virtual transport, both inside and between planets of this "virtual galaxy", where both magic and science-fiction go hand-by-hand, and when the creator dies of old, he leaves a test: He who finds and opens three special gates with three special keys and gathers a special egg will inherit the full multi-billion legacy and would become the owner of OASIS company. Just that and a simple riddle. Years later, Wade, a "gunter" (otaku-like but obsessed with finding the price) just finds the first clue...

Imagine Second Life and Oculus were the biggest hit to ever happen to humanity. Imagine that the creator of the VR is the biggest geek you can imagine (80's movies, shows, music, RPGs, videogames and arcades), and then pour in a huge amount of geeky examples that range from iconic videogames to movie monsters, anime mechas, classical pen and paper roleplaying game character archeotypes... All mixed in what I'd call a nerd version of Willy Wonka and the chocolate factory: an awesome price and legacy to obtain, a crazy owner with "a crazy world built" with weird situations and where some youngsters have to complete challenges.

The result. is curious, to say the least. It hits really hard on the nostalgia part, so if you have memories from the 80s or early 90s it will probably hook you up. I read the first half of the book almost in a single sit, because all this MMO (Massive Multiplayer Online game) with wizards and plasma rifles, some cool VR ideas (like a teacher navigating with the class inside a 3D human hearth to explain how it works from the inside), the mystery of the first riddles and really tons and tons and tons of geek references make it enjoyable, at least for a while. The story itself is not brilliant but when starting, when learning about this virtual world and what happened until 2044, that discovery phase is great, and afterwards it like loses energy; At least for me, it started to be more "convenient", with some big speedups at certain times (e.g. so that bad boys catch-up with good boys) and other times slowdowns to detail fragments that were not so interesting, some obscure scoreboard update rules (again to better fit certain plot events). Having a magical sci-fi world means there are no rules and everything (that comes from the author) is valid. And finally. the geek references get overabused but not always fit well, and yes, is fun to find some not so trivial ones like aliases from Big Trouble in Little China or anagrams from The Sneakers but... one gets tired when it becomes the main drive of the whole book.

It is not that I didn't enjoyed the book, because I did, but I was hoping for a more complex plot in a more restrained "ruleset". It made me want to watch again some movies and play some videogames, though :)

Free password management solution: KeePass

For many years I've been using a commercial password management solution, and despite being happy with it, I've had some issues: pay for each platform (now free in read-only model, but wasn't always this way), major version changes rendering some old platforms obsolete, lack of Linux support... So after some hesitation and research I migrated to a free, Linux-compatible and as a bonus opensource, alternative: KeePass.

This are the tools around this solution that I use:

  • KeeWeb: Multi-platform and with options to sync to Dropbox, Google Drive and others
  • KeePassX: Multi-patform binaries
  • KeePass2: Binaries for Ubuntu
  • KeePass: Binaries for Windows
  • KeePassDroid: Android implementation without shady in-app purchases, etc.
  • MiniKeePass: iOS implementation, again recommended one without untrusted sources, in-app purchases, etc.

And a few tips:

  • The UI is functional but ugly, don't expect anything fancy. That said, it is fast to add new data, search works fine and you can customize a lot
  • For Android I just copy & paste the database file into the phone, for iOS is not that easy, but opening from Box/Dropbox & "send to MiniKeePass" does the job without needing iTunes
  • I haven't tried online synchronization as I prefer the DB file not to be moving around too much, but there are plugins and options to do it
  • There are some plugins for KeePass but I had really bad results trying to migrate existing data with them, so I transformed the problem into an opportunity to do a huge cleanup of old & unused credentials. But be wary of migration plugins as some only work with certain versions or might not even work

Book Review: Peopleware: Productive Projects and Teams

Using my commute time I've just finished reading another book, this time about people and team management. And after a nice example on the web of a review including side-notes, I've decided to copy the idea and also provide some notes when worth it. I just take screenshots from the tablet or mini-notes if is a Kindle e-book, so don't expect anything fancy or detailed.


Peopleware book cover

Title: Peopleware: Productive Projects and Teams

Author: Tom DeMarco, Tim Lister

The review is based on the 3rd edition, which about a book that was first written at 1987 is significant.
I was recommended this book and given that I now have to manage a small development team and interact more actively with the full organization of the company I gave it high priority on my reading list. Ther results are quite satisfying, I can't but agree on so many points about how things should be done.

Issues with traditional rules, with policies, with the furniture and office disposition, with noise, with methodologies, with people... Along the 39 chapters this book is a journey about the most common things that are handled wrongly, but also about solutions, good alternatives to those problems. Combined with quite a few real world examples (sadly usually about bad scenarios), this reading feels like almost radical because of how sincerely and plainly puts some problems.

Both the good advices and the listings of things to be wary or directly fight off are pure gold, and if I had to choose something as bad, it would be really hard... maybe that the authors' humour a few times is not of my taste (but usually it is). A more than recommended read!


Elements of a healthy organization:

  • Make a cult of quality
  • Provide lots of satisfying closure
  • Build a sense of eliteness
  • Allow and encourage heterogeneity
  • Preserve and protect successful teams
  • Provide strategic but not tactical direction

Quick cheklist of things to fight against:

  • Furniture Police
  • corporate entropy
  • teamcidal tendencies
  • no time to add quality to the product
  • Parkinson's Law
  • formal Methodologies
  • low E-Factor ( E-Factor = Uninterrupted hours / Body-present hours )

Management basics:

  • Get the right people
  • Make them happy so they don't want to leave
  • Turn them loose

The purpose of a team is not goal attainment but goal alignment.

Top teamicide techniques:

  • Defensive management
  • Bureaucracy
  • Physical separation
  • Fragmentation of people's time
  • Quality reduction of the product
  • Phony deadlines
  • Clique control
Managerial addons:
  • Annual salary or merit reviews
  • Management by objectives
  • Praise of certain workers for extraordinary/fast accomplishment
  • Awards, prizes, bonuses tied to performance
  • Performance measurement in almost any form

Work to rule: Form of strike in which workers follow exactly to the rule every procedure, norm and step required for every task.

Open organization: Pushing all information to everybody instead of letting people pull for information they actually care about.
"Life is short. If you need to know everything in order to do anything, you're not going to get much done."

Unwritten (and bad) rule at work: Silence gives consent. If you don't object to things it is implied that you give your consent. This causes extra work having to make clear when you don't. Repeal this passive consent.

Need-to-know email test: Before sending any email, think about what you need for that person if really needs to know the information, or how to make him/her self-coordinate instead of depend on your emails.

Introducing changes: The introducer has all those who benefit from the old [...] as enemies, and has lukewarm defenders in all those who might benefit from the new. [...] The equation is unbalanced against change. People hate change. When we start out to change, it is never certain that we will succeed.

Naive model of how change happens:
Old status quo --better idea--> New status quo

Stair change model:
Old status quo --Foreign element--> Chaos --Transforming idea--> Practice & integration --> New status quo

Foreign element can be an outside force or the world changing.

Brainstorming facilitator ideas to restart participants' thinking:

  • Analogy thinking: How does nature solve this or a similar problem?
  • Inversion: How might we achieve the opposite of our goal?
  • Immersion: How might you project yourself into the problem?

Hiding your Linkedin connections list

Receiving Linkedin invitations to connect is the most common action you do on the work-oriented social network. So frequent, that I know quite some people that simply pile up dozens, then hundreds of invitations, not wanting to accept them. The reason is usually the same: It's a recruiter that either didn't even sent a private message to introduce himself/herself, or that if they did... it smells like a template filled just with your name and as much as your current company name.

This is sad, because I really believe in the power of Linkedin as a source of good talent, but so much noise and flood of low (or no) effort recruiting attempts, sometimes even blind shooting (or worse, receiving similar messages from multiple people of the same company's HR department) just creates an ugly picture of the recruitment job. And while I also suffer them from time to time, I've also had pleasant experiences, both regarding job changes and just having good chats explaining my situation and reasoning to not wanting to switch job.

But there's also a part of me that is a bit paranoid regarding privacy, so since long ago I found what I think is the single most interesting privacy option at linkedin: Changing your connections list privacy to private. Or more especifically, changing it so your contacts will only see those of your connections that are shared, that they also have on their contact list. This is not only a good defense line to keep your contact lists private, but also a bit of a trolling mechanism for those lazy recruiters who don't do their homework: "sure, you want us to connect so you can try stealing or spamming my contact list? No problem, but there's a surprise waiting for you". It also is interesting if at your job you have some referal prizes, which can sound selfish but I've seen HR departments prey every employee Linkedin hunting for fresh meat, and then annoy some people from multiple sources almost at once.

This handy option can be found under Privacy & Settings:
The most interesting privacy option

As I said, it is not always the case and there are good recruiters too (I've met a few), but the market is saturated with unprofessional people and this helps to keep them at bay, or at least frustrate their attempts of grabbing your connections.

Good lessons learned from past jobs

We sometimes are too negative and forget that many times there's also a bright side about most situations. For example, when we don't end nicely a work relationship, we tend to only remember what went wrong (if it did, that is). This post is a small recapitulation of good things I've learned on each and every past job, no matter if it was overall a good experience or not.

At my first job, Eidos (now Alhambra-Eidos, and NOT the videogame publisher) I had the luck of directly learning a good way to build software: 3-layer applications, separation of web templates and code, SQL Server stored procedures instead of SQL in strings, distributed components... They also hosted for free one of my defunct websites for many years.

At the second job, Surfernet, I did some of the coolest projects: A full MSN Messenger client from scratch (fully implemented the protocol), a Winamp-like MP3 player, and other nice applications with fancy graphics using Win32 API. It was physically exhausting (I worked from 8AM to 1PM, + going to university until 9PM) and schedule was always tight (usually projects took 1,2 months max.) but I learned a lot.

At the third job, I mostly developed the sense of teamwork. Development was a tiny fraction of the company and not well cared about, but the four of us took the daily job with tons of humor and smiles up to the day we left.

ilitia was the 4th job, and I lasted there for 4 years. On one side, it was a job where I matured a lot: Long times in a client, dozens of projects built in quite varied languages ranging ANSI C to advanced C# (.NET Remoting, threading in the pre-C# 2.0 era, ...), first time ever doing testing (even TDD!), setting up a .NET continuous integration server, my first usergroup and event talks (giving the first one in front of 200 geeks was really scary), even managing a small team of two people in my last months... On the other side, lots and lots of fond memories, parties, friends made (some of my best ones come from here).

Then came NAVTEQ, an important milestone because I got out of consulting. I learned to fight for what I think it is right, whenever it is the appropiate programming language (instead of a random management decision), pushing for rewriting components, or daring to peek into heavy algorithms-related code (I optimized an A* component). It was also the first time I had to talk in english at work but outside of events/talks.

Nokia shutdown NAVTEQ Madrid offices, and I ended up hired at Tuenti, another place where I've been almost 4 years. Here I got way out of my comfort zone, switching from a full .NET stack to a LAMP one (but hey, at least was object oriented PHP!). By far, Tuenti is the place where I've learned most and quickest, pacing being so fast that we joked about 6 months there being like 2 years at any other company. Lots of high scalability concepts, watching a website grow to millions of users and huge numbers of visits. It was a monolith but it worked nice and we were better than Facebook in Spain for quite some time. The "work hard, party hard" motto was 200% true, but I would repeat the experience without a doubt.

Minijuegos was the seventh job. Wanting to go back down to building big chunks of something from scratch (or almost) I joined. Between three people (CTO, a junior dev and me) we were able to fully build an online games portal, avatar generation system, CMS, APIs, payment gateways... I was able to put into practice theory learned in the past, work with asynchronous jobs... and work for once in something related with videogames! (my childhood dream). Things slowed down and tasks weren't so challenging but I did my "Mr. Wolf" role, got "version 1.0" done and made some good friends there too.

CartoDB (Vizzuality in 2014) was another radical shift, ditching my PHP and MySQL knowledge to start with Ruby (on and off Rails) and PostgreSQL, and this time moving to a full backend engineer role. There I learned a lot about databases, importing big amounts of data, manipulation and transformation of data, heavy DB-related operations, developing and maintaining APIs, and lots of interesting concepts of mapping and GIS (although I only grasped that world). I'm happy because I think I was able to hold up with a big part of the backend, alone for a while and then with some great colleages once we grew.

And now, The Motion marks the 9th job. I have lost sight of my comfort zone: now I'm working with Python, microservices, containers, AWS, managing a small team... And getting for once deep into devops tasks... We'll see how it goes ;)

Previous entries