core error

Recently I red a blog post from Julia Evans about what kind of questions she use to ask when attending to a job interview. I found this list quite interesting (for both the interviewer and the interviewee) since it’s categorized,  balanced and smart!

Engineering practices

  • Do you use version control? (if not, the interview should be over =))
  • Do you test your code?
  • How do you make sure that all code is understood by more than one person?
  • Do you do code review? Does all code get reviewed?
  • Do you have an issue tracker?
  • Describe your deployment process – how do you find bugs in your team’s code? What recourse do you have when you find a serious bug in production code?
  • Who is responsible for doing deployment? How often do you deploy?
  • How do you think about code correctness?
  • When something goes wrong, how do you handle it? Do devs get shamed for breaking the build?
  • How/when do developers talk to non-developers? Is it easy to talk to the people who are will be using your product?
  • Can I see some code the team I’m interviewing for has written? (from an open-source project you work on, for example)
  • Who are the people at your company with a lot of depth of experience? Will I be able to talk to them?
  • What’s your approach to technical debt?

Management Style

  • How does engineering work get assigned?
  • How are technical decisions made and communicated?
  • How do you balance support work and feature development?
  • Can you give me an example of someone who’s been in a technical role at your company for a long time, and how their responsibilities and role have changed? (I love this question)
  • Do you have a dedicated designer? QA? Technical writer? Dev manager?
  • How often do you have meetings? Are there any scheduled/standing meetings? Who talks to customers (if appropriate) and how?
  • Has there been a situation where someone raised an ethical concern? If so, how was it handled? If not, have there really not been any?
  • How are decisions made? Is architecture dictated top down? Are ideas from anyone welcomed? If so, in what scope/context?
  • How are disagreements solved – both technical disagreements and other kinds? What happens when personalities clash?
  • Can you tell me about a time when you’ve had to let someone go?
  • Is there a written roadmap all developers can see? How far into the future does it extend? How closely is it followed?
  • How is performance evaluated?

Quality of life

  • How much vacation do people get? If there’s “unlimited” vacation, how much vacation do people normally take?
  • Is it possible to take sabbaticals or unpaid vacation?
  • How many women work for you? What’s your process for making sure you have diversity in other ways?
  • How many hours do people work in an average week? In your busiest weeks?
  • Is variability tolerated or is everyone expected to be on the same schedule?
  • What time do people normally leave work?
  • Would I need to be on call? How often?
  • How often are there emergencies or times when people have to work extra hours?
  • What is your turnover rate like? How many devs were hired last year and how many left?
  • What’s your retention rate of women over 1.5 years? Do you think you could’ve done anything differently to keep people who left?
  • Do people work on the weekend?
  • Do people check in when they’re on vacation? How often?
  • Is it possible to work from home, say, 1 or 2 days a week? Does anyone do this? (can be a nice option to have)

As many of these as possible are “statistical” questions – a company may say that they “don’t have hours”, but if everyone leaves at 9pm that’s not a good sign.


  • How do you determine if someone is a poor fit for your company?
  • How are your teams structured? What is the management structure like?
  • How often do you pair? What’s pairing like? How often do inexperienced people work directly with experienced people?
  • What’s the onboarding process like?
  • Is there any sort of institutionalized way of dealing with plateauing or preventing burnout? (Expecting to hear about rotation of duties or location, sabbaticals.)
  • Is it easy to move to other divisions or offices?
  • How does internal communication work? This one is super important and I need to remember to ask it more.
  • Are there catered suppers? (possibly bad)
  • How many hours a week does senior management work? Do they put in 80-hour weeks?

PS: if you have time, take a look at Julia’s blog, for me it has been quite inspiring


I just released my first app: beers

It´s a very simple application but it´s also something I miss since I have a smartphone, a graphic catalog of the beers I take. I’m a beer fan and always love to try new beers but sometimes I forget if I ever tried a specific beer or not and if affirmative, I usually don´t remember if I liked it or not.

The app is so simple that its self-explanatory. Take a look at the screenshots to have an idea about how it works:


CoffeScript is an attempt of  make our Javascript code simpler an more easily maintainable. Basically is a little language which can be compiled (manually or automatically) into javascript code.


Coffescript tries to hide the complexity of Javascript and expose the nice parts of this language.


Here is an example of some Javascript code re-written in CoffeScript:

var cubes, list, math, num, number, opposite, race, square;
var __slice = Array.prototype.slice;
number = 42;
opposite = true;
if (opposite) number = -42;
square = function(x) {
  return x * x;
list = [1, 2, 3, 4, 5];
math = {
  root: Math.sqrt,
  square: square,
  cube: function(x) {
    return x * square(x);

Now in CoffeScript:

# Assignment:
number   = 42
opposite = true

# Conditions:
number = -42 if opposite

# Functions:
square = (x) -> x * x

# Arrays:
list = [1, 2, 3, 4, 5]

# Objects:
math =
  root:   Math.sqrt
  square: square
  cube:   (x) -> x * square x


Dart is the new programming language from Google. It is designed to, in a future, replace Javascript. Its design principles includes:

  • structured yet flexible
  • familiar and natural feeling to programmers
  • high performance and fast application startup.

Dart is meant to replace Javascript and solve some of the main issues this language carries as the client-side standard language:

  • Small scripts often evolve into large web applications with no apparent structure. It’s difficult to be productive when a web application gets large
  • it’s difficult for someone other than the author to read and maintain a particular piece of code
  • Developers have not been able to create homogeneous systems that encompass both client and server

Dart can be run natively in a Virtual Machine inside the browser or can be complied into JavaScript code to be embedded in all the available browsers.

Its syntax is really similar to other well-known languages as Java or C#:

interface Shape {
  num perimeter();

class Rectangle implements Shape {
  final num height, width; 
  Rectangle(num this.height, num this.width);  
  num perimeter() => 2*height + 2*width;     

class Square extends Rectangle {
  Square(num size) : super(size, size);

Many times we need to center align a DIV inside another div. If we know the width of the inner DIV in before hand it is really simple, we can just add the width, margins to 0px and auto and that’s it:

div.inner {
	margin:0px auto;

BUT, things may be more complicated if we don’t know the width of the inner DIV. In this case we need use a different type of display for the DIV (inline-block) and make sure that the outer div text-aligns everything to the center:

div.outer {
	text-align: center;
div.inner {
	display: inline-block;

The reason to this is that DIVs are by default display: block. This kind of display expands to the entire width except if we specify a fixed width but in this case, margin:0px auto. The inline-block display wraps its size around the its contents and allows to be aligned as text inside a div.

Note: Since IE7 doesn't understand the inline-block property, it will be needed to make a small hack to the inner div class for IE7 to work properly:

div.inner {
	display: inline-block;
	zoom: 1;
	*display: inline; #this will be ignored by all browsers except IE

1. Clean Code

This book  is divided into three parts. The first describes the principles, patterns, and practices of writing clean code. The second part consists of several case studies of increasing complexity. Each case study is an exercise in cleaning up code—of transforming a code base that has some problems into one that is sound and efficient. The third part is the payoff: a single chapter containing a list of heuristics and “smells” gathered while creating the case studies. The result is a knowledge base that describes the way we think when we write, read, and clean code.

2. Head First. Design Patterns

This is a gimmicky book that actually works for once. It is an intelligent and well thought-out discussion of Java design patterns, and if you dont know what a design pattern is then this is an excellent way to find out. It is also an interested discussion of object-oriented design. I found that the authors often anticipated my reaction to their initial explanations and asked the questions that I would have asked had it been a lecture.


3. High Performance Websites

Want your web site to display more quickly? This book presents 14 specific rules that will cut 25% to 50% off response time when users request a page. Author Steve Souders, in his job as Chief Performance Yahoo!, collected these best practices while optimizing some of the most-visited pages on the Web. Even sites that had already been highly optimized, such as Yahoo! Search and the Yahoo! Front Page, were able to benefit from these surprisingly simple performance guidelines.


4. High Performance MySQL

High Performance MySQL is the definitive guide to building fast, reliable systems with MySQL. Written by noted experts with years of real-world experience building very large systems, this book covers every aspect of MySQL performance in detail, and focuses on robustness, security, and data integrity. High Performance MySQL teaches you advanced techniques in depth so you can bring out MySQL’s full power. Learn how to design schemas, indexes, queries and advanced MySQL features for maximum performance, and get detailed guidance for tuning your MySQL server, operating system, and hardware to their fullest potential.

5. Succeeding with Agile. Software development using SCRUM

This is the definitive, realistic, actionable guide to starting fast with Scrum and agile–and then succeeding over the long haul. Leading agile consultant and practitioner Mike Cohn presents detailed recommendations, powerful tips, and real-world case studies drawn from his unparalleled experience helping hundreds of software organizations make Scrum and agile work.



NoSQL is a movement promoting a loosely defined class of non-relational data stores that break with a long history of relational databases. These data stores may not require fixed table schemas, usually avoid join operations and typically scale horizontally.


Since usually the NoSQL data stores scale horizontally quite good, they are a serious choice when handling massive amounts of data. These kind of databases may not have the searching, joining and grouping capabilities a SQL data store may offer but on the other hand they provide really quick access to big amounts of data.


some of the most known databases are: BigTable, Cassandra, CouchDB, MongoDB or Membase

This is an example on how to work with MongoDB:

    "username" : "bob",
    "address" : {
        "street" : "123 Main Street",
        "city" : "Springfield",
        "state" : "NY"

db.users.find({"address.state" : "NY"})

In the first part you can see an example of a ‘document’ (row in the SQL World) to be stored in MongoDB. The second exampleis how you can make a query.


  • None
  • Justin Cooney: Great comic, this made me laugh!
  • Justin Cooney: Interesting, I didn't know about the Google App Engine, I'm glad I found your article on it!