Friday, May 7, 2021

A new home

 After a tough process of importing and editing, I’ve moved all my posts both in Medium and here in Blogspot to a new address in https://gonzalo.f-v.es.

Sunday, April 26, 2015

React-native: some context and a few wrinkles

React native is a way to build iOS applications using Javascript. The idea is not radically new, since you are probably aware of PhoneGap/Cordova and others like that. I myself played with something similar long time ago.

The interesting thing is that React native follows the steps on ReactJS, a Javascript library that provides wonderful performance in updating the DOM.

It also moves towards CSS into Javascript. You may think "What a crap idea moving CSS into JS?". At least I thought that myself, until I watched the below slides.


Besides, one of my colleagues have recently developed a wonderful SPA using React, so  I wanted to give a test to get the idea.

So OK, I followed the instructions, installed the dependencies, created the project and launched it.

It fails with a red screen showing a lot of errors related to flow. It turns out the version you get by default when following the instructions is flow 0.10.0. And there is some kind of incompatibility. So you need to install flow 0.9.2

$ brew unlink flow 
$ brew install https://raw.githubusercontent.com/Homebrew/homebrew/6ea5842b3b0101d269a3d66bc44456222da82cc6/Library/Formula/flow.rb

So now you relaunch and you get a wonderful iOS emulator. Hurray!!! Let's tweak. The screen tells you that you should tweak the file index.ios.js.

You go to your XCode project and you can't find the file anywhere. Where the heck is it?

It turns out you have to edit the file OUTSIDE of XCode. Which for me is madness.

Apart from that, the experience is being quite interesting. On thing I like AND dislike is that the components that React Native tells you to use are direct mapping of the iOS ones. Which means there is a full translation from JS to native code.

Lots of things to learn. But very good performance (it is not a WebView at all).

So good idea, but some wrinkles pending.

Monday, February 9, 2015

Think big

A few weeks ago, I'm not sure why, one of my daughters proposed to create a system to find cars inside garages at the shopping center. The car would locate itself using a GPS and then it would emit via radio. I told her that GPS waves don't go through the walls, and I tried to convince her to look for different approaches (like generating a wifi hotspot and using a mobile app, locate the car). 
The truth is I told her it wasn't possible. I just asked her about that and she has confirmed it.

In retrospect, I think my idea is a good one. But hers is bigger. Because it doesn't work only when you know the area but you can't find the car. It works always.

Thinking about "it's not possible", I was listening today a podcast (by the way if you're into technology and entrepeneurship, Techzing is really good). The episode is a bit old but they were talking about emulating Elon Musk, a guy who has several great successes proving wrong "that's not possible" from the rest of the world.

And when I've got home, reading an article, I've discovered that in the list of crazy ideas that led to Google Glass, there is a place for... GPS inside buildings.

Saturday, January 31, 2015

Developers - The neverending story

A year ago I vaguely new something about Scala. Today I'm not an expert, but I'm reasonably proficient in Scala, with some experience in Lift, Slick, and some incursions in akka. I knew almost nothing about devops, and now I use almost everyday AWS, ansible and docker.

I'm far from an expert in any of those technologies. But I work with all of them. 

Not bad for a year. 

However, as a developer the amount of effort you need to keep reasonably up-to-date is huge. These days I find myself trying to keep learning the mentioned technologies, but also get a grip of others. 
  • Akka is nice, but about Spark and Hadoop (as a way to, broadly speaking, distribute load. Yes, I know they are completely different beasts). 
  • Lift is an interesting concept, but what about going the other end with Futures-based Twitter-sponsored lightning fast Finatra
  • Jquery is OK, but now I'm reading about Google sponsored AngularJS and Facebook's React. Bootstrap is great, but did you know about foundation?. 
  • Granted gradle is great (much better than SBT in my inexperienced opinion, even though after Pivotal shuting down their Groovy development, the future is a bit uncertain), But did you know anything about bower (again different beasts, bower is only for front-end technologies).

Argh.



Monday, January 19, 2015

Technical tests

In March 2014 I was made redundant (business unit closing).

I needed to get a job and I participated in loads of selection processes. Sometimes I received feedback, sometimes not. But I remember two specific processes because I received completely different feedback from "technical tests" in a matter of days


  • Process A. Thanks for taking the time to complete our online testing. Unfortunately, your score did not meet the requirements of this role.
  • Process B. Thanks for taking the time to take the test. I'm delighted to say that your solutions were all excellent


They were ver similar positions in two different companies. And the kind of tests were very different indeed.


  • Process A is what I name as "certification test". You don't need to know how to develop. You just need the proper answers to the specific questions. You study, you pass, no matter your experience.
  • Process B, was a typical codility test, but without the limitation in time. Codility tests are programming tasks around algorithms. I aced it, because I had been doing some courses and tests on algorithms not long before, to prepare for interviews. Besides, I remember getting stuck in one of the subtests, but with no time limitation, it was a matter of be calm and find a way.


Codility is a step forward from those text-based-pretend-you-can-develop-because-you-know-some-tricky-question tests. If you are recruiting for a developer, at least let her develop. However, I think it is too focused on algorithms. But knowing how to implement an algorithm doesn't make you a good developer and/or a good fit for the company.

Problem is technical knowledge or competence is not he best indicator of fitting in the company.

Sure. You need some kind of test, to assess if she really knows how to program. But it doesn't have to be too fancy. Fizzbuzz would do. Because most of us are paid to solve users' problems.

However, I keep feeling there is no easy process to hire people. At all.






Sunday, January 11, 2015

New Spanish eGovernment law

I was a Spanish Civil Servant from 2006 to 2012 (technically I'm still a Spanish Civil Servant on leave). I've worked for different branches of the Spanish Government from September 2000 to November 2012. Civil Service in Spain is reputed to be lazy among Spaniards. But having worked for all kind of employers (startups, multinationals, NGO and Government Agencies), I can say I've found lazy people there but I've also found engaged workers. In fact the laziest people weren't in Government. And many of the most committed were.

That's a pretty long disclaimer.

When I came to London, I knew I had to register at the Spanish Embassy. But apparently the only way to do it is physically or sending your official ID/passport using special delivery mail.

There was a similar issue with changing vehicles documentation (my car). No way to do it online.

Fortunately (I thought), there is a Spanish law that says (s6.1) you have the right to be able to apply for anything using electronic procedures (as in web, digital signature...). There is a grace period (3rd ending disposition, ss2), that ended in 2009. I know the law because I worked on those issues (in particular digital signature, but in general electronic government) from 2008 to 2012.

So I decided to formulate a complaint through Spanish Ombudsman. Initial response was highly satisfactory. They were going to ask for information to the relevant authorities.

Public Administration Department confirmed that all central government procedures (not naming any in particular) should be fully adapted to initiate online and that maybe it was a temporary issue.

Foreign Affairs Ministry replied that forms where on the web page, you can download and that was enough (no pointer to be able to use general registry that would have been at least partial adaptation). I replied that the law is clear. I must be able to do it online (specially when I can do it offline by traditional mail).

Vehicles related agency initially didn't want to reply. And finally replied that it was related to taxes and they couldn't check the proper address and they depended upon municipalities. They expressed that this is a common issue with people living in Spain (as in "hey, we are not law abiding agency, but it is nothing related to people living abroad").

But what I found more disappointing (yes, even more than not enforcing the law) was the reply from the Spanish Ombudsman. After more than year asking information, they decided to close the complain because you can download the forms (again that's not what the law says).

I'm pretty sure all the authorities implicated know what the law says. I'm pretty sure people on the Public Administration Department have tried to change their car address. They all know there should have been the required processes in place for 2010, but now they're ashamed of it and they don't have money to a full adaptation. What I don't really understand is Spanish Ombudsman position, but it doesn't really matter.

These days there is some buzz in Spain around a new law for eGovernment.

We already have a law from 2007 that is violated by the own Public Service.

Tuesday, January 6, 2015

What recruiters taught me about looking for a job

There are good recruiters. And there are bad recruiters. The good ones help you to find a job. The bad ones teach you how to look for a job.

If you are looking for a job, be sure to do just the opposite of what the bad ones do.

Almost every other day I receive an email offering me a position.

"Good for you". 

No, bad for me.

Most of the emails come from people I haven't spoken to. They don't know if I'm looking for a new job. They got my email and an old version of my CV somewhere. They match keywords on the profile with my CV and if there is something in common they send the email. They send the same message to dozens, (or hundreds) of recipients. They mix profiles in London with other roles in Manchester (or even Australia). They mix graduates/junior roles with senior. The profile include the typical keywords "competitive salary" "agile" "cutting edge"

I try to reply to them, sometimes with a canned response.

But 95% of those contacts are not relevant. It's time reading and time replying (even a canned response). They are OK when in search mode (last March I was going to be made redundant and I wanted maximum exposure). But when not in active search, my skills are in demand, and I won't usually consider those contacts even with pretty high salaries.

So for me what are the really tempting contacts? The ones that try to establish a relationship, that try to understand who am I, what can I provide, why I'm interesting. Sometimes they invite for coffee to understand what I'm looking for. Sometimes you see accesses to the LinkedIn profile and then a carefully crafted email. Sometimes they connect through my Stackoverflow profile and then a contact explaining what they like. And the better response rate is when it's a friend the one who try to convince you to go to her company.

So what does teach me about looking for a job/applying?

Now, when I really want a job, I put myself on the recipient's role. What if it receives dozens of emails? How is she going to know that I'm the perfect fit?

Some obvious tips:


  1. You can contact a company with a cold email (as in without role/offer), but with nothing else you won't get any reply. Even if you send to thousands recipients, you probably won't get any response. The typical "I've sent dozens of CVs" is bogus.
  2. Either when cold email OR when replying to a specific role, research the company and try to understand what you can provide to that company, what is the company's culture, and carefully craft either the letter or the CV (or both)
  3. Try to understand profiles, not if you match some/all of the requirements. Once you've understood the profile, apply with a cover letter matching your profile to the requirements.
  4. If in search mode, the previous apply when contacting final companies. When contacting recruiters, put in your CV as much keywords/technologies as you've used (even if obvious to your profile or if the contact with that technology was minimal).
  5. The better jobs are the ones your friends look for you. LinkedIn connections are not friends.

Yeah, it's lots of work. But I think it really pays off.


Friday, January 2, 2015

Developers are from Mars, users from Venus

From 2008 to 2012, I was the project manager of a project with very special users. The kind of project was in the field of digital signature for the Spanish Government. I was in charge not only of acting as a Product Owner (determine features and priorities), but also provided telephone support (second point of contact, that in fact used to be first). The main group of users where well-educated, high-ranked with lots of responsibility in their own field, but non-technical. There were also personal assistants for the previous group, but it wasn't a different group in terms of behavior towards technology.
I remember that apparently trivial questions could pose a challenge. Many people didn't know what a browser is, let alone there were different ones. 
I remember that digital signature at that time was a challenge (install Java, install a certificate, provide appropriate permissions for an applet). Something would fail, and you didn't know what. You would have to debug the process. The other problem for the users would be speed. 
However, as developers it was difficult not to focus in a different set of features, and not try to improve the existing issues.
At that time I started to perceive the radically different world-views between developers and users. I started to understand when my mom would get angry of me for keeping 10 open tabs while navigating, or to perceive that the AND/OR boolean logic can be quite tricky for non-techies. But I also became aware that maybe when in 2006 I was acting as part of the client team for an outsourced project, it was not a bad provider what time after time would deliver a different thing from what we (technical guys) where expecting.
Nowadays, I think communication between users and developers is of great importance. The "I'll tell you want I want when I see it" is not something to be dismissed. 
The agile approach is not a "quick and dirty hack" but a "let's understand what the user is looking for". Apart from helping managing risk.

Wednesday, December 31, 2014

Future

More than six years ago I started this blog. I wanted to practice my English so that I would improve it.

Four years later I came to London and sort of abandoned it, thinking that working in an English speaking environment would be enough to practice.

But it is not. I really think blogging is a good way to improve your written expression, to clarify your thoughts. And sometimes what you tell is worthwhile for others. It is not specifically related to speaking a different language (but it also helps that).

So my New Year's resolution is to write more often. Just to practice. And hoping this could be of use for somebody.

Happy New Year.


Thursday, December 25, 2014

Happy Christmas

Happy Christmas and a wonderful 2015 to all of my readers.

Monday, December 22, 2014

I'm a geek


A few weeks ago, I bid and won a PowerEdge 2650 server for three quids (plus another 6 of renting a car and collecting it).

It´s an old piece of hardware (32 bits double Xeon, 4gb of RAM), bulky as hell (or so does my back says) and noisy as a diesel generator.

When I came home, my daughters said that couldn't be a computer as it didn't have input/output devices like a keyboard or a monitor. I didn't bother to explain a server does not need a screen or a keyboard. Whether that's correct is arguable. They are learning Computer Science at school, and I only interfere when I see a big mistake.

Anyway, bringing home the computer was only part of the project. Hey, I'm a geek, but having a server on the floor of my dining room is not where the fun lies even if my wife allows it. First, I needed to open its case, take a look at the the inside (a bit insane, yes I know).

Then, I needed to install the operating system. I thought that was going to be easy. I install different operating systems all the time. But...

... I usually install using an USB drive and the server would refuse to boot up from the USB drive.

OK. It has CD-reader but ...

... I don´t have a CD-Writer. Who writes CDs anyway?

Already thinking how/where to record a CD, I decided to investigate something called PXE. PXE tends to appear in many BIOS as install from the network. In very general terms, the BIOS is enough to look for a DHCP server that looks for sort of FTP server, that provides a typical file that allows to install an Operating System.

Unfortunately, I only had a Windows machine available (having two daughters in secondary school, Linux has been unfortunately relegated)

But there is an old post that explain how to install Ubuntu from windows. The only tweak was the needed to get some current image. You need to get the image from this URL

One small tweak while installing is something that had already happened while installing a server at work. The screen would go blank with the message "Cannot display this video mode". A quick search, and one of the first results was what I needed.

Once I installed the basic server, I only installed SSH server. The rest of the server was going to be installed using Ansible. Another topic for another time

I´m a geek.

And, my wife doesn't read my blog and she is a saint.

Saturday, October 4, 2014

Agile is about managing risk

It is not easy to explain what is agile or the need of agile practices in software development. Agile is not only about releasing early a valuable product even if it is the highest priority.

Anyway, a few days ago I found this tweet:

I showed the picture to my wife, and I tried to explain it to her. It was funny because she couldn't understand what's wrong with the first part of the picture and why the second one is the proper way to build software. She insisted that if you want to build a car, you should do the a wheel the proper way, then the other wheel, then the body and finally you deliver the car.

So why many people in the software development world are trying to deliver a skateboard, and then a bike, and then a scooter, and finally a car?

I think it is about managing risk.

It is not about following the coolest paradigm or techniques. But about identifying what usually goes wrong when developing software, and providing solutions.

Users complain that what they receive is not what they asked for, it is delivered late, and it costs too much. Software developers say users don't know what they want, and they keep changing the vision throughout the project. As a result, many software projects end as a failure

To avoid it, the typical solution is to increase the requirements analysis phase (not a straw-man, see previous link). You set in stone what the user wants and if the user changes his/her opinion (or he/she doesn't understand what appears on the requirements document), bad for him/her. Then, the software is designed, properly built, tested and deployed. And finally (or at least later in the process) you put a wrap and show it to the user. I call it a waterfall mindset.

Traditional software development

From a pure risk perspective that is a lot of uncertainty. We don't know if that is what the user wants. We don't know if we'll deliver on time. Any change could have catastrophic consequences. Your product is not ready to look until very late in the process.

Agile is almost the opposite. It's about delivering early, something that can be used right from the start, and slowly enhance it. It is about talking with the user throughout the process. It is about developing software WITH the user. Problems tend to appear early in the process, and you tackle them as they appear. Sometimes problems are the result of a growth without a blueprint, and you need to rebuild things you've already built. But that's OK, because Agile is about facing risks.

I've been part of teams with daily stand-ups, with sprints, with code reviews, but with a waterfall mindset. Agile shouldn't be a warm feeling of this is right, or cool. Agile should be a way to minimize risk. 

Saturday, July 12, 2014

Jetty

Lately I've had three different issues with Jetty. Two of them were those kind of issues that are not directly related to the problem. The third proved to be a bit more tricky.

The first one was the typical example of "correlation does not equal causation". I started getting a weird error trying to run a Scala based web application in Jetty. And I kept received the following error "Could not create symlink /tmp". I thought it could be related to some kind of permissions issue. In the end the problem was more basic: I'd exhausted all the free space and nothing could be written to disk (and jetty couldn't create a symlink).

The second one was one of those Doh! moments. My web application didn't respond to any request. But it didn't show any error in the logs. I'm quite ashamed of putting this in writing but the issue was that the web application was paused in a breakpoint while debugging.

The third one was a bit strange. The web application obviously has static files. Some of the Javascript files were served correctly, other Javascript files weren't. The files not served were always the same. I didn't detect any specific pattern. But the fact was that Chrome would receive net::ERR_EMPTY_RESPONSE, and the Jetty was logging an exception NoSuchMethodError in javax.servlet.http.HttpServletRequest.isAsyncStarted  

The typical answer relates the problem to having several versions of the servlet api. But I somehow didn't pay too much attention because [sarcasm on] everybody knows servlet-api.2.5 and javax.servlet-api-3.1.0 are not different versions of the same API [sarcasm off] (indeed they ARE different versions of the servlet API)

Sunday, June 8, 2014

Android 4.4.3: Sony Xperia U

A few months ago, I upgraded the firmware for my Sony Xperia U. It turns out that the place I used to download the firmware updates from, wasn't providing new updates, so sometime ago, I migrated to a new source of firmware updates.

I knew that Cyanogenmod was already providing Over The Air (OTA) updates. What I didn't know is that today's update would bring Android 4.4.3 when even people with a Nexus 7 has not receive Google's update yet.

Over the air. No glitches. 

That's awesome.

Scala: First impressions

A couple of months ago I started working for a different company. I'm quite happy there for many reasons. But one of them is having the opportunity to learn a new language: Scala. It's uncommon to get a programming job when you don't know the syntax of the programming language used. But if you really think about it, it's much better to hire somebody passionate about technology and that really loves to learn (and commit) than somebody that knows the language but doesn't give a d***mn.

Anyway, after a couple of months, I thought it would be good to write my experience about the language.

First. What is Scala? Scala is a programming language that allows to develop both Object Oriented Programming and Functional programming. Functional programming is a new paradigm of developing that is opposed to Imperative programming. In a nutshell, imagine SQL, the language for querying databases. When writing a query you don't write code like "Take the first row, check if satisfies the WHERE clause, if it does, append to the list of results, take the following row...". You simply specify the criteria for the results and that's it.

But that way of querying with SQL that it's inside of almost every developer's brain, involves a new way of thinking about problems for things that are not database queries. And, believe me, it takes time to learn. To the point that today, a couple of months later, and halfway a course devoted to it, I keep writing imperative instead of Functional code.

One could ask "if it is that complicated, why bother?". Multithreading is tricky, but CPUs have stopped increasing speed and they are increasing number of cores, which implies concurrency. Functional programming promises to help in that process. And in fact, one the emerging libraries in the Java field, the akka library, comes from the Scala world. The famous lambda in Java 8 is functional programming.

Regarding the specific language (not the functional paradigm), I have mixed feelings. I find it brilliant sometimes. And others I see it weird. As an example, I love the tuple concept (the ability for a function to return a couple of values at the same time without defining a class for that). But I almost scream each time I have to refer to the first element of the tuple with an _1 (as opposed to the typical _0).

I remember loving Ruby and Rails almost in any line of code. Everything felt natural and although in retrospective there were weird things, my general feeling was that code flows. With Scala I'm just starting to feel productive. With Scala love appears, but it tends to be in "this is freaking awesome" moments from time to time. [OMG, love and code. I'm really a nerd, isn't it?]

Don't get me wrong. Once you get the hang of Scala, it is much much much better than Java. It has a strong typing system like java, but with type inference that allows to skip types in some declarations. It tends to be concise (sometimes to the extreme). In its origin, Scala allowed to generate code both for the JVM and .NET runtime environments. I suspect that's no longer the case and nobody develops in Scala using the .NET.

One thing I find mind blowing (for bad and for good) is implicits. Implicits allow a type to be considered as a different one, upgrading the type to a different one. That is very powerful because the implicit mechanism relies in transforming functions (instead of inheritance or casting). Believe me when I say it is brilliant. But sometimes it leaves you scratching your head thinking why your code does not work until you remember to import the proper implicit conversion function.

The editor would need a post on its own. There is an Eclipse version for Scala. But until last Monday, I wasn't able to do automatic indentation without risking to mangle my code. Refactoring is for brave. And I'm living in nightly updates for Scala-IDE. I've been told that IntelliJ is much better, but I'm trying to avoid it.

Finally, learning a new language is not only the language itself, but a whole array of technologies around. OK. You learn Scala, and then you need to learn a web framework. Play would be the equivalent to the latest versions of Spring MVC or even Rails. But I'm in a love-hate relationship with lift (which I find absolutely different to anything else except for Meteor).  And you also need an ORM. The typical one would be hibernate in the Java world or ActiveRecord for ruby. Slick is not the more used, but it is really promising.

And that's it.

I'm REALLY happy of being able to learn Scala. And I think it has transformed my programming habits for years to come (and it will do more if I leave behind the beginner level).

To the point that I read val instead of let.

I'm not entirely sure I would use Scala for all kind of projects. But certainly I would do for backend mission-critical code.

Thursday, May 29, 2014

Maximizing Macbook Pro's battery

I have an old Dell Vostro 1720 and an Acer Aspire One AO110. Both are usable (and used), but have no battery.

So when I got my shiny brand new Mac, I decided I had to look after the battery.

And I read everything I could find about how to take care Macbook's battery.

Apparently, old models used to need a periodic full discharge followed by a full recharge.

Apparently, that is no longer the case.

I've tried to follow the advice in Apple's page, and I tend to leave it unplugged every day once or more times while working with it.

And I've noticed that from a Full Charge Capacity of around 8500 mAh, it has been improving to around 9000 mAh

It is too soon to know how it will last in the future, but it is a good sympton.

You can check full charge capacity at "System Information". Go to "About this Mac", then click on "More info...",  then on "System Report" and finally select "Power".




Friday, May 9, 2014

Good examples

I was made redundant at the end of March. It was a very stressful process but it ended up very well, as I've been in my new job for almost a month and I'm very happy.

During process, I had to work with lots of recruiters. Both from inside and outside my former company. One thing many people in the recruiting industry fail to understand is that every interaction counts. For better or for worse.

There were also people who just do their jobs. And that's OK.

There were also bad apples. I think it would be useless to point them.

But there were some very few absolutely brilliant. I remember one specific case. When each and every interaction is memorable, you know who you are going to recommend if asked.

Thursday, April 24, 2014

PDOException

Small and uninteresting post. But I've been dealing with an issue for hours and maybe somebody can benefit from this in the future.

While trying to index using Sphinx, I was getting the following error

[PDOException]                                  
  SQLSTATE[HY000] [2002] No such file or directory


The issue was not related to Sphinx, but to a related connection between PHP/Symphony2 and MySQL. Unfortunately the PHP web application and MySQL were working together and that made the issue more difficult to track.

Most of the replies around the Internet involve file sockets and the like. 

The real solution is not to connect to "localhost", but to 127.0.0.1

Yeah. I know localhost and 127.0.0.1 should be the same. Apparently it is a Mac weirdness. Beats me!!!

Saturday, March 15, 2014

Acquisitions

Today I wanted to talk about two acquisitions.

  • On one side, Facebook and Whatsapp. $19 billion. There are many different opinions. Craziness. Logic. IMO the money paid is crazy, but the deal has a lot of logic for Facebook. Because for many people around me (including teens), Whatsapp is THE social network. They(we?) share things like images and videos, status. We use it almost everyday. Food for thought: when was the last time you got to know anything reading it on Facebook? 
  • On the other side, Simple and BBVA. Simple wants to be the new bank. And it has been bought by a well known international Spanish bank. $117 million. I worked for one of the banks that end up being BBVA in 1999. Very interesting project by the way (Data Warehouse). At that time, BBVA launched a pure online bank called Uno-e. It was supposed to be the way to go. Very appealing technology. Santander, another international Spanish bank bought something called Patagon. 15 years later Patagon does not exist (it is called Openbank). But both Openbank and Uno-e languish in the Spanish local market. I would be surprised if Simple does not follow a similar path.

I know there will be lots of different perspectives. But don't think about the amount. Think about the whole picture.


Thursday, March 13, 2014

Optimizing

A few days ago I went to a meeting and we were discussing (among lots of different topics) various optimizing mechanisms for a web application.

After the meeting had ended, I came to the conclusion that, implicit in all the conversation, I was not fully aware of the most obvious step previous to any optimization:

Measure

You cannot optimize if you don't know what do you need to optimize. Is it a database problem? A web problem?

The guy interviewing had tried to push me further.  What to measure? Memory, CPU and request time I vaguely remember replying. What tools to use? At that point I probably screwed up the meeting, but that worth a post on its own.

I was thinking along these terms while preparing for a different interview. And I suddenly realized that "what to measure" is also important and the answer I provided can be valid but is not the only one. Yes, I knew it from courses. But now I've learnt it.

Good thing about selection processes is that you learn a lot from the processes themselves.