Protected: Just a test

This content is password protected. To view it please enter your password below:

Advertisements

The trial

It’s been a couple of hard weeks. After the coding test I went on to the trial stage at Automattic and it’s been, by far, the most exciting experience I’ve had working on code. Add that to the fact that I had to keep my current responsibilities on schedule and you’ll get someone who now needs a 2 day nap.

The trial stage was not quite what I expected, I thought I’d get a glimpse of a blasting amount of chats with other coders, yet I got almost no interaction with the rest of the Automatticians. It made me feel a little lonely, but hey! Maybe that’s the whole point of it: see what you do in the wild, with not much direction, just objectives.

I got contacted by one of the hirers and was instructed through a couple of steps to get my Trialmattician account with enough access to get working on the trial. He handed me some links (Field guide, internal directory, knowledge base…), invited me to some slack channels and said he’ll be in touch. The next day I was presented with my tasks and given access to the repository I’d be working on, and a third Automattician was introduced to my private slack interview/trial channel.

The tasks were clear, the code already somewhat structured and working. As I was not sure on how to proceed I started writing down thoughts on my P2 (the private blog where the tasks/objectives were written). Little by little things started to make sense.

Communication

I always have doubts. Who doesn’t? Whenever I felt I needed to, I sent questions and updates about the state of the trial. But suddenly being “the project manager, the team lead, and the team itself” felt strangely exciting and, at the same time, lonely.

It has to be said: no matter how much you have read about it, when joining a fully remote team, it will be hard. You have to get used to not getting immediate answers, to respect other timezones’ daylight times, to make your messages count because it will not be fluid. The (much experienced) hirers take always time to thank you for your time and are the most polite people I have talked to in years. As I mentioned in another post, chat is an art, you have to master it so your messages carry the intended message.

Be mindful of your reader. Time is expensive, and no one wants to waste it on some discussion based on a misunderstanding. Keep concise and clear, be polite. And be technical, if you are asked a question, be sure to take your time to think it. I myself rushed a couple of answers and quickly realized there was no need for it, that I had missed things and, with some thought on it, I could provide more proper answers. I politely amended some responses, but I think the hirers know when you’ve rushed into things and they just give some space for you (and your newcomer’s anxiety) to make things right. You see, these hirers are not you usual trendy-term trained recruiters…

The hiring team

These guys are good. You are not gonna surprise them with a super-duper idea about code. They’ve seen it. Everything. They select and hire for a living, remotely. So, when one of them asks you “Are you sure about this?” you could wonder if he is testing you or just asking an opinion. Defend your code when you think you are on the spot, but be humble and take the hint: you might be getting a second chance at something and you don’t want to waste it.

But they’re not tricky people. I even had one of those “Are you sure?”, “Yes”, “Really sure?” kind of conversation on one of my reviews. And I have to say I was ready to make a stand, but then it hit me: on another review we had stated some context (which was not on the review where we were with this back-and-forth) which, in turn, invalidated my solution. So, again, politely, I retraced my steps and took the chance to change my point of view on the provided solution.

They will guide you, but you have to be ready to listen.

In the end…

Now the trial is over. I’ve been recommended for the last stage. I’m feeling a dizzy state of mind where the optimist in me thinks the most exciting times are ahead, the pessimist in me is already thinking I’ll be stressed all the time and the impostor in me still wonders how did I cheat the hirer into thinking I’m coder enough for the job.

Or maybe I just am 🙂

On the brigth side

So, today I had my first chat-interview with an automattician recruiter. Is not that I’m new to this but, damn I get nervous on interviews!

Anyways, I also have to say it’s been one of the coolest interviews I’ve been on. The guy interviewing me had a good pause on the chat, leaving space for me to write in my time.

It has to be said that, as everyone is now involved in some kind of chatting app, there are certain simple rules to the chat and not everyone has had a good school at it. Is nice to chat with someone who knows how to be polite, direct and concise at the same time. And even then, a good timing gives both actors enough room to not get cut in the middle of a thought, then having to rush on clarifications about what line you are referring to in the next/prev sentence. You get what I mean? It turns messy sometimes.

Then again, Automattic runs its whole structure based on chat applications and written information (darn! shouldn’t we all?), so a well mannered person in this ways was expected.

 

As much as I try to read and write in english I don’t speak it on a day to day basis. I think I did ok, but as excited as I was, I may have overliteralized some things. Specially the first question.

I was trying to keep it cool as the chat had just started, then he mentions my very first work experience and adds: “but was that where everything started?”

My voracious need to comprehend exactly and correctly what he was asking led me the unavoidable conclusion: “A-ha! He wants the whole story!”.

Trust me, I’m re-reading my response and it feels like Chunk confessing to the Fratellis.

bpzyrdw
Chunk: Everything? – Fratelli: EVERYTHING!

Luckily I didn’t go far, I remembered to be modest and took my time to think. A little too late. As I already had entered a first paragraph (I don’t like to have my couterpart waiting forever, I hit enter and I just imply the text continues) and I’m realizing I can’t narrate my entire programmer career, I just wrapped it up and with some quick notes.

I believe now he meant something more on the lines of what a motivational/epiphany kind of thing got me going, and I unloaded some sort of timeline of computer history within the family.

Happens. I may get to the next stage or I won’t, I suppose it will depend on my overall review, and I think it was ok.

A word on Ampersand JS

State management. Let’s face it, if you’re a JavaScript developer, you can synthesize almost 100% of your search results from the last 3 or 4 years with this topic.

No, you won’t see it as a most popular tag on StackOverflow (jQuery is still the undebated king there) because, most of the time, people won’t identify its problem with the term state management. Instead, you’ll see questions like:

  • how do I change the value of [some element here] after initialization …
  • how do I show a login message …
  • how do I set the score of a player when …

Ok, I just made those up, but you’ll catch the trend. They all look for some answer that is both enlightening and magic to some should-have-been easy task.

Many developers (me included) have still a tough challenge when they finally discover their little JavaScript app needs a way to handle its state. An effective and reliable way. Even (and, precisely) when the app was so little it never started needing a state.

Why is this hype? Who started it? Why is it so notorious among JavaScript developers? Why do I keep writing about state management if the title promised something about AmpersandJS?

The hype

states-states-everywhere

I’ll try to summarize it: stateful applications are not new. A stateful application is an old concept (old, not obsolete). No one started this hype per se, but the whole concept behind React and Angular revamped the term and when Redux came in, everything turned about the state of the state.

The hype hit harder on the JavaScript community than others because, well, everyone is coding in JavaScript lately. And when I say everyone I mean it’s one of the most accessible/profitable languages, attracting popularity and, sometimes, talented people unaware of this core concept.

You see, JavaScript was not originally meant to handle big solutions, it was designed to work on the DOM and be able to handle some little tasks impossible from within an XML (HTML). And one of the biggest challenges on the scene were: asynchronous handling. Internet was not always as fast as today, so you had to wait for everything, and your code should be able to handle this wait. I mean, you still do have to wait for things, but nowadays you have a myriad of libraries and solutions for it.

At that time, the development trend turned to the most feasible solution: XHR (aka: ajax) and event driven applications.

All type of libraries and frameworks arose claiming to solve the programmers quest to a more complex paradigm for solutions that required to scale and, still, be able to handle asynchronous behavior. Prototype, Backbone, jQuery, Scriptaculous, Dojo. The list goes on and on.

Thus came AmpersandJS

AmpersandJS was, to my knowledge, the first to gather all the experience from other libraries and embed it with a concept of state: Ampersand State.

Ampersand State is kind of the base lib for (claimed by the authors) the non-framework library it proposed. It’s simple and effective and, by that time, introduced this concept of state to JavaScript applications. It can be extended from its constructor, so you could come up with whatever-your-needs instance of some a state. It could listen to events and trigger them. Read it again: it could listen to events and trigger them. Most precisely, it triggered events when any (or at least, those you needed to) of its props changed.

Of course, the lib needed a way to print itself somehow. So a standardized extension of it, with a mix from Backbone and lodash, became the Ampersand View. Another little yet effective lib.

You see it happen, don’t you? Some solid idea, like the Ampersand State, derived on automagic solutions for frontend development. Now all you had to do was tie your representation (view) to any changes on your state.

Soon I discovered myself using a whole mini ecosystem of AmpersandInput, AmpersandForm, AmpersandModel, AmpersandCollection, AmpersandRestMixin, etc. Somewhat comparable with what happens with React today.

I’ve been using Ampersand (and its little-yet-effective libs) for quite some time. It allowed me and the team I work with to handle several projects. Some big, some simple.

Now, when the state hype begun, my team hesitated. But I wondered: what’s new here? I quickly started to notice how other devs could bring up their proof-of-concept fast. And I mean FAST. My interest turned to how these new stateful applications differ from what we were doing with Ampersand.

After careful consideration we reached a simple conclusion: nothing. Even the terminology was the same (state, props, derived data), we were doing the exact same thing as React+Redux. So where was the difference?

Story time

An explorer goes out of his tent, walks 2km south, 2km west and 2km north. He suddenly finds himself back at his tent when a bear appears. What color is the bear?

Nope, there are no typos on the last paragraph. Yeap, it can happen. (And maybe you already knew this puzzle).

You see, the answer is “white”, since the only place on the planet where you can walk those distances and end up in the same place is the North Pole. So, if there’s a bear there, it will be white (or dead).

It’s a silly puzzle, but it challenges you with a question you can only reason through analyzing the context.

It’s an important concept which Facebook read well: give the appropiate context and environment and you will have your answers. In the case of React, this meant to take everything that was wrong with other libraries and fix it. FIX IT.

So, this lead to another question: what was wrong? There’s no real magic on JavaScript, just a lot of hacks. Hacks and opinions. So the React team took those opinionated hacks and solutions and put a stop to them. They did what nobody dared to do: tell the community how to do things so the expected result could be reliable. If you think about it that’s the whole philosophy behind React, some pure-ish set of standards: given an input there should always be one (and only one) output.

Seems logical, doesn’t it? But it gets better. While the React promise was good many remain esceptical (guilty as charged). So the next step was tackling the big monsters on the table: ES6 (Babel) and Webpack. And create-react-app was born, giving you a perfect solution that seized the power of transpilers and packers at a simple command line.

Well played React. Well played.

AmpersandJS is really performant on most of its libraries, but lacks the popularity to get a community behind it to support it. Mainly because:

const Title = ({title}) => <h1>{title}</h1>

beats a:

const Title = AmpersandView.extend({
  template: '<h1 data-hook="title"></h1>'
  props: {
    title: 'string'
  },
  bindings: {
    title: {
      type: 'text',
      hook: 'title'
    }
  }
}

anytime. And that is some simplicity the community would embrace. Add that to the fact that React came out with create-react-app, which is a kind of solve-it-all boilerplate/kickstarter, and you get to rule the place in no time (hell! I’m trying to give a word on AmpersandJS and I can’t help mentioning React, that’s how effective its strategy is).

I didn’t get into Angular, but I assume some similar comparisson could be done. Not as succinct though.

I’ve had a great experience working with AmpersandJS, and I’ll take the lessons from it, both techincal and the strategy behind what made React and others become what they are today. Even when, on their core concept, the may not differ much, the outcome speaks for itself.

So, in the end, thank you AmpersandJS and the people behind it (I see Philip Roberts as the lead maintainer, even if he started there must have been others).

Panic Attack

Last time I posted about Automattic and WordPress. Still pitching myself about applying for a new job, about leveling up my game, getting things done, taking commitments, go for launch and all those catchy go phrases, I decided to make a flyby through reality. This meant starting to poke around repositories, blogs, announcements and whatever other source of information about what’s going on and what they’re up to (by “they” I mean both the community and Automattic developers).

Lots of good posts about people already working there, about their day to day, about remote and the trade offs of managing your own time. I might not be as organized as I’d like to, but I’m used to work on my own and scheduled-ish routines.

Quick search and up you go with an invite for the public Slack channel. While the (I assume) automated process was taking place I simply went to Github and opened /automattic and /wordpress.

Oh man … 😀

Then the invite to the Slack channel arrived to my inbox.

Oh man … xD

This is not gonna be easy. It’ll take some time.

By the way, in the mean time I ended up in charge of the block’s cat: that stray cat on every block that’s both nobody’s and everybody’s cat. She started following me home every now and then, and when she finally decided to face the horror of entering the elevator with me, I thought “well, if you were willing to make it this far…”. A singular “come and go as you like” status quo begun.

Long story short: I eventually found out she had some strange heart condition combined with a weakened immune system and a parasitic blood virus. Add that to the fact she was nearly 15 years old and you get to become a nurse in no time.

This was one of those “it’s nobody’s cat” moment for my neighbors.

The story doesn’t end well, but I got the privilege to give her a warm place to stay and feed her with all sort of things I assume she never got on the streets. I do believe she had a good life, she got all the freedom she could get and I can only hope I made her last days as comfortable as they could be. Cats are cats, you’ll never be sure if they’re being grateful or mere interested on benefits, but it was nice to have her.

A harsh but enlightening experience I’ll have to say.

Recap

Well, I guess it had to happen one day.

3f88a70ecdd891008fa916bac9cff7ce

For years I’ve known WordPress, what it does, how it does it, how to install it, fix it, set it up. There was always that friend or relative who needed some help with it. I’ve followed WordPress activity through the years and I’ve always considered it as one of the beacons in the software and web industry. It’s OpenSource philosophy together with it’s core functionality (I mean, being a tool for people to be able to express themselves on the web) has always been a motivational for me, some tangible prove that there’s a way to:

  • make good software
  • provide tools and solutions for people
  • make a living out of it
  • not falling in the douche category

It may sound naif, but those four little points together are not easy to achieve.

That said, I’ve always failed to make it a routine to sit down and write a little about my coding experiences, or at least some day-to-day summary of nonsense. I mean “failed” as something that was planned inside my head but never got to make it out as a standalone idea.

At the same time I’ve witnessed what Automattic has become. “Become” sounds like coincidental, I believe Automattic has “achieved” certain goals that match those stated above at a company level:

  • train the company itself to seize it’s resources potential
  • do it remotely
  • grow within these new paradigm
  • keep growing and keep delivering

 

For these reasons (and some more) I’ve recently decided to apply for a job at Automattic. I truly don’t know if I’m gonna get it or not, I might have to try a couple of times, but it will surely be some great experience/challenge.

It does sound like some complex scheme to start writing on a WordPress blog at the very moment I’ll be applying for a job on the company behind it, but I believe I lack that kind of planning skills, I just got to the point where two separate goals came so close together it would feel a bit stupid not to seize the momentum built by both of them.

Well, we’ll see.