Monday, December 19, 2011

Why ? So what ?

Ever changing world urges you to take action, but if you don't take care about asking why you do what you do, you'll take action for someone else.

Maybe altruism will say that it is OK to dedicate your soul to some cause or someone else. That is pure laziness.

You can't help people by keeping them dependant on you.
You must learn them to be confident enough to take care of themselves.
To learn confidence you have master it first.
To master confidence you have to have to know exactly why you do what you do, that's not about me, not about we, but about you.
And when you know the why don't forget to ask the other question : So what ?

You don't become what you want by doing what you always did, so what is your next step ?

"Why ?" makes it clear what you need to stop. (we call it pruning in software)
Move from the action to the reason.
"So what ?" makes it clear what you need to start.
Move from the reason to the action.
Keep both questions in mind.

Thursday, December 15, 2011

Local Optimization, Global Optimization

Does choosing better cooking ingredients will make a better dish ?
Does applying better practices for database design, UI design, web service design will make a better software ?
Does following a better accounting, better stock management, better legal contracts will make a better company ?

In other words, does the sum of local optimizations is equal to higher global optimization ?

No, it doesn't.

Maybe two cooking ingredients of mediocre quality mixed together have a better taste than two top quality one. (My grandma known very well how to transform bad food in delicious dish :) )
Maybe having less layer in you software will make you more responsive to your customer.
Maybe having less formalization will make your customers less shy and threatened, and give you more time to take care of them.
Maybe having less customer can help your company.

Global optimization is about achieving the goal of your dish/software/company, local optimization is about achieving the goal of the expert.

Being smart is thinking about how the expert's wisdom can help achieving your goals, don't blindly follow what he says : you are the leader.

But, please, know exactly what you mean by "better". If you are lazy enough, the definition will be set by the expert.

Saturday, December 3, 2011

Stop the liveline, adopt the unexpected deadline

Nothing piss me off more than someone who can't keep his promises.

If you don't keep a deadline, you break your promise.
A deadline, by definition, does not move. If it moves again it's a liveline.

What is the root of the problem ?

When you think that doing your work will take 5 days, you tell your boss and customer that you will finish the work in 2.5 days to please them. And it takes finally 3 days with lots of stress and a broken promise and credibility loss.

I propose to change your habits. Don't divide your estimation by two but multiply it by two.

When you think that doing your work will take 5 days, you tell your boss and customer that you will finish the work in 10 days. And it takes finally 6 days with no stress and polished work.
In the eyes of your boss or customer, you just gave them an unexpected gift.
This is what I call the unexpected deadline.

Broken promise take on your self-confidence account, delivering the unexpected save on it.

Friday, November 25, 2011

Culture, integrity, and the 5 whys

I recently read the auto biography of Tony Hsieh, CEO of Zappos, Delivering Happiness.

The interesting part is that Tony discovered that the solution to make himself, his customers, his employees, his suppliers happy was to build an enterprise culture. In other words, gather, write, preach and fanatically defends the core values shared by the company.

On the personal level we call this kind of behavior integrity.

The only company with high integrity I have seen is Amazon I was such amazed when they paid shipping fee for recieving my books 30 minutes late.
But... wait Amazon has bought Zappos ! Who is the CEO of Amazon ? what a surprise ! One of the best speak I have ever seen some month ago was from this guy, this CEO, Jeff Bezos. Tony and Jeff are really inspiring !

When something goes wrong, I commonly asked the 5 whys to find the root cause of a problem, so we can fix the cause instead of the symptom.

To be a company with as much integrity as Amazon or Zappos I suspect that we should keep asking why as long as we don't hit any core value.
If you don't find any core value then the integrity of the individual or company is corrupted.

If you don't find any core value then you are responding to external events. They are affecting and control your own mood and responses.

Some external events might be total randomness. Other events can be willingly triggered by someone.

If you don't find any core value to your problem let it broken, don't solve it. Just say no and move on.
This is the first step to fix integrity a little bit.

But first what is your core values anyway ?

Sunday, October 16, 2011

Lazy Oriented Design

We often take refuge in an understandable, but disastrous, inclination towards complexity and ingenuity in our work.
Forbidden to design anything larger than a program, we respond by making that program intricate enough to challenge our professional skill.

This quote is from Mickael A. Jackson in Principle of program design.

In one sentence, when things get boring, we, make them more complicated to challenge our skills.
I think this quote is true not only for developer, but for all creative jobs.

Maybe, the enemy of great performance is high skill.
Consider being lazy and use the less skill you need to solve the problem in a simple way.

Monday, September 19, 2011

The power of unexpected

An unexpected gift, is worth 10 times more in the eye of the receiver.
An unexpected landscape is 10 times more beautiful to your eyes.
An unexpected visit to your client, is a new contract in your pocket.
An unexpected feature is a new promotion.

Under promise and over deliver, embrace the unexpected, it will makes you feel humble and it makes people happy.

Friday, September 9, 2011

Analysis paralysis

Smart people with fear of failure become quickly paralysed by over thinking on a problem.

They end up solving a problem that someone already solved. Worse ! In development they end up creating a poor replica of what someone already did.

We call it the inner-platform effect.

You can see analysis paralysis is getting you, in every field, when you start asking so much "what if..." that you can't even start.

In life, best practice is to find an easy and clear next step which can be done in less than 1h that can help you move to your goal.

In development, we write in code what should work correctly in the next 20 minutes, we call it unit testing.

Different domains, different words, same philosophy.

Thursday, September 8, 2011

Time to first customer, as a success indicator

On all software I've created, I've noticed a cool pattern.
Your first user, is as hard to have as your 10th user, which in turn is as hard to have as your 100th user.
When we ship software for 1 person (yourself, another customer, or a friend), we have done half of the work to ship to 10 other customers.
So my rule of thumb now is : if you can't ship it quickly to your first customer, trash it.

Wednesday, August 31, 2011

If something hurts...

If something hurt, doing it more frequently alleviate the problem.

Everytime you ship, your team is staying at work for overtime and don't stop crying, because of unexpected bugs ?

Make them ship one time per week, and you'll see soon it won't hurt anymore.

But the corollary is also important, when something hurt you will be tempted to do it less frequently.

It's important to keep in mind to get rid of bad habits.
I don't check my emails too often and I've stopped using facebook since I've unchecked the "remember me" check box on the login page.

As you can get rid of your addictions this way, and stay focused on your passion, you can also effectively manipulate the behavior of you users by making bad things hard to do and good things easy to do.

Sunday, August 21, 2011

Technical knowledge accumulation

I've come on an interesting point of view on one of my biggest sin on codeproject : knowledge accumulation.

Happy developers, by their passion, have an eager curiosity... at the expense of their projects.

This problem comes up when we are working on a project and we miss some technical knowledge. So we google it. But very quickly we are tempted to learn everything on the subject, even if it's not required for the project.

To not fall in this trap, I think the best solution is first to admit that our curiosity is in the way of the project.
Then stop googling and planify learning sessions.

This way our day is not fragmented between knowledge acquisition and getting things done. No time framgentation means fewer context switch, which means more time in flow state.

Sunday, July 17, 2011

What a product is

A product, they will tell you, is a set of features bundled inside the same package.

The problem is it makes you believe that your product is defined by only two things : features and package.

So you'll be tempted to add more feature to make a better product.

Your product is also defined by everything you decided to not include.
As with packaging, now, less is more.

Friday, July 15, 2011

Investing in curiosity, not only in money

Investing is not about giving money and expecting to have more money.
This capitalist investment.

Investing is about giving resource and expecting more.

Time is the most precious resource you have.
Unfortunately, you can't expect more than what you are given.

Investing time for money is a smart move, until you earn more than what you need to live.
Investing more than what you need is what economist call waste.

So now you have enough money, where to invest your time ?

In my case, I found that having guts to test new things and leaving the comfort zone without any fear of loss, is something that make every second of my time worthwhile and fun.

Investing in curiosity is definitively a good move.

Monday, July 11, 2011

Developers, who are you working for ?

2 years from now, my boss or customer was just another layer in my code.
They were something I could abstract, and not think about.

My approach these days is different. All my work is justified from the point of view of personas. This observation seems obvious, but the implication in my work is big.

For example, as a developer, you were asked to make your code extensible. But can you tell me what persona is wanting extensibility ?
Your boss ? It's not a persona, he will not create extensions to your code.
You ? another developer ?
In both case, you need to treat them as one persona, and a persona has use cases.

In other word, you need to ask why they need extensibility.
Being a good practice, is not a response.
Saving time is not a valid response either.

You can only save time to a persona by knowing why he needs you.
Because simplicity is about moving complexity at the right place for the right person.

So you better need to know with who you are dealing with and why.

I've seen this approach has two advantages :

  • By asking questions to your persona, most of the time you can remove useless feature before wasting time.
  • By asking questions, you can add constraint to your code, and constraint is what will make your code easy to explain and understand. It will improve your design without any extra layer.

I've taken this example for developers, but any creative works is in the same case.
When an enterpreneur don't know what persona will use his project he will refer to them as "people".

People is a persona too. But be careful...
People don't care about you.
People does not have money.
People know nothing about everything.
People is capricious.

By asking why people would care about you, you will see that in most case, people is not someone you want to work for.

Sunday, July 3, 2011

Security is about accepting risks

Not long time ago, Dropbox made a terrible mistake : they let the door open on data of all of their users during 4 hours.

A friend of mine, as well as thousands of people were screaming at Dropbox and how much it was unacceptable and crazy to store data here.

I'm a developer, and by no way I defend dropbox about their mistake, but I want to put things into perspective : some of the worse security breach are your own habit and they are way more dangerous than dropbox's mistake.

So the problem is : a developer of the DropBox's team made a mistake, and removed authentication on the service during 4 hours. Everybody who known the email I used in dropbox during that time span could access my data.

I have my bank account and passwords stored inside dropbox, so what are the chance to get my money stolen ?

  • A skilled hacker need to be aware of the security breach in a 4 hours time span

  • He needs to create a program to dump all files of all dropbox accounts

  • He needs to know my email account and put in his lists(these were not leaked)

  • He need to find the file where I store my passwords (more than 100 000 files are stored in my account)

  • If he finds the file, he needs to find to which service each password belongs to.

A skilled hacker would earn more money by using some of the worse security breach in the world: the coffee time.

You have way more chance that someone in your work place will use your computer when you are away without locking your session.
By accessing your unlocked computer he can :

  • Check your emails, and resetting your gmail account password to look at them at home

  • He can reset all passwords of website you are logged in your current session, and use them on your behalf

  • He can install spy

And how about the email/password you use in every website in the web ?
A little math here, imagine that you use the same password and email on every site (In fact, same password is enough because we can always find other logins you by searching in google, and looking at what you leave on the web -blog, forum posts, social website-.)
Imagine that each site have 1% chance to be hacked.
After 20 registrations on different websites you have 1-0,99^20 = 20% chance that your password will be stolen. (Yes, maybe less if the site only store a hash of your password in database, but it's not often the case, and even if it is, cloud technologies permit hackers to buy considerable computing power to brute force for cheap a lot of hash).

Your habits are the worse security breach : it does not take skills, and the target of the attack is precisely defined. (it's you)

Good security is not about having a castle to protect your data.
Good security is about accepting the risk and be aware about the biggest ones and how to fix -or at least minimize- them.

Monday, June 27, 2011

Simplicity is the economy of mind

Finance is the economy of money.
Productivity is the economy of time.
Simplicity is the economy of mind.

Your intelligence won't grow, accept the limits of brain, and save your mind as much as you can save money or time.

Making things simpler to understand is what the greatest scientists do.

"Do not worry about your difficulties in Mathematics. I can assure you mine are still greater."

And that's what Richard Feynman did when he kicked helium specialist's ass without being an expert with the Theory of Liquid Helium.

"If you can't explain something to a first year student, then you haven't really understood it."
Richard Feynman

Saturday, June 11, 2011

How to explain sofware development to your grand mother ?

When I tell people I'm a software developer, they don't really feel what I'm doing everyday.
And I was struggling to explain them :
  • I automate things... ok, but what ?
  • I make things simple... ok, that's cool but how ?
  • I give to computer what human can do... ok, so you're the guy why I lost my job ?
So now, I have a simple description about software development.

A software designer is like a teacher, he is giving name to things and actions for someone else.
Ok so what is the difference between a software designer and a teacher ?

The software designer does not know what he is talking about at first.
The teacher already knows his lesson.

The difference is significant,

The software designer must develop skill to search for information : Finding the right person, the right website, the right book.
The teacher must develop skill to improve information retention of the students.
The difference between information retention and memory is also significant.
The teacher is not limited to train students to memorize a text perfectly.
His goal is not to improve memory, his goal is to print his lesson into the students' brain.

Between the software designer and teacher, the output is also different :

In one case you are a bunch of students knowing more,
In the other case you are ready to translate the knowledge to your computer.

The next step after software design is programming : the software designer become a programmer.
But since the programmer do not really know all the domain he has just learnt (and which can sometime take several year to acquire), he will repeat this cycle periodically.
From programmer to software designer to programmer.

Programmer and Software designer was used to be two different jobs, for two different activities...
But let's be honest, do you think it's a good idea to let a teacher teaching when he knows nothing about what he is talking about ?

So my job is software developer I'm both a software designer and a programmer. But not at the same time.

Wednesday, June 8, 2011

Move the complexity, don't try to hide it

One way to have less complexity is to remove features.
But what if features are fixed ?

Do not hide it or you will get a leaky abstraction, just move the right complexity to the right person so that the wrong person will not have to see it.

In terms of code it means :
  • For the coder : do not put Database code near the View code. (Most of the time, a UI designer is not the same person as the DBA or database designer)
  • For the architect : do not put the Accounting code near the Home Automation code.
In terms of interface design it means :
  • Do not show any information the user do not need,
  • Do not create big color contrast where the user should not look,
  • Do not show advanced options, if your user is not an advanced user
In terms of enterpreneurship it means :
  • do not ask to your lawyer how to save your money,
  • do not talk about accounting with your banker,
  • do not talk about your decision process to your contractor.

Maybe it sounds obvious said like this, but having the right person seeing the right thing and nothing more is exactly what managing complexity is about.

Tuesday, June 7, 2011

Getting stuff done

Who, during his first internship was not afraid to make mistakes ?
Waiting patiently for orders, to get things done.
No order, means more freedom so more facebook browsing after all !

Wrong, from the time you have signed your contract, you are selling your time.

You can browse facebook, but :

  • you can't get up in the morning at 10am because you want to.
  • You can't tell how much you hate your boss when you want to, because thanks of him you pay the bills.
  • You can't work from home, or in front of a cup of coffee at Starbuck,
  • You can't choose with the people you want to work with,
  • You can't choose what you want to learn during work's hour,
  • You can't appreciate how you can have better relation with people, when your mouth is not shut by fear

So stop browsing during work's hour, your time is precious, and become indispensable.

Take initiatives when you don't have anything to do.
Ask forgiveness if things go wrong, it's faster and easier than asking permission.

Becoming indispensable is not a gift for your boss, it's a gift for yourself, a gift with time/money/flexibility/freedom packed in.

Friday, June 3, 2011

The why matter more than the fact

When people says "It has to be done like that" but are not able to tell you why, challenge the status quo and do another way.

It's far more valuable to get wrong and knowing why than it is to get right without knowing why.

If things go wrong, just apologize proud of learning something.
Never accept the status quo until you know why it exists.

Sunday, May 29, 2011

About managing complexity

I'm convinced that my work is to make customer's life easier.
A developer is his own customer. He is the person which will read his own code. Not the customer.

So how to manage the complexity ?

Think about your customer, code, think about yourself, refactor, repeat.

Trashed code, is not wasted code, it's code which made you think on how to make things better.

Wednesday, May 25, 2011

Simplicity is not easy

Simplicity is not easy, they are two parts of the same coin.

The difference between simple and easy is... simple :

-Simple is the intellectual and physical output you saved to your customer.
-Easy is the intellectual and physical output you saved to yourself.

The more simple it is, the more you take the burden of complexity on your shoulder.
The more easy it is,the more you let the burden of complexity to your client.

How something can be more simple and more easy ? That's simple : Cut features.
But yeah I know, your boss won't let you... I never said it was easy !

Saturday, May 14, 2011

Be careful with the "Builder Gene"

The builder gene is the gene that makes you to create, to build thing because it's fun, and because it lives longer and is bigger than yourself.
Minecraft can take your whole work's day, because of that gene.

The real problem is that some of my customer uses it when they have problems they don't have knowledge to solve.
They have a problem, they build the solution in their head, and ask me to implement.

It's a shame because the greatest value of a great problem solver is to design great solution, implementation is just 10% of his value.

In this case, asks questions on all their decision and they soon will see that you can bring a better solution.
In some case they will be annoyed by your questions and ask you to do as you want.
Yes, it's risky.

Your goal is to make your customer to smile when you leave.
You can implement bad solution and reject the fault on him, but be sure you'll not sleep very well.

Great work is great solution, not only great implementation.

Tuesday, May 3, 2011

No one can beat such a good teacher !

The one who hurts when you fail.
The one who focus your emotions towards one goal.
The one who redirect the pain toward the goal to become better.
He does not ask you to be the best, just a little better every single day.

This teacher is called curiosity, and most people lost it long ago.

If you already heard "Give a man a fish; you have fed him for today. Teach a man to fish, fed him forever."

I add : bring him back his child's curiosity and he will find a way to feed all his tribes for eternity.

Tuesday, April 26, 2011

Be careful about your skills

As you grow, you can answer more questions, and do more, quicker, better.

As you progress, the world stop listening to you.

And it's time to make things simpler.
If you don't, someone who knows less than you will do it.

Ideas that spread win, and an idea spreads when it is simple.

Yes it's how Kinect has kicked the butt of costly 3D camera made by top researchers.

They just made it simple.

Google do not give you an useful answer to a bad question

Since you are a child, you are trained to give the right answer.
But that does not make it a useful one...

How to find the useful one ?
Find the right question.

How to find the right question ?
Keep asking why, to yourself, to your prospect, to your student.

As a sales person, as a customer, as a teacher, as an engineer, we have to find the right question before searching the right answer.

Fall Rise Repeat

Everyday children teach you something valuable, just look at them carefully.
They are professional learners, way better than their teachers, way better than their parents.

They do not fear falling, they'll rise anyway, and fall again, rise again, repeat and repeat again.
The shorter the cycle, the more they learn.

In business words, we call it rapid feedback.

It is the food of curiosity, and what make the creativity growing.

That's what make children different, that's what they teach us.