Company culture is what happens when the boss is not around

Startup culture done wrong

I’ve had many discussions defining a company culture but we never agreed about it. There are as many cultures as companies, and it’s easy to focus on specific ones when trying to define a general model.

Yesterday, Siqi Chen proposed an interesting definition of a company culture:

Company culture is what happens when the boss is not around.

I love it because it confirms a few things I believe in.

Company culture is a top down thing

The company’s culture is created and driven by the company founders and embraced by its employees, not the other way around. So it’s a common mistake to think you can build a great culture by hiring great people.

Great people don’t drive the company’s culture, they nourish it. A common mistake is believing you can weight on the company culture against its founders nature. I’ve met many people who left the company sad and bitter after trying too much.

Hiring great people is difficult, but it’s not the hardest part. The hardest part is providing them with a great culture and challenges that make them stay. For that reason, the turnover rate and talking with former employees is the best way to know about a company culture.

Company culture is about doing

If there’s one post you should read about the Ubergate, it’s Fred Wilson’s Values and Culture. Fred connects Uber perfect execution with the win at all costs company’s culture. The last paragraph asking if Uber would be the success story it is without its ruthless culture is something to watch on every company.

Pointing out the dark side of Uber is interesting because it’s far from the usual marketing thing in which every company tries to look cool and have an awesome culture.

Still, culture all about both sides of doing, what, like trying to piss off taxis companies, and the how. And you can see that both are inspired by the company’s management, hence a top down culture from spirit to execution.

Company culture is learned, not innate

Finally, company culture is a learned thing, not an innate one.

When Ruby on Rails was the big stuff, I’ve heard too many people bragging about how they had the 37Signals culture, even though they never worked for the company.

They did not know what they were talking about.

You can’t have a company culture if you’ve not worked for that company, if you did not nourish yourself from the team, if you haven’t delivered something with them. It’s impossible. Only the daily life of a company can make you both embrace its culture and as a reward add your personal touch on it. You certainly share some core values, but the culture is something else. It’s something you need to join the company to discover, understand and embrace.

When I was a kid, dad used to say my sisters and I were good exports. It was a way to say we were behaving well when invited at a friend’s place and they always have compliments about us when the boss was not around.

How my free software zealotry ruined a friend’s chances to get out of poverty

Workplace

Paris, July 2002.

I’m a 23 years old computer engineering student. I’m a member of APRIL, a Free Software advocacy association, I fight against software patents, troll people using Microsoft Windows, and I play Go. A lot.

We play in a small bar in the center of Paris. There are students, teachers, a wanna be actor (who’ll later get a major role in the most popular French series ever), and there’s that guy, let’s call him Pierre.

Pierre plays go too. He arrives at the bar around 4PM, stays until it closes, and he accepts to play with the beginner I am. He crushes me without remorse but I learn a lot from him.

Pierre is about to turn 50. He spends his days at the bar because he doesn’t have a job. Pierre is not a go player, he’s a developper. He’s probably not a great one, and in a post September 11 youth glorifying world, there’s no work for him. I don’t know much about him, except what he told me one day when he was drunk enough to speak. Pierre has lost everything he owned, lives in a small room in a far suburb thanks to government subsidiaries. He’s so broke he can’t buy a computer, which means he can’t even work from home.

My 14 meters square flat is full of computers. I’m running various free operating systems. There are some Linux distros, and 3 flavors of BSD, much more than I actually need.

I offer Pierre to give him one of them with my old, spare 14 inches cathodic screen so he can start coding again, maybe create some utilities he can start selling.

I remember his look of disbelief. He had been out of the system for so long he didn’t have a hope of coming back. He asks me if I can install a Windows and Visual Basic environment on the computer so he can start working. He doesn’t even know where to find them and doesn’t have an Internet connection at home.

Indeed I can. My school gives me free student Microsoft licenses and I have an unlimited access to their product. But I refuse.

I refuse and as he doesn’t seem to understand why, I’m getting mad at him. There’s no way I can install non free software on one of my computers. There’s no way I provide someone with proprietary software, even if he asks me to. I refuse for his own sake. He’ll write C, or Perl or Python or whatever runs on Linux and runs with free software.

His look and words become more and more confused as the argument runs. And I don’t understand, I don’t want to understand he can’t do anything else.

I sip my tea, pay for his drink and leave the bar. He comes back on the topic once or twice but I start avoiding him. He still doesn’t have a job, leaves in a 6 square meters bedroom but at least he didn’t fall in the pit of proprietary software.

Talk me about an asshole.

It’s still time to make a donation to that open source project you love

Raise awareness

Last night, I made a 50 dollars donation to the FreeBSD foundation, which supports the open source operating system I run on my server.

If you’re like me, you’re using lots of open source projects. Maybe you’e even contributing to some of them. All of them need support. None of them deserve help more than another. Picking up one out of the crowd is not easy as it seem.

I started using FreeBSD in 2001 or 2002 for the ports. A few months before, I had a terrible experience with OpenSSL Debian binary package. I wanted to avoid another dependencies hell and building from the sources seemed to be the best option

For a few years, I loved FreeBSD stability and its keep it simple stupid approach. I ran it on my laptop and on my server until I had to switch to something else. I replaced my Vaio with a Mac and some software I was relying on were broken on FreeBSD. I didn’t have neither the skills nor the time nor the money to fix them.

After going back and forth, I’ve deployed it again on my dedicated server and I plan to install it wherever it’s relevant. It has changed a lot since 4.4, and I trust the new pkg enough not to rely on the port anymore, but it’s also the same old friend I used to know. An old friend who did not replace my /etc/motd/ with an ugly if every root gave 2$, we would be able to build more build servers for our packages ASCII art.

Today, I’ve heard people saying giving 50$ to the FreeBSD foundation is useless after WhatsApp founder Jan Koum made a one million dollar donation.

Last week, I donated one million dollars to the FreeBSD Foundation, which supports the open source operating system that has helped millions of programmers pursue their passions and bring their ideas to life.

I’m actually one of those people. I started using FreeBSD in the late 90s, when I didn’t have much money and was living in government housing. In a way, FreeBSD helped lift me out of poverty – one of the main reasons I got a job at Yahoo! is because they were using FreeBSD, and it was my operating system of choice. Years later, when Brian and I set out to build WhatsApp, we used FreeBSD to keep our servers running. We still do.

I’m afraid it’s not Miss Fishborne.

A one million dollar donation is a big, exceptional thing for an open source project, but every donation counts, even a five dollar one. The amount of money raised is important, it’s essential to the project life, but the number of people supporting it is even important. Donating shows an open source project health and usefulness, raises awareness amongst the supporter’s relatives, and it helps the project staff when they feel tired and worthless.

I know it’s almost Xmas time and you’re already spending your savings buying your significant other that shiny iPhone 6, but remember it’s not too late.

So pick up your favorite open source project, and donate.

Debug a running Python process without printf

Debugging Python with GDB

Last week, in the wonderful what did I learn today series, I’ve added Python debugging with GDB to my problem solving arsenal thank to Greg being back from a well deserved vacation.

Gdb is definitely not the tool I would have used to debug an interpreted language like Python, but it has a few great bindings that makes it perfect to follow the Python source inside a running process.

To do this, you need a root access to the machine you’ll use as gdb uses ptrace(2) to attach the process. If you can’t have root access, ask for temporary access using sudo(8).

The first thing to do is to ensure you have both Gdb and Python debugging symbols installed.

$ sudo apt-get install gdb python-dbg

Now, run the Python process you want to play with. To make it more simple, I’ve written a very simple one here that feels 3 local variables with some user input.

input_var = raw_input("Enter something: ")
print ("you entered " + input_var)
input_var2 = raw_input("Enter something else: ")
print ("you entered " + input_var2) 
input_var3 = raw_input("Final question: ")
print ("you entered " + input_var3)

Add the following to your homedir .gdbinit file:

$ echo 'add-auto-load-safe-path /usr/lib/debug/usr/bin/python2.7-gdb.py' >> ~/.gdbinit

Now, run the small Python script:

$ python test.py
Enter something: 

You’re ready to debug.

sudo gdb python -p PID
Attaching to program: /usr/bin/python, process 28943
Reading symbols from /lib/x86_64-linux-gnu/libpthread.so.0...(no debugging symbols found)...done.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Loaded symbols for /lib/x86_64-linux-gnu/libpthread.so.0
Reading symbols from /lib/x86_64-linux-gnu/libc.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libc.so.6
Reading symbols from /lib/x86_64-linux-gnu/libdl.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libdl.so.2
Reading symbols from /lib/x86_64-linux-gnu/libutil.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libutil.so.1
Reading symbols from /lib/x86_64-linux-gnu/libz.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libz.so.1
Reading symbols from /lib/x86_64-linux-gnu/libm.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libm.so.6
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
0x00007f60a6c35350 in read () from /lib/x86_64-linux-gnu/libc.so.6

Use the py-list command to display the current running code:

(gdb) py-list
  >1    input_var = input("Enter something: ")
   2    print ("you entered " + input_var)
   3    input_var2 = input("Enter something else: ")
   4    print ("you entered " + input_var2)
   5    input_var3 = input("Final question: ")
   6    print ("you entered " + input_var3)

The > shows the current line you’re running. Go back to your script and type something, enter, then switch back to gdb.

(gdb) n
Single stepping until exit from function read,
which has no line number information.
0x00007f7fb40c2120 in _IO_file_underflow () from /lib/x86_64-linux-gnu/libc.so.6

n tells gdb to run the code step by step. Let’s check where we are using py-list.

(gdb) py-list
   1    input_var = raw_input("Enter something: ")
   2    print ("you entered " + input_var)
  >3    input_var2 = raw_input("Enter something else: ")
   4    print ("you entered " + input_var2)
   5    input_var3 = raw_input("Final question: ")
   6    print ("you entered " + input_var3)

Since you’ve assigned a value to the global variable input_var, it would be interesting to check its value.

(gdb) py-print input_var
global 'input_var' = 'coucou'

That’s all for today. There’s probably more to do with GDB but so far it’s been pretty useful to me to understand lots of problems running strace did not enlighten.

The day I browsed the Web like normal people do

Time Square

Today, I had a traumatic experience.

I had to browse the Web like normal people.

I had to check something on my wife’s laptop who’s using neither Adblock nor Ghostery or Flashblock. After years protecting myself from adding advertisement networks as 127.0.0.1 in my /etc/hosts file to using browsers extensions, I was facing an Ad powered Web.

It was an incredibly oppressing experience.

The ever popping ads, from banners to pop-ups to pop-under made focusing on the actual content difficult. I was feeling like I was trying to read War and Piece in the middle of Time Square, something no one still having a sanity point would do.

It ruined the whole experience compared to an ad free browsing. If you’ve ever been to Paris and have gave Pigalle a try after 8 PM, you’ve certainly seen those guys trying to make you enter in a hostess bars. I was feeling the same with all the flashing ads, knowing that, if I clicked on the wrong place, I would be taken to a place very different from what I was expecting.

I wonder how much time and energy is wasted trying to focus on a Web page without being distracted by advertisement. Do they get used to it, or do they cut / past what they need to read in a Word document? I’ve seen people doing this in the past when browsing ping on white with animated gifs sites, so why not as a way to avoid advertisement?

The scariest part was tracking.

If you ever want to know what your significant other is giving your for Xmas, browse some e-commerce sites, and let the targeted advertisements tell you what she’s been browsing lately. It sounds funny when you read stories of people complaining about porn ads popping everywhere and other people telling them it’s based on their previous browsing. It’s not funny at all, and I wonder how people experimenting this don’t freak out.

I feel the advertisement powered Web is a broken model for many reasons. I’ve talked about it with Web sites editors in the past, and they were all arguing there was no other choice but advertisement for them to survive.

It’s not the only business model, it’s the easiest one, in theory. Problem is, unless you’re big enough, you can’t deal with brands who advertise on your site but with third party companies. I just can’t imagine having clients who’re not my clients so I can’t control the price of what I sell.

There’s also a question of education. The « we give you free contents but spam you with advertisement » Web has been around for so long it’s hard to have people pay for quality content. Unfortunately, I don’t imagine anyone willing to pay for their daily dose of lolcats.

Cours IUT : Flexbox et Styleguide

Afin de faire émerger les pratiques personnelles des élèves, renforcer leurs connaissances, il me semble important d’instaurer l’horizontalité dans les rapports humains, au sein de la classe. J’espère pouvoir devenir alors un accompagnateur, un facilitateur, encadrant le processus de maîtrise des concepts de littérature et de grammaire. Le but est de fluidifier la communication, d’augmenter les feedbacks, de rendre les réussites plus accessibles.

D’une sélection artificielle à une sélection naturelle dans un écosystème complexe

Suite de mes aventures dans l’enseignement, après les bases, on passe à du plus consistant. On commence par repartir de zéro sur un sujet qui leur tient à cœur et en plus petit groupes comme proposé en rétro. La première contrainte et d’établir un styleguide en parallèle du développement du site, c’est quelque chose que j’utilise depuis 7 ans et qui dispose maintenant de nombreuses ressources. J’aime cette approche pour plusieurs raisons :

  • réflexion sur la sémantique lorsqu’on se rend compte du nombre d’id/class à ajouter au styleguide pour avoir quelque chose de potable ;
  • documentation dynamique pour les divers contributeurs et pour soi-même, on a vite fait de dupliquer un style par méconnaissance du projet ;
  • facilité d’expérimentation lors de refontes en applicant directement la nouvelle feuille de style au styleguide.

Il s’avère que c’est aussi extrêmement utile en terme de retour pour corriger un bug récalcitrant de façon visuelle.

Le second concept que je souhaite aborder est Flexbox, c’est encore relativement récent mais Vincent me rappelait à juste titre que l’« on enseigne pour aujourd’hui et pour demain » (pour hier, il reste les polyfills) et Flexbox est aussi un moyen de ne pas les dégoûter tout de suite des CSS :-). C’était bien sûr une occasion pour moi de me mettre à niveau dans ce domaine et d’expérimenter, participer à une formation reste la meilleure façon d’apprendre.

Quelques ressources sur le sujet :

Si j’ai le temps, je terminerai sur l’approche mobile et les media-queries pour tirer pleinement partie de Flexbox. Je me rends compte à quel point les minutes sont comptées lorsqu’on est limité à 24 heures de cours sur un sujet aussi vaste…

On writing post-mortem analyses

Writing a post mortem analysis

The war is over.

Things get back to normal. There’s still smoke on the battlefield but everyone start breathing again.

You just fought a very tough battle to fix something that failed miserably. Whatever it was, production deployment failure, security breach or missed unmissable sales process, the crisis if finally over. Still, you’re not done yet. As everyone congratulate each other, or silently leave the war room to breath some fresh air after a sleepless night, there’s one thing to do while things are still fresh in your mind.

The post-mortem analysis.

You’re tired and thinking « I’ll do it tomorrow, first, I need to sleep ». That’s a lie and you don’t know about it. I know it from experience. If you don’t do it now, if you don’t share it now, you won’t do it at all.

Considered as the boring part of the job, the post-mortem analysis is as critical as fixing the situation was. It’s a summary of what happened and what was done to fix it. Building a comprehensive knowledge base, it helps the whole company from not doing the same mistake twice and ensures someone will remember about it after you’re gone.

In corporation, post-mortem analyses are made of dozens complicated documents you need 3 levels of management to approve. In startups, they must be findable, practical and reusable.

I’m pretty sure ops methodologies have a perfect and complicated canvas for those, maybe an ISO stuff. I tend to keep them dead simple. I split my post-mortem analyses into 4 parts:

  1. What happened.
  2. How it was detected and fixed.
  3. Why it happened.
  4. What is the plan to ensure it won’t happen anymore.

What happened is a comprehensive story of the event describing the whole thing from the beginning until the end. I try to write it as a story to make it easier to read, adding time frame when available.

How it was detected and fixed is the operational part. It’s the HOWTO in case the same thing or something similar happens again.

Why it happened is the only part that’s often incomplete when the analysis is shared for the first time. The 5 whys that helps finding the root cause of something often needs time to be answered.

What is the plan to ensure it won’t happen anymore is the real TODO you’ll have to find time for in the next days or weeks.

Write it on the medium you prefer except mail. Mail is terrible to keep information live in the company. It can be your enterprise social network if you have one, it can be a wiki or it can be your favorite bug tracking issues.

I like using Github issues for that, and assigning them a postmortem tag because other people can comment after I publish it and I can close them when we consider there’s nothing to add.

I also sometimes blog about the most important ones when I know they can be of some public interest even though they show how I failed at some point.

Failing is part of the game, that’s why post-mortem analysis help not making the same mistake twice.

How to mix talks and networking at conferences and events

Networking done right

Every time I go to a conference, I have a hard time to split between the tracks I want to follow and meeting people. When the conference is only 1 day long and those people also have to split their time between tracks and networking. Since they (probably) don’t want to see you only, it easily becomes a nightmare.

Over the years, I’ve set up conference routine to balance between the event itself and the networking part.

For 1 day only events

When the event is only 1 day long, I contact the people I want to meet beforehand. If we don’t know each other already, I send them a short, straight to the point introduction email. Their time is as precious as mine and they often have lots of sollicitations, so let’s get short!

There are 3 moments during the day where I can meet people with enough time to discuss

The 2 first ones are breakfast and lunch time. The usual 10 minutes conference break is too short, and the beer event is too random. People who come from another city (or another country) often leave straight after the latest talk. From my experience, breakfast is awesome for serendipity: you can meet freshly arrived strangers and start connecting around a cup of tea. Lunch time is better to catch up people you already know or have an appointment with.

The third one is allowing myself to skip one of the conference track and free 20 40 minutes accordingly. There’s always a speaker I’m less interested in either because of the topic of his conference, or because I know he’s mainstream enough so I’ll get everything on Twitter. I tend to notice people are more eager to follow the conference during the morning when they bran is still fresh. They skip talks easier and are more keen to discuss during the afternoon so that’s when I try to meet them.

At multiple days events

Things get different when I attend multiple days event. These are very tiring and require good time management if you want to be on top until the end.

At single day events, I select the talk I’m allowing myself to skip. For multiple days events, I do exactly the opposite. I pick up the talks I really want to attend not only for the content or the speaker, but also for the questions I’ll be allowed to ask. Asking questions to a speaker – and finishing the conversation off – is something you can’t do watching a replay on Youtube.

Before the event, I contact people I want to meet there. Once again, email must be short and straight to the point. I won’t contact someone notoriously busy « for a coffee » unless I actually know that person. I propose 2-3 slots for the meeting and give an approximate time, like « 20 minutes ».

Once defined the business appointments, 2-3 days avents are a great place to catch up with friends and meet random strangers. Once again, breakfast time is the perfect time to do it. When the conference starts, you can either keep talking and skip the first talks, or pretext you want to attend the opening session to get rid of someone.

During long events I also allocate time to get some rest. Conference venues are usually noisy, your brain process a constant stream of information and the last day is usually hard to survive to. I try to find a silent place 30 minutes during the first afternoon, day 1, and 20 minutes in the morning and afternoon day 2 and 3. I usually have a walk outside so I can have a real break.

Checking my last long conferences, I’ve done a 40% networking, 50% talks and 10% rest. The networking part is important because I’m usually there as an invited blogger, and I dedicate some time to meet people who can bring me materials for my articles, like startup owners or speakers.

Don’t bite the company that fed you

Don't bite that hand

When I was younger and my father still alive, he used to tell me:

Don’t spit in a tongue soup you liked to eat.

In case you don’t understand French idioms and slang, he was mixing 2 popular French phrases. The first one, « don’t spit in the soup » means «  don’t bite the hand that feeds you ». The second one, « tongue soup » refers to the French kiss. What he was telling me was:

Don’t bitch about your exes, you were happy when you had them.

This is one of the best advices he ever gave me as a professional. When being interviewed or joining a new company, never bitch about your former employer.

With a very few exception, I had a part of responsibilities in the fact the person became an ex, whether she was a long relationship or a one night stand. The same applies when leaving a company for a new one.

It’s sometimes hard to explain why you want to leave your current job. When asked, being negative about your employer is a slippery path. Biting the hand that once fed you is a strong sign addressed to your next employer.

When a candidate goes all negative about his company, I suspect he’s the real problem. Terrible companies exist, terrible employees exist as well.

Talking crap about your current company is an easy way to explain your lack of achievement. « If they had listened to me it would be a billion dollar company » or « I didn’t have the team / freedom / budget to do what I wanted to do » are 2 things I’ve heard a lot in the past to explain career failure.

When it’s not about making your former boss carry the weight of your failure, being all negative about your former company raises another question.

If he’s that negative about his current company, what is he going about mine?

The question raises with many others. Will he bitch about the company to others employees? Will he bitch about the company to people from the industry? Prospects? Potential hires?

Negative people are toxic.

They undermine the moral of their team. They produce poor results and don’t improve anything. They don’t fit in an open, positive company’s culture. When you start working with someone negative, you quickly establish a trust problem.

I don’t expect anyone to tell me his former company was a paradise. But instead of bitching, point out your achievements, explain why you’re done with what you’ve been doing there and what you learnt. You’ll show a much more positive state of mind which is exactly what your interviewer is expecting from you.

The culture of an old world I used to know

Old school school

A few weeks ago, I was checking the homework my elder kid had to do for the mid term vacations. As usual, his French teacher had given him a book to read. For the first time, it was neither a too boring nor a too scholar one.

– You’re Lucky, Jules Verne is a great author and The Mysterious Island one of his best books.
– Jules Verne? Who’s he?

I was shocked. At 10, I had read most of, if not all his books. As a kid, Jules Verne was the gate that opened the wonderful world of science fiction, and his name was part of every French kid’s culture.

A few days later, I remembered something similar happening when I was around his age.

I was spending a few days at my grand parent’s place. They had a similar shock when they heard I had neither read Le Tour de la France par deux enfants nor learnt the 101 French departments name by their number.

Quoting Wikipedia,

Le Tour de la France par deux enfants (1877) is a French novel/geography/travel/school book. [ … ] The book was widely used in the schools of the Third Republic, where it was influential for generations of children in creating a sense of a unified nation of France. Its success was such that it reached a circulation of 6 million copies in 1900, by 1914 it sold 7 million copies, it was still used in schools until the 1950s and still in print to this day. It was sometimes known as “the little red book of the Republic.”

The world my parents used to know as kids and the world I grew in are much more similar than the world I roamed as a teenager and the one my kids were born in. 25 years separate my parents childhood from mine, only 8 my teenageheood and my first kid’s birth in 2003, but the Fred from 1995 would hardly recognize the world he used to know.

I was born in 1978, my mom in 1953. Indeed the world has changed between these dates. The French colonies were no more, man had landed on the moon and there is a global economic crisis. But we both had cars, telephones, TVs and a planet divided into capitalism and communism.

When I was a teenager, Internet at home was only at its very beginning, personal computing was a pain in the ass and the World was still big. My kids have always known fast broadband, mobile phones, tablets and a world reduced to the speed of the slowest Internet connection.

As I’m trying to read the books I used to read through their eyes, I realize all the culture we used to know is mostly irrelevant because completely alien to them. Back in 1995, Zola’s Germinal was describing a world much more understandable to us than the early post World War II one was to them.

So before judging today’s youth lack of culture, let’s ask ourselves if what we call culture still fits the world we’ve built them.