Jun 18, 2018
I bought a MacBook Pro in early 2014. It was my first Apple laptop ever.
This machine is glorious. It’s a joy to use. The MagSafe connector, AirDrop, Continuity, Handoff,
macOS, and plenty of other things all contribute to a pleasant experience.
It has served me well for almost five years. Superb touchpad and screen. I use it for development
with Docker, VMs, and all that jazz. It gets a tad slow sometimes, but it’s almost as zippy as when I
originally bought it.
After all these years of honored service, I’m looking to replace it with a newer model equipped with
a larger SSD and a faster processor.
The problem is that Apple has seemingly stopped producing good laptops since 2016. It seems they are
more interested in producing beautiful aluminum sculptures rather than catering to the practical
needs of “pros”.
Newer models have many shortcomings: no more MagSafe, only USB-C ports forcing me to carry a bunch
of dongles, and a smaller battery that lasts less than older models. It also still has problems with
the anti-reflecting coating on the screen coming off after a while.
I could put up with most of these flaws, except for one: the keyboard. It is so unreliable that a
single speck of dust can make it unusable. It’s also so hard to fix a key that Apple prefers to
replace the entire top case when the keyboard fails. Since Apple doesn’t recognize it as a
manufacturing problem, out of warranty repairs are expensive, as in several hundred euros
This problem is very real and happens as frequently as every six months. I don’t want a laptop
that wants me to spend hundreds of euros in repairs every six months after the warranty is over.
The keyboard is the primary interface between me and the laptop. It has to work. It has to be
They now have a repair program and they say turnaround times are five business days or
more. Being deprived of my
work laptop for a week is unacceptable. Especially if you’re knowingly selling me a defective model.
Since they replaced the old, reliable, keyboard with the new version across the board, I have no
other choice but to buy the same defective laptop.
I now have to choose between having a laptop with the latest CPU or one that actually works.
We are at the point where several people are discouraging
others from buying
the latest MacBook Pros, telling them to buy the 2015 model
instead, or even older
I find this trend worrying. Instead of improving its hardware, Apple is sacrificing everything in
the name of making a laptop 1-millimeter thinner and 100 grams lighter. At some point, returns
diminish drastically and we reached that point in 2016 already.
I’m in the lucky position of not being that much locked into the Apple ecosystem. I could switch
to something else if I’m really forced to do so.
Having a lineup of products working well together is Apple’s biggest strength, but also its biggest
I bought an iPhone, an Apple Watch, and AirPods because I first bought a MacBook Pro. Not having a
decent work laptop could be the reason for me to sell them all.
The iPhone becomes a bit less special without AirDrop, Continuity and Handoff. The Apple Watch can
only be used with an iPhone. AirPods are magical, but only when used together with a Mac and an
If I can’t take advantage of all the synergies between their devices, why have them all in the first
place? I could probably do the same with way cheaper (but still good) pieces of equipment at that
Once I cross the line, it’s over. Apple can only push things so far before people start looking
Apple, it’s time to make your laptops great again.
Jan 22, 2018
I’d like to share my experience interviewing at GitLab, where I had applied for the role of Senior
CI/CD Developer near the end of 2017 . I went through a questionnaire, a take-home project
and six interviews over the course of three months. Unfortunately, they didn’t move forward with an
offer in the end.
I did not have to sign an NDA, but I am still not going to go too much into the details of the
process so as to not spoil it.
It is important to note that GitLab is very transparent about compensation and processes and they
make most information available in several places, such as:
Having said that, let’s get started.
As with any other company, the first step involved dusting off my resume, firing up
pandoc, my favorite LaTeX toolchain, and producing a nice and clean PDF that I
could upload to their applicant tracking system. I applied for the “Senior Developer,
CI/CD” role on October 9th.
By October 10th, I was told by an HR representative that I was accepted and was sent a questionnaire
with three Ruby questions, three Go questions and five general questions, due within ten days. The
questions were easy and involved a modest amount of coding. I sent my answers back on October 15th,
after working on it over the weekend.
Note that this phase happened at a time when the company was gathering in Crete for their “GitLab
Summit” event, which was happening between October 19th and the 25th. I got a couple of emails from
two different HR representatives reminding me about that.
One Step Forward
On October 27th I got an email from the CI/CD team lead with a couple of questions covering aspects
of the questionnaire. I sent back my answers on October 28th. I didn’t hear anything back until
November 1st, when an HR representative told me that I was invited for a screening call, which I
scheduled for November 7th. The screening call was held by an HR representative which would later
become my main point of contact during the interview process.
After the screening call I was invited to schedule another call with the CI/CD team lead, which
happened on November 14th. Unfortunately, he arrived late to the call, but I had the chance to chat
with another senior developer. Even though we only chatted lightly about technical topics I was
deeply and positively impressed by their attitude, friendliness, and skill set. At the end of the
call we scheduled for another call to happen on Friday 17th.
On Thursday night (November 16th) I was told by my HR contact that we would need to reschedule the
call since a someone from the US wanted to join the call. I was told to book a free slot overlapping
on both team member’s calendars. Being unable to find one, I told my HR contact so and she found me
a slot on November 30th.
I was headed towards my first technical interview.
On November 30th I had a two hours call with both the CI/CD team lead and another high-ranking
employee. I was offered the choice between three topics, after which we would have a brainstorming
session which would be followed by an assignment that I would have to do on my own.
The call went pretty smoothly and, again, I was impressed by the friendliness and in-depth knowledge
of both interviewers. It was a really pleasant experience.
After the call, I duly worked on the assignment and, on December 1st, opened a merge request that
implemented a very basic MVP for the interview topic that I chose. This spurred a fair amount of
activity on the merge request itself and the issue ticket it was linked to, since there seemed to be
some interest from the community in having such feature.
I didn’t hear anything back until December 14th, were I was told that GitLab would like to move
forward with an intermediate-level role, instead of senior. I told them that it was OK by me.
Climbing The Mountain
At this point I was invited to have non-technical calls with many team members moving upwards in the
org chart. I scheduled the first two to happen on December 18th and December 20th. On December 27th,
I was asked to provide some references. My last call was scheduled for December 29th.
These calls weren’t technical and mostly involved questions about my resume.
After the last call I finally had a chance to relax, at least until new year’s. I told myself that
the next call, if any, would be with the CEO at this point, as per their hiring practices.
Ten Steps Back
And here comes the end of our journey. On January 2nd I was told by my HR contact that GitLab
wouldn’t move forward with the application. I was bummed.
When I asked for feedback about my interview I was told that I had strong consultancy and
entrepreneurship experience, and that I was weaker in working at a mid-size product company.
The feedback was totally fair. I co-founded a startup, and my only other work experience is at a
consulting shop. My past work experiences, however, were clearly stated in my resume.
What I found especially frustrating was the fact that I was rejected only at the end of the
interview process, whereas I could have been rejected at the very beginning. Due to their background
requirements I had no chance to join the company from the start.
In the end it all felt like a huge waste of time, both mine and of all the people involved in the
interviews. I seriously hope that the same doesn’t happen to other candidates.
I really enjoyed chatting with everyone I was interviewing with. Everyone there is clearly
motivated, very capable, and friendly. I strongly believe that GitLab is trying to build something
different that will improve the life of developers for the better, and wish them all the best.
As a candidate, I’ll humbly suggest a couple of improvements:
- Keep everyone in the interview process on the same page about candidate’s expectations and
required background. This would prevent a situation like mine. I was essentially rejected from the
very beginning but no one, except the last interviewer, really knew that. Reject me sooner,
don’t waste my time. Or yours.
- Designate a single point of contact between the candidate and HR and let all communications with
the company go through that person. I was contacted by no less than four different HR
representatives. At many points a new person would come up from nowhere and send me an email,
without introduction. Other times I wouldn’t hear back for days with no clear indication of where
I was headed to. It was confusing.