[3 Mots Du Moment] Indirection, Délégation, Amender

Dans cette rubrique je présente 3 mots que j’aime ou déteste, que je prononce trop ou que je viens d’apprendre.

Dans cette rubrique je présente 3 mots que j’aime ou déteste, que je prononce trop ou que je viens d’apprendre. Mes 3 mots du moments concernent la conception et l’architecture logicielle. Je les utilise en programmation à deux, en séance d’architecture, avant d’entamer une fonction ou durant la mêlée quotidienne.

Indirection

Souvent utilisé avec “Niveau”.

Péjoratif : “On a trop de niveaux d’indirection. Il y a trop de couches entre l’API et son implémentation. Il faut simplifier.”

Positif : “Grâce à cette façade on expose pas directement l’implémentation, on fait une indirection qui nous laisse de la souplesse.”

Délégation

Dans la même veine. Un bon moyen d’ajouter une indirection.

Surtout en Objective-C, l’héritage est vraiment une solution inconfortable. Alors on use et abuse des délégués. C’est un super moyen de passer les responsabilité aux bons objets. C’est aussi une alternative aux notifications globales. Parfois seul un délégué doit être prévenu, pas besoin de diffuser un message à tous les potentiels classes intéressées.

Amender

Toujours en Objective-C, un bon moyen de ranger le code, faciliter la maintenance et pratiquer le TDD c’est d’utiliser des Category. On amende la classe pour ajouter les méthodes sur un sujet précis (aspect présentation, persistance, etc…)

Autre contexte : dans notre pratique de SCRUM, lorsqu’un bug est trouvé sur une tâche on amende le post-it pour signaler un problème (en gros on ajouter un autre post-it qui explique le bug)

They Don’t Always Have To Use Your App

If your app is for a team of users, don’t focus on the app nor the users. Focus on not impeding their interactions. Don’t forget they can talk to each other and think on their own without your app !

If your app is for a team of users, don’t focus on the app nor the user. Focus on not impeding their interactions. Don’t forget they don’t need your app to talk together. They are already doing it. Worst : don’t try to replace live interaction with electronic processes. It’s best for them and cheaper for you.

It was a shiny day of July, the meeting was 3 hours long. The goal ? Prioritizing, specifying and poker planning the next sprint. We made the mistake of scheduling it right after a 8 hour meeting with our key users (sort of day-long presentation/feedback of our latest monthly release). Now we were embarking on the next sprint. We were exhausted and really focused on details.

Examining story after story, we were fighting to make them all fit in the sprint. First mistake.

Second mistake : focusing too much on each story at a time. Loosing the big picture.

The third mistake needs a little back story.

Our application’s goal is to help people who already work closely together to do so with a tablet. They already talk to each other, they are trained to work together. They work this way since 1933 at least.

The user stories were about helping the team leader to distribute roles in his crew. Simple in appearance…

It’s was a nightmare of story dependencies, complex vague specifications, really expensive features.

Why ? We forgot the people the leader has to manage are physically  in the room during the use of the feature. Hence all controls, feedback, error-prone specifications we were trying to establish were useless.

Simply by TALKING to each other, the users could work together. We forgot that since the begging. Focusing more and more on the new tool we were building, we forgot the primary human tool : talking.

We saved our velocity and the project budget. But the danger is still around. Don’t forget the most basic human skills instead of trying to replace them all in one app.

Your Best Developer Tool : An English Dictionary

If you can’t put a name on it, you don’t know what it is. An English dictionary is your best programming friend.

If you can’t put a name on it, you don’t know what it is

Peer programming with a lead developer on an important iOS project, I discovered a plain English dictionary or a thesaurus is my best friend.

You need it to name your objects, variables, classes, services, folders, …

It’s the best way to see if you understand what you do. Concepts you will implement must have their own special vocabulary.

For example, we were looking at a name for a model object. The object had to be a pre-filling container to build a more complete report. It had to be displayed on an UI to be filled, and to be opened and transferred via an URL. So it was used both as front and backend representation.

Well, we searched a name for 2 hours.

The reason it was so difficult was that :

  • the concept was too close from another object, but different
  • the concept was vague
  • the concept had too many faces or too many responsibilities

We tried :

  • ReportExcerpt (hard to pronounce for French speakers)
  • ReportSummary
  • ReportIndex
  • ReportPrefiilingModel

We finally settled for : ReportSkeleton.

Thank you Mac OS Dictionary App 😀 (by the way it’s waaaay faster than the Internet, try it)

And it’s even more important if your are not a native english speaker. Don’t use a translator from your language to English. Search an English dictionary. You’ll win one level of vagueness and indirection of your idea.

dictionary

Why is Naver Beating Google in Korea

Naver is the most used search service in Korea. Some Koreans even have a viceral repulsion for the way Google looks and works.

Naver is the most used search service in Korea. Some Koreans even have a viceral repulsion for the way Google looks and works. Here is a small comparison. [Big Thanks to my friend Dayo for making me write this small piece]

This comparison, I hope, will help answer those 3 questions and explain why Naver is beating Google in Korea :

  1. Why is Naver so used in Korea ?
  2. Why is Google not used in Korea ?
  3. Why is Naver not used outside Korea ?

Naver Most Used Features (All on the same page)

  • Web search
  • Blog and blog search
  • Maps
  • News
  • Image search (better than Google’s in the User experience, not the accuracy in my opinion)

Crowd generated content

  • Content is mostly generated by users blogging. Koreans blog about anything. I’m amazed to see my wife looking for a restaurant in Paris, on a Naver Korean Blog ! But she is right. You have more chance to find pictures (a lot, and it matters) on a Korean blog more than in the local Google search (maybe because France is not well served on the subject)
  • The pitfall is that sometimes, like with Wikipedia, the content lakes objectivity. My wife experience confronting someones error on his blog. When told the owner of the blog argued that he was right because all other Naver bloggers put the same piece of information. But they were all wrong (about a movie filming location in Italy). Even the official-looking Naver equivalent of IMDB was re-using bloggers wrong information. Very dangerous in my opinion.

Form/Appearance

  • As you may know, Hangul is 20% more compact than latin Alphabet. Hence the amount of information that can fit on a page is higher. And because they can, they do. My wife like other Koreans prefers scrolling through a long page with  a lot of info instead of having to click deeper.
  • For some Korean people I know : “Google is ugly and messy”, and “Naver is ordered and easy to read”
  • Naver is only in Korean as far as I know.

Technical / Performance

  • As a developer : this is kind of a mystery : the Naver site, like so many Korean websites, have to be IE6 compatible (because of a custom government certificate problem). Hence it is terribly inefficient  Yet the speed of the broadband connection is so high that most Korean don’t realize. But as soon as you look at the way pages are built, you discover how much bandwidth is needed every time the page reloads. Horrifying !

Advertising on Naver

  • Very disturbing and intrusive in my opinion (Especially cosmetic surgery ads)

Advertising of Naver

  • On TV, no brand is putting it’s web address on screen, instead a Naver Box appears and the brand name is filled in. This is a powerful model I think. Both part are winning. Don’t know the detail of the deal between the brand and Naver.

Habits

  • Koreans are used to it. Hard to change for a “new” player like Google. I believe Naver was first there.
  • Everybody uses it. Following the trend is also a habit in Korea.

Nationalism

  • Naver is made in Korea.

And you my Korean friends ? Why do you like Naver so much ?

Software R&D : Stop Focusing On Technology

Some big companies have centralized development R&D. But sometimes, it’s simply not working.

Some big companies have centralized development R&D. But sometimes, it’s simply not working.

 

Start making developers better at choosing instead of choosing for them

 

Don’t misunderstand me (especialy you my dear colleagues who read this) : we need some kind of normalization in a company with a lot of different quality level developers. But if you focus on technological solutions you’ll risk to miss the point and make yourself useless. Especially on tight budget.

Do Less :

  1. Trying to produce One-Size-Fits-All-In-One-Inegrated-Frameworks
  2. Hiring intrusive consultants for a short term study
  3. Producing Out-of-the-real-world POCs (Proofs of Concepts)
  4. Listening to all exterior vendors that claim to have the best One-Tool-To-Rule-Them-All

Instead Start :

  1. Gathering common needs from different projects already in production or in the making
  2. Emulate innovation by offering a kind of Entreprise Github
  3. Best : go open source and participate to the real world solutions
  4. Organize as many education events as possible. It’s harder but cheaper than buying soon deprecated solutions.
  5. Create an internal StackOverflow to promote help between product departments that never speak together.
  6. Promote User Groups for both external (open source) tools and internals
  7. Look for the best practice, not the average one. For example promote and teach TDD and Continuous Integration.

What matters is not an all in one solution that will deprecate in 2 years, what matters is making the other average developers of your company better.

It’s about education, not technology. It’s not about methodologies, it’s about state of mind.

 

What Kind Of Lead Developer Are You ?

There are at least 2 kinds of Lead Developer. The Backup and The Coach. A leader is always someone making you progress in your craft. Either by teaching or by showing.

There are at least 2 kinds of Lead Developer. The Backup and The Coach. A leader is always someone making you progress in your craft. Either by teaching or by showing.

The Backup

He is working in the shadows. He is your safety net. Every commit, every unit test or method, he scrutinize it.

His goal is to soften the difference of levels between other developers. He is quiet and working on tasks you don’t see at first :

  • repairing or improving a unit test
  • reordering your files
  • answering your small questions
  • taking and applying merging decisions for your
  • making great utility classes and stacks to accelerate your work on the most visible part of your project

The difference with a simple developer is that he can explain what and why he is doing. Hence, you progress.

Each of his commit is to be looked at. Because they can and should change the way you code.

The Coach

He is spending more time with you than coding on his own. Peer programming with him (either as a pilot or a co-pilot) is a better than 2 months of school.

It can be frustrating for him, just like for the Backup leader; because he is more helping others to code than coding.

He is the guy you look after every time you start the architecture of a new user story. And you should. More visible he also have to be humble yet firm.

You Should Hire Both

They are complementary. There can be many leaders, not just one. And the time spent by the first must be used by the second to educate the team.

Both are the architects of the project, one by example the other by reputation.

I worked with a good combo on an iOS project. And it’s a joy to follow them, through the code, or in peer programming.

And you ? What kind of lead developers did you meet ?

 

If you still hang on to “features” you are not as Agile as you think

If you still speak about features, or plan to add another sprint to “finish” the backlog : you are not Agile.

On some Agile projects I’ve been working on I noticed an arch reality :

If you still speak about features, or plan to add another sprint to “finish” the backlog : you are not Agile.

One of the first warning I give a new client about Agile projects is the following : your backlog is not a magical whishlist. You can have :

  • sprints (event with fixed time frame)
  • a backlog
  • a board
  • a scrummaster
  • a product owner
  • a daily meeting
  • and so on

but if you still think the team will finish all your User Stories at  the end of the last sprint, you’re gonna have a bad time.

 

So Agile is a big scam, right?

No. Certainly not. It’s a reality call : if you don’t have enough money to build all you have in mind, you won’t.

And you know what ? It’s a good thing ! Features are not the goal of all this sprinting. It’s about VALUE.

Your backlog is not final. It’s a moving plan. It’s a goal. And User Stories are certainly not features. A US can be composed of many features. Or none sometimes (just a simple analog solution)

There will be delay and lag. Even in Agile of course. And the solution is not to do another sprint. It’s to cut down the number of features and start concentrate on what is really meaningful to users.

If you think I’m to vague start looking a the best product out there : less features but an immense value each time you use it.

Dismount what you already built !

Maintenance is a part of your software value. It has a cost, it represents a debt.

So some final word of advice :

Have some budget dedicated to dismount or erase some features. It increases software quality (with less code base) and increases its value (more stable, less feature creeped soft).

 

 

 

Why living in Korea seems better than France

Here is my theoretical/biased/undocumented/partial point of view of why Korea is a better place to live for a frenchman.

Warning : I’m French. Married to a Korean woman. We live in France in a small town near Paris. We only spend vacations in Busan, Korea, not real living. Don’t know about Seoul thought.

You might want to look a this Price comparison between Busan and Paris.

This is a way to engage in a discussion with my French and Korean readers.

Here is my theoretical/biased/undocumented/partial point of view of why Korea is a better place to live for a Frenchman.

Security

Better :

  • You have a much much higher chance to be attacked in the French subway than taking a bomb from North Korea
  • Streets feel safer
  • More respect between people

Worst :

  • I you watch too much TV you might get influenced about Pyongyang’s actions

Transports

Better :

  •  Taxi is much cheaper and frequent
  • Oil price is lower
  • More alcohol controls at night
  • Better roads and lights are on !
  • Better subway, cleaner, no strikes
  • More bus, better time estimation

Worst :

  • Same traffic jams
  • Don’t drive : you’ll die.
  • Few people really wear seatbelt

City

Better :

  • More larger streets
  • Clearer indications
  • No dog sh..

Worst :

  • Too much billboards
  • Some small streets smell really bad
  • No historical places or old interesting places in Busan
  • Less parks, but many mountains

Technology

Better :

  • One of the fastest Internet infrastructure on earth
  • 4G-3G everywhere. Phone always able to catch network.
  • Edge-2G ? What’s that ?
  • Phone plan cheaper and less blocking

Worst :

  • Too much technology ?

Services

Better :

  • Your are a king. 
  • Employees smiles. For real. Impressive. Never saw that before.
  • Anything can be delivered anywhere, cheaply, real fast
  • Postman does everything in his power to give you your parcel. Don’t have to go to post office 48h after he came.

Worst :

  • Hard life for people working in services
  • It makes you impatient and demanding sometimes

Shops

Better :

  • Always find some place open
  • Supermarket still open at 11pm !
  • Incredible service
  • Everywhere

Worst :

  • Loud music and advertising in some streets
  • Some article are much more expensive

Restaurants

Better :

Worst :

  • More and more junk food. But, hey, you have the choice not to go !
  • Wine is so expensive !

Accommodation

Better :

  • More shops and commodities around
  • No bedbugs (personal note after a year of suffering)
  • Cheaper
  • Larger

Worst :

  • More appartement than house
  • Less protection when renting
  • 2 years in advance to rent sometimes

Health

Better :

  • Appointment in the day (in France 3 months some times for a dentist)
  • Cleaner, calmer
  • Very efficient and dedicated employees
  • More employees
  • Choice between traditional and modern healthcare, no prejudice between the two

Worst :

  • More expensive

Education

Better :

  • Real culture of personal development
  • Aim for the best
  • First school is not a babysitting place, it’s where learning starts
  • Less or no babysitting required
  • Many baby/child friendly places

Worst :

  •  Very expensive !
  • Big burden for kids, starting early

Administration

Better :

  • So quick, no comparison possible (10 minutes for obtaining national number  for our daughter)
  • Lot of employees that smiles and are nice (yes it could be)

Worst :

  • You should speak Korean, it helps 😀

Ambiance/Population

Better :

  • Apparently less social status division
  • More respect
  • Less touching between people

Worst :

  • More division between generations/age

Work

Better :

  •  Risk friendly / fast environment
  • More innovation, less tax

Worst :

  • Less protection
  • Too much hierarchy
  • Less less vacations

I’ll edit and correct this article from time to time.

Please give me your opinion on the real fact.

Did I forget a category ?

Translate your iOS app to Korean : a tip

While trying to add Korean support to the Wifinsite app, I ran in the following problem : the app stays in english. French was ok, but no Korea.

Actually you have to add 2 Korean languages : ko(korean) and ko-KR(South-Korea). Very disturbing.

 

PS/ Sorry for the short article. I’ll post a detailed tutorial if needed.

 

Traduire une application iOS en Coréen : astuce

En essayant d’ajouter le coréen pour l’application Wifinsite j’ai rencontré le problème suivant : l’application reste en anglais.

Il faut ajouter DEUX langues : ko(korean) et ko-KR(South Korea). Autrement l’application se lance dans la langue par défaut (anglais pour moi).

PS/ Désolé pour l’article rapide mais je retourne développer. Si besoin je mettrais ici un tutoriel détaillé.