Using the potentials of a big company to solve some of its collaboration challenges

Image for post
Image for post

Large companies are usually comprised of many teams — each focusing on a subset of the problem domain.

Autonomy vs collaboration

To increase agility the company may give autonomy to the teams to decide their work process, tooling, or even defining their own scope. The side effect is that if there is too much autonomy, the teams may grow apart from each other and develop “silos”.

At its extreme, domain knowledge hardly leaves the borders of the team silos and external ideas are dismissed with the “Not Invented Here” syndrome (NIH).

Stuck employees

If the company is doing well for many years, it’s possible for some employees to get…


Image for post
Image for post
Image sourced from Pexels.com

A Array.map() is a very useful function but, unfortunately, it only works with synchronous functions. A simple workaround for using async map functions is to use Promose.all() or its more tolerant brother Promise.allSettled():

It works like this: the .map() will convert each array item to a promise, so we’ll end up with an array of promises to resolve. There are two ways of doing this:

  • Promise.all() throws if the map function throws (MDN)
  • Promise.allSettled() runs the map function for the whole array even if sometimes it throws (MDN)

Therefore, the output of the .allSettled() is an array of objects that tells whether the execution failed or not. …


A visualization of anti-growth mindset

Image for post
Image for post

Career ladder is a great tool for cultivating growth mindset in an organization:

  • It clarifies the promotion criteria transparently and advocates meritocracy
  • It aligns personal growth with organizational growth
  • It reduces churn by challenging long term employees
  • It sets examples of good behavior and inspires leadership

Unfortunately many companies fail to take full advantage of this tool. Let’s visualize some of the common mistakes.

Hidden


a snapshot of the terminal showing the output of env dash dash help command
a snapshot of the terminal showing the output of env dash dash help command

JavaScript is an interpreted language and its source code needs to be fed to some interpreter to run. If you want to run a JavaScript file using Node.js, you normally run this command:

$ node yourfile.js

By typing the name of the interpreter (node), you are explicitly telling the shell how to run your script.

But that knowledge can be put inside the script itself so it can be run directly as if it was a binary:

$ ./yourfile.js

This will work only if you have execution permission on that file (you can set that with chmod u+x yourfile.js


White-box testing for JavaScript modules

Image for post
Image for post
Photo by Markus Spiske from Pexels

It’s good practice to keep the number of lines in a function limited (here’s Martin Fowler elaborating the point and here’s an ESlint rule to enforce it). To break a long function, we need to identify the parts that are abstract enough to be extracted to new and smaller functions.

  • We’ll end up with more functions which increases the cyclomatic complexity
  • But these smaller functions are easier to read and test.
  • Also these smaller functions are easier to reuse in other contexts.

Each software (whether it’s a library or a stand alone app or CLI) handles various use-cases.


My experience with an active community building and maintaining multiple products with millions of users

Image for post
Image for post

TLDR;

  • Be explicitly open for contribution
  • Focus on great DX (developer experience)
  • Give great support
  • Share knowledge
  • Spread the word
  • Keep the quality high
  • Praise good behavior

Inner open source vs open source

Before we start, let’s define “inner source”. According to Wikipedia:

Inner Source is the use of open source software development best practices and the establishment of an open source-like culture within organizations. The organization may still develop proprietary software, but internally opens up its development.

Although many of the tips in this post may apply to open source product, there are a few crucial differences stemming from the fact that the “community” is essentially comprised of employees who are recruited to a company bound by the same contract and working towards the same mission and vision. …


🇨🇳 FLMN kindly translated this to Chinese here.

I’ve been programming since 1999 and this year I’ve officially coded for 20+ years. I started with Basic but soon jumped into Pascal and C and then learned object oriented programming (OOP) with Delphi and C++. In 2006 I started with Java and in 2011 I started with JavaScript. I’ve worked with a wide range of businesses from robotics, fin tech, med tech to media and telecom. Sometimes I had a different hat as a researcher, CTO, TPM (technical product manager), teacher, system architect or TL (technical leader) but I’ve always been coding. I’ve worked on some products that served millions of people, and some that failed before being released. I worked as a consultant and I even had my own startup. I have spent lots of time on open source projects, closed source projects and internally open source projects (proprietary code that is developed by a community inside the company). …


If you’re working at a big organization you’ve probably heard or used an employee engagement tool. Here’s how it works:

  • It regularly sends online surveys to the employees to measure their engagement.
  • Then it aggregates that data and presents the management team with beautiful reports about different engagement categories.

The core idea is that the surveys will provide reliable data for spotting and reacting to organizational problems. The reports look something like this:

Image for post
Image for post
Officevibe report samle. Source: Officevibe

This post is about my experience using Officevibe at two teams for a period of 2 years and eventually quitting it (not truly but we’ll get to that). Even though this post is about Officevibe, you may have similar experience with any other survey-based employee engagement tool like Peakon, SurveyMonkey, Cultureiq or a bunch of others. …


One of the perks of working at a large company is that there’s always someone at the top of their field that you can reach out for advice. Out of curiosity I asked one of my favorite managers with an excellent track record of making significant changes in the organization: “How does one become an Engineering Manager (EM)? How can a developer do the transition?”

His answer was solid advice that would’ve been a waste not to share. Here’s the reply (lightly edited for anonymity):

So the first EM role is always the hardest — making the initial transition. It would be hard if not impossible to get it by application if you have no previous experience, at least for a full blown full time EM-role. Then people would tend to go and look for a proven track record and go on the safe side. …


fetch’s response is an object that has a headers property. But this property is of type Headers which is not serializable.

Here’s a little function that convert response headers into a simple JavaScript object ready to be serialized or printed to the console.

Update: the code is updated in 2020–06–01 using Object.fromEntries(). Thanks Matthias Etienne for the awesome tip in the comment.

About

Alex Ewerlöf

Knowledge Worker, MSc Systems Engineering, Tech Lead, Web Developer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store