Multi-environment Flutter Projects with Flavors

In a real-world Flutter project, you usually develop against separate environments, such as development and production. Each environment can have its own back end, API, configuration, and even separate visual identities if you want to clearly differentiate them.

Flutter Flavors make it possible to run different versions of your app on the same device. At the same time, they keep those environments isolated from one another.

In this tutorial, you’ll transform a single-environment Flutter project called BuzzwordBingo into a multi-flavor app. In particular, you’ll learn how to:

  • Isolate your configuration for each environment.
  • Flavorize your Android and iOS apps.
  • Flavorize the web part of your project.
  • Integrate Firebase and work with separate Firebase projects.

So get ready to track all the buzzwords in the next marketing presentation you watch!

NB: In this tutorial, the Firebase configuration focuses on a typical use case with Firebase and Cloud Firestore. If your project requires native plugins like Firebase Analytics, Crashlytics or Performance Monitoring, you will need to configure Firebase integration differently. We might cover this more advanced use case in a future tutorial.

Getting Started

Download the starter project by clicking here. You can either clone this starter branch with git or download a ZIP file by clicking the green Code button on Github. Open the project in the latest version of Android Studio with the latest version of the Flutter and Dart plugins installed.

Also, make sure that you use Flutter version 2.10 or above. Open pubspec.yaml and click Pub get in the upper right corner of the editor to download all dependencies.

Next, select a mobile simulator and run the app. You’ll see a home screen with three pre-filled buzzwords and a text field to add new ones.

BuzzwordBingo running on a mobile simulator
Buzzword Bingo running on a mobile simulator

BuzzwordBingo helps you keep track of all the buzzwords used in a marketing presentation. If you type a new buzzword in the top text field, and then the enter or the done button, you add a new buzzword to the list. If you type any of the existing buzzwords, you increase its count by one.

In the end, you’ll store buzzwords in a Firebase Firestore collection. But the starter project stores buzzwords in memory.

So if you restart the app, the state is reset. That’s not what you want, so you’ll need to add some persistence to this app. But first, you have to prepare your project to handle several environments. So, let’s start with configuration.

Isolating Your App’s Configuration

When your app is available in several flavors, you need to customize some settings for each of those flavors. For example, those settings can include the app’s name, colors and some of its keys for third-party APIs.

A naive approach would be to detect the app variant currently running everywhere you need to customize something. But that would quickly become unmanageable.

Instead, you’ll group all those environment-specific settings into the following AppConfig class. In lib, create a new file named app_config.dart and add:

import 'package:flutter/material.dart';

// 1
enum Environment { dev, prod } 

// 2
class AppConfig extends InheritedWidget {
  // 3
  final Environment environment;
  final String appTitle;

  // 4
  const AppConfig({ 
    Key? key, 
    required Widget child, 
    required this.environment, 
    required this.appTitle,
  }) : super(
          key: key,
          child: child,
        );

  // 5
  static AppConfig of(BuildContext context) {
    return context.dependOnInheritedWidgetOfExactType<AppConfig>()!;
  }

  // 6
  @override
  bool updateShouldNotify(covariant InheritedWidget oldWidget) => false; 
}
Code language: Dart (dart)

Here’s a code breakdown:

  1. First, you declare an Environment enumerated type to define your environments.
  2. Next, you declare the AppConfig class, which is an InheritedWidget. You can attach an InheritedWidget to a BuildContext. This way, you can access this InheritedWidget from any of its descendants in the widget tree.
  3. Your AppConfig class has two properties: one for environment and one for the environment-specific appTitle.
  4. The constructor takes required values for your environment and environment-specific properties. It also takes a child widget. AppConfig will sit at the root of your widget tree.
  5. The static of function makes it easy to access the closest instance of AppConfig by searching the BuildContext parameter and all its parents. That’s what BuildContext‘s dependOnInheritedWidgetOfExactType does.
  6. Finally, since AppConfig extends InheritedWidget, it has to override updateShouldNotify. The framework calls this function to decide whether it should notify widgets that use AppConfig when values inside AppConfig change. Since all AppConfig‘s properties are final and AppConfig is immutable, you can return false.

By default, when you build and run a Flutter project, it runs the main function inside main.dart. To have several flavors of your app, you need one entry point for each flavor.

Inside lib, create a file named main_dev.dart and add the following code to it:

import 'package:flutter/material.dart';

import 'app_config.dart';
import 'buzzword_bingo_app.dart';

void main() {
  // 1
  const configuredApp = AppConfig(
    child: BuzzwordBingoApp(),
    // 2
    environment: Environment.dev,
    // 3
    appTitle: '[DEV] BuzzwordBingo',
  );
  // 4
  runApp(configuredApp);
}
Code language: Dart (dart)

The main function:

  1. Wraps AppConfig around calling BuzzwordBingoApp.
  2. Sets the environment property to the dev environment.
  3. Adds [DEV] to the appTitle.
  4. Then it runs the app.

Next, in the lib folder, create a file called main_prod.dart.

import 'package:flutter/material.dart';

import 'app_config.dart';
import 'buzzword_bingo_app.dart';

void main() {
  const configuredApp = AppConfig(
    child: BuzzwordBingoApp(),
    // 1
    environment: Environment.prod,
    // 2
    appTitle: 'BuzzwordBingo',
  );
  runApp(configuredApp);
}
Code language: Dart (dart)

The code is almost the same as in main_dev.dart, except:

  1. The environment property is set for prod.
  2. appTitle is the production title.

Now that you’ve set up the dev and prod environments, delete lib/main.dart.

Open lib/buzzword_bingo_screen.dart which declares the app’s main screen. After // TODO: replace with AppConfig-extracted app title, replace the title property with:

title: Text(AppConfig.of(context).appTitle),Code language: Dart (dart)

Instead of using a generic constant, you inject the environment-specific value of appTitle. There’s a compile error so make sure to import app_config.dart to resolve it.

import 'app_config.dart';Code language: Dart (dart)

Next, open lib/buzzword_bingo_app.dart and look for the comment that says // TODO: replace with AppConfig-extracted app title. Replace the title of your MaterialApp, like you did before:

title: AppConfig.of(context).appTitle,Code language: Dart (dart)

Like before, import app_config.dart as well.

import 'app_config.dart';Code language: Dart (dart)

Last but not least, in Android Studio’s toolbar, click the build configuration dropdown. Then click Edit configurations….

Edit Configurations...

Rename the Run/Debug configuration from main.dart to dev. In Dart entrypoint, replace main.dart at the end of the path with main_dev.dart.

Rename the Run/Debug configuration

Duplicate this configuration by selecting dev under Flutter in the left menu. Then click Copy Configuration.

Copy the dev build configuration

Rename the new configuration prod.

In Dart entrypoint change main_dev.dart to main_prod.dart and click OK.

Configure the prod Run/Debug configuration

Back in the editor, select dev as your Run/Debug configuration and click Debug to run the app again.

Select the dev configuration

Note that the title in the app bar contains [DEV].

Dev configuration running in a mobile simulator

Select prod as your build configuration. This time, the title is Buzzword Bingo:

Prod configuration running in a mobile simulator

If you run the app in a browser by selecting Chrome (web) as a Flutter Device, this is what you get for the dev flavor:

Dev configuration running in a web browser

As you can see, both the title in the app bar and the page’s title in the browser tab are environment-specific.

Now you can install either the dev or the prod version of your app, but not both on the same mobile device yet. That’s because, on Android as in iOS, both versions of your app have the same identifier. You need to configure each native project to use a different identifier for each flavor.

You’ll start with the Android app.

Preparing Your Android App

In Android Studio, open android/app/build.gradle. In the defaultConfig section, notice that applicationId is com.epseelon.buzzwordbingo.

That’s perfect for the production version of your app, but you want to override it for its development variant. This is where you’re going to use Android flavors.

Under // TODO: insert flavor configuration here, add:

// 1
flavorDimensions "env"

// 2
productFlavors {
    // 3
    dev {
        dimension "env"
        applicationIdSuffix ".dev"
        resValue "string", "app_name", "[DEV] BuzzwordBingo"
    }
    // 4
    prod {
        dimension "env"
        resValue "string", "app_name", "BuzzwordBingo"
    }
}Code language: Gradle (gradle)

In this code:

  1. You declare a new flavor dimension called env.
  2. Then you specify all the product flavors and override certain properties for each value of the env dimension.
  3. For the dev environment, you add a suffix to the applicationId. This way, the identifier for the dev version of your app is com.epseelon.buzzwordbingo.dev. You also define a new string resource called app_name which you’ll use in a minute.
  4. For the prod flavor, notice that applicationSuffix isn’t listed. This is because you’re keeping the default applicationId without any suffix, but you set the app_name string resource to a different value.

Now, open android/app/src/main/AndroidManifest.xml. Find this comment: <!-- TODO change the android:label attribute here -->.

Replace the content of the android:label attribute with:

  android:label="@string/app_name"Code language: XL (xl)

This ensures that each flavor of your app shows a different name on the Android launcher.

Notice that android:icon uses a mipmap resource called ic_launcher. Thanks to the flavor configuration you added earlier, Gradle looks for this resource under android/app/src/dev and android/app/src/prod respectively for each flavor. You’ll find environment-specific icons in those folders.

Flavor-specific icons

Now that you customized the app’s identifier, name and icon, you need to update the dev and prod configurations. Click Edit Configurations again.

Edit Configurations...

For the dev configuration, type dev in the Build flavor field to point Flutter’s build to the dev flavor of the Gradle project as you configured it.

Add dev build flavor

Do the same for the prod configuration, setting Build flavor to prod.

Add prod build flavor

Click OK.

Make sure you have an Android emulator running. First, run your app on the Android emulator with the dev configuration.

Dev app running in an Android simulator

Now run the prod configuration.

Prod app running in an Android simulator

Leave both apps to come back to the launcher. You’ll see that both flavors of the app are there, with different names and icons:

Both apps installed in parallel on the same simulator

You can even run both of them at the same time, with different buzzwords.

Android app: check! Now on to your iOS app.

Preparing Your iOS App

Creating Build Configurations

In Android Studio, right-click the root of the project in the Project view, navigate to Flutter and choose Open iOS module in Xcode.

Menu to open iOS module in XCode

In Xcode’s Project navigator, select the root Runner, then Runner project and finally Info tab. In the outlined Configurations section, Xcode created three build configurations for you: Debug, Release and Profile.

Access the Info tab for the Runner project

First, rename each of these three configurations respectively to Debug-prod, Release-prod and Profile-prod.

Rename all configurations by adding a "-prod" suffix

Next, click the + button under the list of configurations. Then click Duplicate “Debug-prod” Configuration.

Duplicate Debug-prod configuration

Rename the new configuration Debug-dev.

Rename it into Debug-dev

Do the same for Release-dev and Profile-dev until you get this list of configurations:

Do the same for all the configurations

Next, you need to create separate schemes for dev and prod.

Creating Schemes

In Xcode’s top bar, click the Runner scheme, which has a green icon, and then Manage schemes….

Manage schemes...

In the dialog that pops up, rename the Runner scheme to prod. With this scheme still selected, click the ellipsis icon under the list of schemes and then Duplicate.

Rename the Runner scheme to "prod"

This creates a new scheme and opens a new dialog to configure it. Rename it to dev. Next, press Enter.

You’ll land back in the list of schemes:

Rename the new scheme into "dev"

Time to configure the build configurations each scheme uses. Double-click the dev scheme and the list of configurations is displayed.

Select the dev build configuration for each stage of the dev scheme

Select Run and set the Build Configuration to Debug-dev. Repeat these steps for the Test and Analyze build configurations.

Select Debug-dev build configuration for the Run stage

Now, select Profile and set its Build Configuration to Profile-dev.

Select Profile-dev build configuration for the Profile stage

Finally for Archive, set the Build Configuration to Release-dev.

Select Release-dev build configuration for the Archive stage

Click Manage Schemes… to return to the list of schemes.

Manage Schemes...

Double-click the prod scheme.

Check the prod scheme

Configure all the build phases to use the -prod build configurations.

Next, you’ll override settings for each scheme and build configuration.

Customizing Settings for Each Scheme

In the Project navigator, select Info or Info.plist in the Runner group. Look for the Bundle display name entry and change BuzzwordBingo to $(APP_NAME).

Set Bundle display name to $(APP_NAME)

Now in the Project navigator, select Runner at the root again and then the Runner TARGET. Go to the Build Settings tab.

Access Build Settings for the Runner target

In the tab’s toolbar, click the + button and Add User-Defined Setting. Rename the new setting APP_NAME to match the variable name you used earlier in Info.plist. Next, type [DEV] BuzzwordBingo as a value in dev-related build configurations and BuzzwordBingo for prod-related ones.

Customize APP_NAME for each build configuration

Next, in the search bar of the Build Settings tab, type AppIcon.

Search for AppIcon in Build Settings

Expand Primary App Icon Set Name. Then add the appropriate suffix corresponding to each build configuration:

Set build configuration-specific app icons

These names match the assets included in the starter project.

Still in the Build Settings tab in the Runner target settings. This time, search for bundle identifier. Expand the Product Bundle Identifier setting and add .dev as a suffix for all three dev-related build configurations, like so:

Configure bundle identifier for each build configuration

Now, you can run both flavors of your app on the same iOS device.

Go back to Android Studio. Select an iOS simulator and the dev build configuration that points to the dev flavor.

Build and run. You’ll see the development app.

Dev app running on an iOS simulator

Run the prod build configuration and notice the title in the app bar is the prod version.

Prod app running on an iOS simulator

After running the prod version, look at the home screen and you’ll see both apps installed side by side on your iOS device, with different names and different icons.

Both iOS apps installed in parallel on the same simulator

Preparing Your Web App

In the starter project, you’ll find a webenv folder. This folder contains a subfolder for each environment. Inside each environment-specific folder, there’s a favicon.png and a couple of other icon images.

Webenv folder with environment-specific files

You’ll need to copy the content of the correct flavor-specific webenv subfolder to the web folder before you run your app. The starter project contains scripts to automate this process for both Windows and Unix/macOS.

OS-specific scripts to copy the content of the proper webenv subdirectory to web

The copy_webenv.* scripts are pretty straightforward.

Windows: xcopy webenv\%1 web\ /E/Y
Unix/macOS: cp -rf ./webenv/$1/* web/

These scripts take the environment name as a parameter; %1 and $1 respectively. So all you need to do is call that script with the right parameter right before running the app.

In Android Studio, click the build configuration drop-down menu and then Edit Configurations….

Edit Configurations...

In the toolbar of the left menu, click the + icon to add a new configuration and scroll down and select Shell script.

Add a new "Shell Script" Run/Debug configuration

Rename the shell script configuration to Copy webenv dev.

In the Script path field, select either copy_webenv.sh if you’re on macOS or Linux, or copy_webenv.cmd in you’re on Windows. As shown earlier those scrips are at the project root level.

Then set Script options to dev and leave Working directory to the root of your project.

Here is what you must end up with:

Configure the "Copy webenv dev" Run/Debug Configuration

Using the Copy Configuration button in the toolbar of the left panel, duplicate the Copy webenv dev and rename the copy to Copy webenv prod. Type prod in the Script options field.

Configure the "Copy webenv prod" Run/Debug Configuration

Click Apply to save the new configurations.

Then, in the left panel, expand the Flutter section and select the dev configuration. In the Before launch section, click the + button, then Run Another Configuration:

Add a "Run Another Configuration" step before launching the dev Flutter Run/Debug Configuration

Select Copy webenv dev in the list that pops up. Here is what you must end up with:

Double check your "Before launch" step

Repeat the process for the prod Flutter configuration. Add a new configuration before launch and select Copy webenv prod this time. Click OK.

Now select Chrome (web) as a target, the variant of your app you want to run and click Run or Debug.

Select "Chrome (web)" as a target and debug

Keep an eye on the favicon in the browser tab for each flavor:

Dev app running in a web browser
Prod app running in a web browser

Integrating Firebase

If you look at lib/buzzword_bingo_screen.dart, you’ll see that for now, the app reads buzzwords from a StreamBuilder. It initializes this StreamBuilder with a List of Buzzwords. It manipulates the Stream using a StreamController. So every time you rerun the app, it starts with the same initial list and forgets about the buzzwords you might have added or changed. It’s time to make this more persistent, but in a way that lets you manipulate separate databases for each flavor. You’ll do that using Firebase’s Cloud Firestore.

Note: Firebase integration into a Flutter project used to be more painful than it is now. You had to integrate it at a native level, download separate configurations for Android, iOS and the web and it was quite error-prone. But recently, the FlutterFire team changed that for the better. So if you already experienced the legacy Firebase/Flutter integration process, this tutorial will show you the new way. But again, keep in mind that certain Firebase features like Analytics, Crashlytics or Performance Monitoring still required legacy native configuration. We might cover this in a future tutorial.

Integrating Firebase Core

flutter pub add firebase_coreCode language: Shell Session (shell)

In Android Studio, open the Terminal panel and type the following command:

This will add the following line to pubspec.yaml:

firebase_core: ^1.15.0Code language: YAML (yaml)

Note that the exact version may vary if a more recent version is available.

Next, since the new integration process uses FlutterFire CLI, which depends on Firebase CLI, you need to install Firebase CLI on a global level, and log in if you have not already done so. If you have NodeJS 10+ installed on your system, the easiest way to do it is to run the following command, whether you’re on Windows, Linux or macOS:

npm install -g firebase-toolsCode language: Shell Session (shell)

If you don’t have NodeJS, there are other ways described in Firebase CLI’s documentation.

Then, log in to your Firebase account with the following command:

firebase loginCode language: Shell Session (shell)

If you’re not logged in yet, this command will open a browser to let you log in to your account. Then, run the following command in the same terminal to install FlutterFire CLI:

dart pub global activate flutterfire_cliCode language: Shell Session (shell)

Next, you need to prepare directories for your multi-flavor setup. In your project, create the following directories:

  • lib/firebase/dev
  • lib/firebase/prod

Then, back in the Terminal, run the following command to create a Firebase project for your dev app:

flutterfire configure -i com.epseelon.buzzwordbingo.dev \
-a com.epseelon.buzzwordbingo.dev \
-o lib/firebase/dev/firebase_options.dart \
--no-apply-gradle-plugins \
--no-app-id-jsonCode language: Shell Session (shell)

This command will create a Firebase project and register an iOS app with com.epseelon.buzzwordbingo.dev as a bundle identifier. It will also register an Android app with com.epseelon.buzzwordbingo.dev as its package name. It will generate a configuration class in lib/firebase/dev/firebase_options.dart.

Finally, it will not apply gradle plugins in the Android project and it will not generate an application id file for iOS, which are only useful if you use Firebase services like Analytics, Performance Monitoring or Crashlytics

But the command is interactive. First, it retrieves a list of existing projects associated with the Firebase account you are logged in to. Using the arrow keys on your keyboard, place the cursor in front of <create a new project> and type Enter.

Then it asks for a project id for your new Firebase project, which needs to be unique across all of Firebase. So feel free to come up with a unique identifier of your own, something like buzzwordbingo-dev-<a number of your choice>.

The next question is about which platforms you want your configuration to support. Leave the default selection of android, ios and web as it is.

Once the command is complete, it generates lib/firebase/dev/firebase_options.dart with the DefaultFirebaseOptions class in it.

Next, repeat the process for the prod flavor of your app, using the following command:

flutterfire configure -i com.epseelon.buzzwordbingo \
-a com.epseelon.buzzwordbingo \
-o lib/firebase/prod/firebase_options.dart \
--no-apply-gradle-plugins \
--no-app-id-jsonCode language: Shell Session (shell)

Notice that the iOS bundle identifier, the Android package name and the output are different.

Answer the questions like before and in the end, you’ll have a corresponding lib/firebase/prod/firebase_options.dart file.

NB: You should keep these firebase_options.dart files out of any public version control as they contain Google API keys you might want to keep private.

You can open the Firebase Console to see the two projects you have just created.

Back in Android Studio, open lib/main_dev.dart. Make the main() function async so that you can use await inside it.

void main() async {
  ...
}
Code language: Dart (dart)

Then insert the following code at the beginning of the main() function, right before the AppConfig initialization:

WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);Code language: Dart (dart)

The first line makes sure all the Flutter environment initialization is complete. Then you initialize Firebase itself using the DefaultFirebaseOptions class that FlutterFire CLI generated earlier.

Add the following imports:

import 'package:firebase_core/firebase_core.dart';
import 'firebase/dev/firebase_options.dart';Code language: Dart (dart)

Notice that since you’re in the dev entry point, you import the dev Firebase project configuration.

Repeat the same process for lib/main_prod.dart until you end up with:

import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';

import 'firebase/prod/firebase_options.dart';
import 'app_config.dart';
import 'buzzword_bingo_app.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );
  const configuredApp = AppConfig(
    child: BuzzwordBingoApp(),
    environment: Environment.prod,
    appTitle: 'BuzzwordBingo',
  );
  runApp(configuredApp);
}
Code language: Dart (dart)

Enabling Firestore

Open Firebase Console and select the dev project you created earlier with FlutterFire CLI.

In the left menu, under the Build section, select Firestore Database.

Next, click the Create database button to enable Firestore. In the dialog that pops up, select Start in test mode.

Then, select the Cloud Firestore location closest to you and click Enable.

Repeat the same process in your prod Firebase project.

Then, back in Android Studio, in the Terminal, run the following command to add the latest version of Firestore as a dependency:

flutter pub add cloud_firestoreCode language: Shell Session (shell)

This will add the following line to your pubspec.yaml. The version might be different but that’s OK.

cloud_firestore: ^3.1.13Code language: YAML (yaml)

Integrating Firestore in iOS

Then, open ios/Podfile, uncomment the line after the comment that says # TODO: Uncomment this line to define a global platform for your project. Set the minimum iOS version supported by your app to 10.0, which Cloud Firestore now requires:

platform :ios, '10.0'Code language: plaintext (plaintext)

Still in ios/Podfile, replace # TODO: Add precompiled Firestore dependency here with:

pod 'FirebaseFirestore', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => '8.15.0'Code language: JavaScript (javascript)

This adds a precompiled version of some Firestore dependencies to greatly speed up your iOS build.

Then run the app on an iPhone simulator if you can. If your build fails with an error message that starts with Error running pod install, look for another part of the error log that says something like this:

[!] CocoaPods could not find compatible versions for pod "FirebaseFirestore":
  In Podfile:
    FirebaseFirestore (from `https://github.com/invertase/firestore-ios-sdk-frameworks.git`, tag `8.14.0`)

    cloud_firestore (from `.symlinks/plugins/cloud_firestore/ios`) was resolved to 3.1.13, which depends on
       Firebase/Firestore (= 8.15.0) was resolved to 8.15.0, which depends on
         FirebaseFirestore (~> 8.15.0)Code language: Shell Session (shell)

It means that your version of cloud_firestore depends on a more recent version of the precompiled firestore-ios-sdk-frameworks dependency. Normally, the error message should also mention which version it expects. In that case, upgrade the dependency to that version in ios/Podfile, delete ios/Podfile.lock (if it already exists) and the entire ios/Pods directory, and run your app again.

Now, you need to configure Android for Firestore.

Integrating Firestore in Android

Open android/app/build.gradle and replace this line:

minSdkVersion flutter.minSdkVersionCode language: Gradle (gradle)

With this one:

minSdkVersion 19Code language: Gradle (gradle)

The Firestore SDK for Android also comes with a lot of functions. By default, Android limits the number of functions you can compile into an app. You need to enable multidex support to work around that. Flutter recently added a --multidex command-line argument that should take care of that. But in my experience, it doesn’t work very well, so it’s best to do it manually. Still in android/app/build.gradle, replace the comment that says // TODO: enable multidex here with:

multiDexEnabled trueCode language: Gradle (gradle)

Finally, at the end of the file, in the dependencies section, replace the comment that says // TODO: multidex dependency here with:

implementation 'com.android.support:multidex:1.0.3'Code language: Gradle (gradle)

With that, you can run the app on an Android simulator.

Updating BuzzwordBingo to Use Firestore

Open lib/buzzword_bingo_screen.dart. Replace the comment that says // TODO: Add Firestore properties here with:

final _firestore = FirebaseFirestore.instance;
late CollectionReference<Map<String, dynamic>> _buzzwordsCollection;Code language: Dart (dart)

Then, add the missing import:

import 'package:cloud_firestore/cloud_firestore.dart';Code language: Dart (dart)

Next, replace the entire implementation of _watchBuzzwords() with:

Stream<List<Buzzword>> _watchBuzzwords() {
  // 1
  _buzzwordsCollection = _firestore.collection('buzzwords');
  // 2
  return _buzzwordsCollection.orderBy('word').snapshots().map((snapshot) {
    // 3
    return snapshot.docs.map((document) {
      // 4
      final documentData = document.data();
      return Buzzword(
        word: documentData['word'] as String,
        count: documentData['count'] as int,
      );
    }).toList();
  });
}Code language: Dart (dart)
  1. Create a reference to a buzzwords collection in your Firestore database.
  2. Return a stream that receives an event each time a change occurs on your collection of buzzwords sorted by word.
  3. Each stream event is a Firestore QuerySnapshot that you need to map to a list of Buzzwords.
  4. In turn, you can map each QuerySnapshot document onto a new instance of Buzzword.

With that, your grid of buzzwords will synchronize with your Firestore database.

Then, replace the implementation of _addWord(String word) {} with:

void _addWord(String word) async {
  // 1
  _wordController.clear();
  
  // 2
  final buzzwords =
      await _buzzwordsCollection.where('word', isEqualTo: word,).get();
  if (buzzwords.size == 0) {
    // 3
    await _buzzwordsCollection.add(<String, dynamic>{
      'word': word,
      'count': 1,
    });
  } else {
    // 4
    final buzzwordDocument = buzzwords.docs.first;
    final oldCount = buzzwordDocument.data()['count'] as int;
    await buzzwordDocument.reference.update({'count': oldCount + 1});
  }
}Code language: Dart (dart)
  1. First, you clear the text field.
  2. You query the buzzwords collection to look for any existing buzzword with the same word.
  3. If there are none, you create a new one with a count of 1.
  4. If there is one already, you update the existing one.

Finally, you can remove the declarations of the _buzzwords and _buzzwordsStreamController properties.

Running the App

Now you can run the dev app on a simulator:

Dev app plugged into the dev Firebase project running in a mobile simulator

It starts with an empty list of buzzwords since your database is still empty. Try adding a couple of buzzwords and incrementing their count:

Adding a few buzzwords in the dev app

Check your Firebase console and you’ll see the new buzzwords in the database:

New buzzwords appear in your Firestore console

Now run the prod version of your app. It starts with an empty screen, since it connects to an separate database. Try adding different buzzwords:

Adding buzzwords in the prod app running in a mobile simulator

You can find the buzzwords you add in the Firebase console of your prod project too.

Last but not least, run the dev version of your app in a browser:

Dev app running in a web browser

It starts with the buzzwords you created earlier, which demonstrates you have persistence now.

Where to go from here?

In this tutorial, I showed you how to make your Flutter project multi-flavored, how to isolate your configuration, run several flavors of the same app on the same device, and how to integrate this setup with Firebase as a back end.

You can download the final version of this project by cloning this final branch from Github, or downloading the ZIP file for it.

I have been wanting to create this tutorial for a long time, as a lot of those I found out there do not cover web configuration and/or the latest and greatest of FlutterFire.

In the future, I might follow up with more details about how to configure your multi-flavor project when you need Firebase libraries like Analytics, Crashlytics or Performance monitoring.

But for now, this should be enough to get you started with your next project. Of course, if you don’t use Firebase as your backend, it’s easy to add other environment-specific backend URLs to AppConfig.

Hopefully, you will find this tutorial useful. If you have any question, feel free to leave them in the comments.

The new normal

Photo by Jordan Wozniak on Unsplash

Part of the reason I moved to a full-time digital nomad lifestyle is that I expected something like the current situation to happen. Not like that though. I thought the system would slowly collapse under its own weight, but I didn’t expect such a violent crisis to hit all of it globally and expose all of its weaknesses at the same time.

Unfortunately, whether it is slow or violent, it doesn’t seem to make any difference when it comes to the resistance to change.

I just spoke with a recruiter, looking for a highly specialized profile involving corporate backend development and blockchain stuff, the kind of profile that is really hard to find, even in conditions where more and more people are going to lose their jobs and missions. And as soon as I told her I was fully remote, the conversation stopped almost instantly, because her client is looking for someone who can work remotely at first, but is expected to work on site quickly when all of this is over. Denial.

When will all of this be over? No one can say. How long can companies afford to make decisions based on the premise that it will all be over soon, and that everything will go back to the way they were? And even if the COVID-19 pandemic ends soon, when will the economic and social fabric of our world fully recover, if ever? No one can say that either. And perhaps more importantly, it was already hard for companies to find highly skilled software developers when everything was “normal”, do they really think it will get easier after this, when so many people will have been able to see that not only is remote work possible when you are a software engineer, but in most cases, it’s actually more productive and offers a better work-life balance across the board?

My point is the whole world, and especially the business world is going through the first stage of a process of grief right now: denial.

I’m convinced that there will be a before and an after COVID-19. That the world will never be the same. That some people and organizations will do everything in their power to try and put the cat back in the bag, but they will fail. Because the holes that this crisis is exposing in our system have been there for a long time.

Our nation states are simply unprepared for challenges like that, because they only think short term, pressured as they are by a capitalism and an electoralism without any vision. That’s why Trump’s administration dismantled the US’s NSC pandemic unit. That’s why the Belgian health minister destroyed a whole stockpile of expired protection equipments and never replaced it. That’s why all but a few countries now have to isolate entire populations because they don’t have the testing capacities to isolate only the infected ones.

Our nation states are slow to respond to any new challenge, because they are preoccupied by elections, and because they lost the trust and the education level of their populations a long time ago, so if they impose any drastic measure, people are defiant, they make up conspiracy theories and they take matters into their own hands as a way to cope with a situation they feel completely powerless about.

And finally our nation states don’t operate at the right scale, which makes them completely inconsistent. At a national scale, there is no way they can effectively tackle any challenge that, by essence, hits the entire planet. Whether it is climate change, business regulation, resource distribution or pandemics, they are completely incapable of handling these issues with any sort of consistency. And even if some countries try to do everything right, like New Zealand where I am stuck right now, where they went into full lockdown after hitting only their 100th case, with only 6 patients in the hospital, no death and after having closed their borders for a full week, they still pay the price for the absence of responsibility of other countries. How does it make any sense that as a citizen of France, being in New Zealand, I have to suffer the consequences of a decision I didn’t even take part in making, to elect a clown to the White House?

All of these things already didn’t make sense before this crisis, current events only make it more vivid. And yet, people still want to go back.

What’s the connection between the obsolescence of nation states and a company that wants to recruit onsite software developers? Everything! Because we are witnessing the most crucial transition the world has seen since the Renaissance. Because if it’s obvious at least to some of us that we cannot go back, that the old normal is completely broken to the core, then it follows that we have to invent a new one.

A new normal that is based on Globalism, this idea that whatever our different and rich cultures, languages, religions, histories and traditions, we are essentially all human beings, facing some of the same planet-wide challenges, born with the same fundamental Human rights, connected through the same global communication network, participating in the same global economy. And despite the vain hopes of a few protectionists, there is no going back on that, and that can be a good thing if we finally give up on one key concept: countries.

Countries are nothing natural or physical, they are just lines we drew on a map a few hundred years ago at most. They are a convention that served a purpose at a given point in history, to end the territory wars that created so much instability back in the days. But when a convention is obviously that flawed, and when the tools at our disposal have evolved that much, we must allow ourselves to invent a new one, or rather to adopt a more natural one, closer to the real world, in harmony with the planet we live on, as one species part of one global ecosystem.

Sure, that culture shift seems daunting, we have invested so much in the base structure of nation states, so much of our legal systems, of our currencies, of our cultures, of our belief systems are entangled with concepts like patriotism, nationality, limited international movements. Even more daunting is the fact that a lot of big organizations and governments are benefiting from this national division. Multinational corporations pit tax systems against each other, and exploit cheap labor in countries where people can’t leave anyway, forced to accept the conditions they are given. Banks thrive on the inconsistency of money regulation across different countries and totalitarian governments keep their power by blackmailing their population or using them as human shields. All of these have all the incentives in the world to keep us divided into abstract national units fighting against each other, trying to protect themselves.

In other words, to me, the problem is not the globalization of our economy, it’s the absence of globalization of governance that’s supposed to keep economy in check for the collective good of humanity.

What will currencies look like in the globalist world to come? What will companies look like? What will education and information look like? What will governance look like? It’s impossible to say at this point, but what is for certain, is that it won’t look like anything we already have.

We have to get over an economy based on credit-issued geographically-limited currencies. We have to get over pseudo-representative democracy as a means of governance. We have to get over corporations as a way to pull together financial resources to build stuff without any consideration for other forms of capital (environment, health, human rights, etc.). We have to get over old forms of education that gather 30 to 100 kids into a classroom for 20 years and then send them on their way after having shaped them into docile uncreative executors. We have to get over an information infrastructure that is so incapable of sustaining itself that it has become corrupted by greed and sensationalism instead of seeking and spreading the truth.

This is the sense of history, the transition started a few decades ago, but it just got a huge boost with this coronavirus. And there will be those who resist that change, either because they don’t believe it can happen, or because they don’t want it to. But their resistance is futile, because the cat is already out of the bag.

So I choose to embrace it. I embrace the uncertainty. I embrace having to develop new skills all the time. I embrace cultures from all around the world. I embrace moving all the time as if the entire world was my village. I embrace working as a freelance without any illusion of job security. I embrace thinking out of the box, dreaming of new systems, being flexible and open-minded to whatever comes next. Because this is a fascinating time to live in, and I invite everyone to embrace it too. Because you are in for a bumpy ride, whetever you do, so you might as well enjoy it.

How I went nomad

“Hello everyone, my name is Sebastien, and I’m a digital nomad!”

“Hello Se… Wooooooooooow! Wait… What? Say again?”

“I am a digital nomad: that means I don’t have a fixed home anymore, I travel around the world and work while I’m doing it.”

“Woooooooooow! And how do you do that? That sounds too good to be true. There’s gotta be a catch, right?”

“Well, not really. Technically, legally, I’m still a Belgian resident, my company is still registered there, I pay all my taxes in Belgium, but… I spend most of my time following summer, moving every 6 to 8 weeks, sometimes more, and I sustain it by working remotely as a freelance software developer for my clients in Belgium.”

“No way! And how did you come to that?”

“Well, let me tell you a story…”

A new concept

In 2016, I discovered this concept of digital nomadism, the idea that for knowledge workers who only need a laptop and an internet connection, you don’t really need to work in an office anymore. You can simply work remotely for companies that will allow it, or as a freelancer for clients who don’t really care where you are so long as the job is done. Many people were already doing it, and even though it had started off as a very difficult lifestyle, in the tracks of the 4-hour work week and other inspiring lifehackers, it had become easier and easier over the years with coworking spaces, AirBnB and even coliving spaces (coworking spaces combined with accomodations, NDLR). The only thing you needed was a knowledge job that could sustain your travels, making it possible for you to pay for temporary accomodation and flights. Some were doing it with dropshipping, others with ad-monetized niche websites, but one of the holy grails gigs seemed to be software development. How fortunate for me!

And this whole lifestyle looked very appealing to me right away, for several reasons.

First of all, I had always loved traveling, but after 13 years in Belgium (and a little 1-year break in France), I was starting to feel boredom settle in. I had always felt like a citizen of the world, not really attached to any specific country, but the cognitive dissonance between this global identity and the way I actually lived was starting to feel painful.

Second, as time went by and the world around me evolved, it seemed more and more obvious to me that adaptability was the most precious skill of all. Even though my specialty was not one of the most risky in terms of automation, I wanted to confront myself with new environments, new cultures, new contexts, and I felt confident enough to leave my comfort zone to sharpen my adaptation skills.

Third, as I was accumulating stuff, filling my 70 squared-meter apartment with gadgets, vehicles and things I used very rarely, I was feeling more and more anchored to the wrong things, bogged down by a weight that prevented me from being completely free. And I had tried to get rid of some of that stuff, but without any specific motivation, it was just easier to keep everything.

Last but not least, I was definitely not convinced by all the short term easy-but-not-so-easy guilt-based solutions to climate change and other global issues. To me, the only long term way out of these challenges was the emergence of a global governance model, whose prerequisite was the emergence of a global culture. And I wanted to live that.

Fears

But at this point in my life, experience had already taught me that I shouldn’t jump into this sort of transition without a little bit of cautious preparation and experimentation.

First things first, let’s expose the fears, since none of them is irrelevant, none of them should be kept under the rugs. All our fears exist to tell us something, and ignoring them is never the answer.

The one fear I had heard of the most throughout forums and Slack groups about nomadism, and that I could relate to, was loneliness. When you move regularly and on your own, it can be really hard to create connections with other human beings, whether they live in the places where you live for a while, or they are other travellers like you. Bonding takes time, especially for an introvert with trust issues like myself, so I could see myself suffering from that. Thankfully, since it is such a widespread concern, some services had already started to appear to address that. Coliving spaces were a first answer, as they let travellers share accommodations with other travellers, or locals for that matter, creating a de facto sense of community, even for just a few weeks. On the other hand, except if you made a really good friend in that amount of time, you also had to start over almost from scratch in every space. Another answer that looked way more promising to me was travel groups. In addition to helping you with other issues we will talk about later, they also formed those groups of travellers who could follow each other from places to places, and also curated those communities around common sets of values and lifestyles.

But then there was another fear, the extreme opposite one in fact. If it’s not a good idea to hide your fears under the rug, it’s also rarely a good one to forget who you are or try to disguise as someone else to fit into a new lifestyle. I had done that before, but no more. And for better or worse I am an introvert. I am not shy, but energy tends to flow outwards from myself to other people, which means I need some me time every once in a while to recharge. And I wanted to honor and respect that. Which meant I can support more lonely time than extroverts, but I also need to be able to take a step back from time to time. And some of those travel groups I just mentioned looked like a giant frat party, attracting a lot of twenty-something party-goers with their bad habits of peer-pressuring anyone who doesn’t follow along.

Last but not least, leaving my comfort zone didn’t mean abandoning all comfort. I wanted to get rid of my useless possessions, but I still needed a minimum level of physical comfort: a healthy and comfortable bed, a good shower every day, healthy and varied food, and enough rental services to still be able to enjoy some activities I really like such as drumming, riding motorcycles, watching TV shows, moving around, etc. And I certainly didn’t want to show up in the middle of a city or country I know nothing about, in the most dangerous neighborhood or in a place where I couldn’t get my work done in a productive way. I needed a safe place to stay, with a good internet connection, some mobile data on my smartphone, a comfortable coworking space and the ability to move around safely. I knew that I could find a lot of information online about those things, but I also didn’t want to spend too much time planning my trips and reinventing this wheel, especially as some of those travel groups I mentioned took care of all that.

Experiments

Once that was laid out, experiments were in order. Before I even considered dropping everything and being on the road full time, I needed to check that I could find a way to take care of all my fears while staying true to myself.

My first experiment was in a coliving space in Switzerland called Swiss Escape. We were in early 2018, I desperately needed some snow and ski and I found this amazing place in Grimentz, in a very authentic village, with very comfortable rooms and workspaces and I just loved it. I stayed there for 5 weeks or so, enjoyed the company of Haz and Fanny, the managers, and was able to work way more productively than at home. All this fresh air, the ability to ski for a few hours in the morning before a good day of work, the absence of regular day-to-day distractions like TV or commutes, that was perfect. On the other hand, the social part of the experiment sort of failed because Swiss Escape was still new at that time, and there were not a lot of other guests staying at the same time. Me-time, check! Social time, meh! Spoiler alert, they have become much more popular now, so if you want to spend some time in Swiss Escape this winter or summer, you’d better book in advance. And because I’m a nice guy, you can even use my referral code to get a 40€ discount, whether it’s just for a few weeks (Sebastienescape!W), or more than a month (Sebastienescape!M).

The view from my room in Swiss Escape

On a side note, what made the experience a little less enjoyable than it could have been was that I had left my very sick cat at home, in the good care of a very nice lady, but still, I was worried.

So after this mixed-feeling first experiment, I went back home, took care of my little Yahoo until the end and started to foment my next plan.

The second experiment involved trying one of those travel groups, and more specifically one of them I had already successfully interviewed for in the past: Hacker Paradise. A year earlier, as I was still a full-time consultant, I had already applied to that program. In most of them, you don’t just book, they are not travel agencies, their main promise is to create a vibrant community, so they want to make sure you will fit into the culture of the group before sending you an invoice. And I had gone through that curation process of theirs, but it was not really compatible with my situation then. As that contract was now over, and I was free to move around without disturbing my work, I booked a first trip with Hacker Paradise in Osaka, Japan, in June and July 2018, with a one-way plane ticket, open for anything.

Long story short: Osaka, meh. But sharing that experience with them was absolutely fantastic. I met so many inspiring people from all sorts of backgrounds, ages, genders. The name of the program didn’t really do it justice as I shared weeks of amazement with developers, but also a school teacher, a nurse/erotica author, a musician, a real estate developer, digital marketers, copywriters, from ages 18 to 50+, from 10 different countries around the world, half men, half women. And not only didn’t I feel pressured into doing anything a single time, I found myself enjoying social time with the group more often than I thought. There was something I had not anticipated: discovering a new culture and a new context was fun, but discovering it with such a diverse group of people made it so much richer as I confronted my perspective to theirs.

The streets of Osaka

After such a positive first experience with them, I wanted to leave my apartment in Belgium once and for all, but I wanted to confirm my first impression first with a second trip, so I folllowed Hacker Paradise in Seoul, South Korea for 6 more weeks. A few participants from Osaka followed in Seoul too, but most of the group was made of new people I had never met before. And this time, not only was the group awesome, diverse, inspiring and super respectful, but the place itself, Seoul, was amazing too. So 3 weeks into the trip, I had to make a decision. I couldn’t keep my apartment, my car, my motorcycle and all my stuff in Belgium, pay for rent, insurance, phone, internet back home, and still do trips like these. And by this point, it had become clear to me that I wanted more. Cape Town, South Africa was on the horizon, some participants who had become dear friends were going too, I didn’t want to miss that. Then came a moment of panic: there’s gotta be a catch right, there’s no way I can pull that off! So some old-timers of the nomadic lifestyle in the group, including my room-mate at the time, helped me to cool down, and advised me to create some sort of business plan, laying down all my expenses and revenues in an Excel document for the next few months, taking several scenarios into consideration, and planning as much as possible. And to my great surprise, not only was it feasible, I actually ended up with a positive number in the last cell, meaning that I would actually end up with more money at the end of the year than if I just went back to my old life.

Visiting the DMZ between South and North Korea. On the other side of that door behind this guard, the opposite of freedom.

Hence the decision was made: in early September, I went back to Belgium, started selling all my belongings, gave my notice for my apartment, and I had 6 weeks to do all of that before first attending a conference in Prague, and then joining Hacker Paradise again in Cape Town. It felt daunting at first, but call it a sign of the universe or simple motivation, after just 3 or 4 weeks, I was basically sitting in my empty apartment, waiting for things to be over.

The jump

Of course, material stuff was not the only thing I had “accumulated” in Belgium over 13 years. I had also made a lot of friends, some very close friends, I had even become part of another family. And even though it was clear for me that I was not leaving them so much as I was expanding my place of living, I had to make some plans to honor those strong bonds I had made. The first decision was to come back and spend a few days in Belgium on my way to other countries as regularly as possible. The second was to maintain those connections I held dear, even in the distance, using all the tools at my disposal. And of course I also wanted to say good bye and see you soon. So the day after I had given back the keys to my old apartment, I invited everyone to join me for a drink.

Two days later, I was on a plane to Czech Republic, feeling a mix of excitement, pride, sadness and fear like I had never felt before, but singing my soul out (in my head), those lyrics of one of my favorite songs: .

Change,
Everything you are
And everything you were
Your number has been called
Fights, battles have begun
Revenge will surely come
Your hard times are ahead

Best,
You’ve got to be the best
You’ve got to change the world
And you use this chance to be heard
Your time is now

Butterflies and Hurricanes, Muse

This conference week in Prague was like a decompression chamber, an airlock to the other side, I enjoyed with my dear friend Said. Then he went back to Belgium, and I packed up all my belongings in my 15-kg backpack and 30-kg suitcase, on to my next destination, and first as a real full-time digital nomad: Cape Town.

The entirety of what I own now has to fit within those two pieces of luggage

Fast forward…

…to today.

Right now, one year and a few months later, I am back in Belgium for the holidays, and I have been to a lot of new places inbetween: Cape Town (South Africa), Chiang Mai and Koh Lanta (Thailand), Taipei (Taiwan), Bali (Indonesia), Budapest (Hungary), Belgrade (Serbia), Lisbon (Portugal), Tokyo again (Japan). I also went back to Osaka, Bali and Cape Town, and every 6 months or so, I go to Belgium and France to see family and friends.

I still develop mobile apps, web sites and backends for one of the clients I had when I started, and I completed a few projects and started working with another startup since last year. My business is working fine, I’m spending roughly the same amount of money as I was when I lived in Belgium, although on many more experiences and less stuff, and less regularly too.

Thanks to Hacker Paradise, I made some very good friends I bump back into randomly because just like me, they are a part of the HP Family and they keep coming back on trips. My social life is much richer than what it used to be in Belgium, and every place, every trip, I get better and faster at adapting to a new context. I join HP whenever they go to a place I want to visit. Otherwise I travel on my own for a few weeks, or join some HP friends on their own path.

Just a random group picture in an apartment in Seoul…

I have learned a lot of things about travelling, applied quite a few lifehacks, created my own rituals, and I can honestly say I am now happier than I have ever been. I know that different people have different experiences of digital nomadism, there are always a lot of discussions about that on specialized Facebook groups and forums. And I know that my years of therapy, the surgery I had 6+ years ago, the business and network I built, my friends, my family, all of that enabled and shaped my experience today.

This life has its challenges: romantic relationships were not an easy thing for me when I stayed in one place, it has certainly not become easier now that I’m moving all the time and I’m part of this still very niche subculture. And living a somewhat original lifestyle makes you question a lot of pre-conceived rules and ideas when it comes to what you are allowed to do or should do in some situations, so there is a little bit of risk associated with going through a lot of grey areas.

But overall, I can’t help being proud of myself for having dared to reinvent my own lifestyle, according to my personality and desires, away from conventions and traditions.

On a regular basis, I still get annoying questions from people who ask me when I will come back to a more “normal” life, back to my senses, back to their side of civilisation. And sometimes it’s hard to explain that I can’t even understand the question, because you have to live this life at least for a while to really get how liberating it can feel. By the way, if you feel like trying for yourself, of course I can only recommend giving Hacker Paradise a try, and there is a referral link in all the mentions to them in this article to get a $100 discount on your first trip.

That being said, I need to pack up for my next destination, Buenos Aires, plane leaving in a couple of days. So…

See you somewhere around the world!

Je Déménage… Dans Ma Valise

Il y a 3 mois, je publiais ce post dans lequel j’expliquais que je m’embarquais pour un voyage à  Osaka, au Japon, sur un billet d’avion aller simple. Et 3 mois plus tard, alors que je suis de retour en Belgique, il est temps de faire un premier compte rendu.

Premier élément: je viens de rentrer, donc le voyage a duré plus que les 6 semaines prévues au départ. Tout simplement, comme je m’y attendais un peu, l’expérience japonaise avec Hacker Paradise a été un succès. J’avais peur que la vie en groupe n’empiète de manière agressive sur mes besoins occasionnels de solitude et d’espace personnel, mais ça n’a pas été du tout le cas. L’organisation de ce groupe est ainsi bien faite que toutes les activités proposées sont optionnelles, que chacun peut vivre sa vie comme il l’entend, aux horaires qui lui conviennent et selon ses envies (ce qui fut d’ailleurs parfois un cauchemar pour les organisatrices). Donc je n’ai ressenti aucune pression, mais j’ai pleinement profité de la possibilité de rencontrer de nouvelles personnes, de refaire le monde avec des gens de tous horizons (américains, slovaques, roumains, polonais, italiens, français, suisses, hongrois, russes, coréens, péruviens, chinois, la liste est longue) et de partager de grands moments d’exploration incrédule (en mode WTF) avec tout le monde.

Bon, à  côté de ça, j’ai été un peu déçu par le Japon, et en particulier par Osaka, que j’ai trouvée inutilement complexe, coincée, fermée sur elle-même et manquant cruellement de bon sens. Mais d’un autre côté, j’ai apprécié d’autant plus l’expérience de vivre et de travailler quotidiennement dans un pays comme cela pour me rendre compte de tous ces éléments beaucoup mieux que si je ne l’avais visité qu’en simple touriste pendant 2 semaines.

Et l’expérience Hacker Paradise fut suffisamment concluante pour commencer à  faire germer dans ma petite tête des idées de pérennisation du mode de vie nomade. Et bien sûr, pour confirmer ou infirmer mon hypothèse, il me fallait une autre expérience, histoire d’être (suffisamment) sûr que dans un autre pays, avec d’autres personnes, l’envie resterait la même. Alors j’ai décidé d’utiliser mon joker, et de suivre Hacker Paradise sur leur destination suivante: Séoul en Corée du Sud.

Pour bien planter le décor, Hacker Paradise est une organisation qui voyage toute l’année, avec plusieurs groupes en parallèle, que les membres rejoignent et quittent comme bon leur semble, parfois même en cours de voyage. Sur le groupe d’une vingtaine de personnes qui étaient avec moi au Japon, 6 ou 7 ont suivi en Corée, et une quinzaine de nouvelles personnes ont rejoint le groupe. Au revoir compliqué avec certains et certaines avec qui des liens se sont inévitablement créés. Apprivoisement nécessaire d’un nouveau groupe avec une autre énergie. Et puis découverte d’un pays que pour le coup je ne connaissais pas du tout, dont je ne savais rien, sur lequel je n’avais donc aucun a priori ni aucun espoir.

Et après ces 6 semaines en Corée, rien à  faire: l’envie de voyager en permanence, et de partager un maximum de ces voyages avec d’autres citoyens du monde ne s’épuise pas, bien au contraire.

Alors que fais-je ici, en Belgique, me direz-vous? Pourquoi ce retour au bercail? Et bien parce que j’ai décidé de passer à la phase 3: le grand départ.

Le prochain voyage Hacker Paradise que je ne veux surtout pas manquer se passe en Afrique du Sud, au Cap, et ça démarre début novembre. Et comme maintenir ce mode de vie tout en continuant à louer un appartement et à payer l’électricité, l’internet et tous ces trucs coûte inutilement cher, il faut faire un choix. Donc j’ai un mois et demi devant moi pour vendre toutes les choses qui encombrent ma vie, rendre mon appartement, réduire mes possessions au contenu d’une valise et d’un sac à dos, et prendre l’avion.

Rien qu’en écrivant ces mots, une gigantesque excitation, en même temps qu’une grande peur m’envahissent. Mais je sais que la première me gardera en mouvement, et que la seconde me gardera en vie.

Pourquoi cette décision, me direz-vous?

Parce que je le peux

Ni femme, ni enfant pour compliquer ma décision avec des contraintes qui ne seraient pas les miennes. Et surtout un métier, un réseau et des compétences qui me permettent de travailler à  distance avec mes clients sans aucun problème.

Ces 3 mois de voyage avec 7 heures de décalage horaire avec mes clients m’auront permis de me rendre compte qu’avec un peu de flexibilité (une réunion de travail en pleine nuit, une fois de temps en temps, c’est un faible prix à payer), beaucoup de professionnalisme et une communication claire, rien n’est impossible, bien au contraire.

Parce que c’est le futur

Avec l’automatisation grandissante, le progrès exponentiel des innovations qui crée des métiers et les fait disparaître en quelques années, je suis convaincu que LA compétence la plus précieuse, c’est la capacité d’adaptation. Etre capable de se réinventer, de transformer son expertise, de rester authentique tout en acceptant les nouveautés d’une situation en perpétuelle mutation, c’est ça qui devient critique dans le développement d’une carrière. Et quel meilleur moyen de développer cette compétence que de se confronter volontairement et régulièrement à de nouvelles cultures, de nouvelles langues, de nouvelles expériences de vie, de nouveaux environnements?

Parce que “citoyen du monde” n’est pas qu’une expression

Elle est populaire celle-là. Et beaucoup se prétendent comme tels après quelques voyages touristiques de quelques semaines deux fois par an. Moi le premier: c’est ce que j’ai fait pendant de nombreuses années.

Mais après seulement 3 mois de ce mode de vie, je peux déjà voir l’énorme différence d’expérience qu’il y a, à quel point c’est plus ancré, plus riche, plus concret, plus réel.

Parce que le monde est beau

Il est tellement facile de se laisser embarquer dans les cycles d’actualité, de se laisser décourager par les stupides gesticulations d’un clown avec un renard sur un créne vide, de se désespérer devant les chiffres de l’emploi, la fermeture d’une usine, l’agression d’une mamie, la mort d’un chien écrasé.

Mais comme d’autres l’ont constaté avant moi, il est critique de prendre du recul, de lutter contre l’attrait du micro pour voir les choses dans leur ensemble. Il est compliqué de prendre soin de ce dont on n’a pas conscience. Et je suis convaincu que de parcourir le monde en long, en large et en travers va m’aider dans cette prise de conscience comme dans son activation.

Pour montrer l’exemple

Une des discussions qui revenait souvent avec d’autres voyageurs HP (Hacker Paradise), c’était à quel point il était difficile d’expliquer et de faire accepter ce mode de vie à nos proches, à nos amis, à nos familles. Certains d’entre nous avaient même été jusqu’à refuser d’aller à l’université, ou un job confortable dans une grande entreprise pour préférer cette vie de voyage, ce qui leur avait attiré les foudres de leurs proches.

Et si nous voulons faire évoluer les consciences, il n’en faut que quelques-uns pour montrer que c’est possible, que c’est riche de sens et d’opportunités, que les conventions et les traditions sont négatives si elles ne font que nous enfermer dans des modes de pensées qui nous handicapent, et qu’il est possible de vivre autrement.

Parce que je suis terrien

Mon passeport a beau dire que je suis français, j’ai beau vivre en Belgique depuis 13 ans, j’ai beau avoir adoré vivre à Montréal et m’y être senti chez moi… mon identité c’est ma planète. Les concepts de race, de nationalité n’ont absolument aucun sens pour moi, et je rêve du jour où tout le monde sera libre de bouger où bon lui semble, de choisir l’endroit, le gouvernement et l’environnement qui lui conviennent, et d’en changer régulièrement (ou pas), indépendamment de là où, ou de quels parents il est né. Je ne reconnais pas les droits du sol ou du sang, la notion de patrie n’a aucun sens pour moi, et je n’adhère absolument pas à cette histoire collective qu’on se raconte et qui voudrait qu’en fonction d’un bout de papier qu’on a dans sa poche, ou l’endroit où on se trouve physiquement, nos droits humains ou nos chances seraient si radicalement différents.

Alors explorer le monde et vivre comme si tout ça n’existait pas, même si ça doit me coûter des courbettes et des compromis de temps en temps, me semble bien plus en accord avec ce en quoi je crois, et ce que je suis, que n’importe quelle convention qui m’attribuerait un seul pays de résidence et quelques pays de voyage.

Et évidemment il n’est pas question de nier les différences et de dire que nous sommes tous identiques, mais bien au contraire, de réaliser que:

  1. Il y a plus de points communs (et moins de différences) entre moi et un bédouin du Sahel qu’entre moi et mon voisin français raciste
  2. Quand on cherche à les comprendre et à les expérimenter dans leur contexte, ces différences ont plus à nous apprendre sur nous-mêmes que toute la haine du monde
  3. D’une manière générale, on ne peut aller quelque part mené seulement par la peur de l’autre et de soi, et on n’a peur que de ce qu’on ne connait pas, alors apprivoisons-les tous les deux pour ne plus (se) fuir, mais pour aller vers

Parce que j’en ai envie

Magnifique improvisation du grand Edouard Baer sur Radio Nova

Je me suis moi-même beaucoup posé cette question ces 3 derniers mois. Finalement, en Belgique, j’étais de moins en moins heureux, de plus en plus engoncé dans des conventions qui m’aliénaient, de plus en plus frustré par une actualité déconnectée des réalités du monde, par une pauvreté de ma vie en termes de rencontres, de découvertes, d’émerveillement.

Alors certes, partir c’était d’une certaine façon fuir cette vie pour aller chercher tout ce qui me manquait ailleurs, dans d’autres environnements. Et si finalement tout ce qui me manquait était à l’intérieur de moi, et non à l’extérieur? Dans ce cas, tous les voyages du monde ne suffiraient pas à remplir ce vide.

Mais ce que j’ai réalisé ces derniers temps, c’est que même s’il est indéniable que j’ai encore un énorme travail à faire sur moi-même, pour m’ouvrir, pour panser certaines blessures, pour assumer qui je suis vraiment, pour oser plus, tous ces voyages m’aident. C’est comme si je savais que je devais apprendre à respirer, mais que c’était plus facile avec de grandes quantités d’air frais autour de moi.

Alors oui, pour moi c’est une quête. Une quête de moi-même et d’une vie meilleure, aidée par les vents du lointain et de l’inconnu, par la richesse du monde et de tous ceux qui y vivent.

Et face à tout ça

Evidemment, il y a mes amis, mes familles, mon filleul, ma dream team, ma BFF, tous ceux qui se reconnaitront et qui font à jamais partie de mon univers, même si je vais bientôt m’engager dans une voie qui m’amènera à les voir moins souvent. Ils connaissent mes aspirations et mes frustrations, et même si je sais qu’ils me soutiennent, je les sais tristes de me voir m’éloigner.

Et évidemment, même si le chakra du coeur n’est généralement pas le plus ouvert chez moi (comprenne qui pourra), je sais que cet éloignement m’a parfois pesé, et qu’il me pèsera encore lourdement avec le temps et la distance. Et il n’est pas question de mettre un mouchoir là-dessus et de faire comme si ça n’était pas là.

Mais nous resterons connectés, je continuerai à leur rendre visite aussi souvent que possible, à partager avec eux mes expériences et ma vie. Encore une fois, je ne déménage pas autre part, j’élargis mon lieu de vie. Et je sais qu’ils le savent eux aussi.

Et un jour on se fera une gigantesque chouille, avec tous mes amis du monde entier, on fera tous connaissance et on chantera Kumbaya autour d’un grand feu.

Bon allez, je retourne fumer, c’est de la bonne…

Le Pont de la Liberté, qui relie les deux Corées, tout un symbole…

Bonus: interview

Une des participantes de Hacker Paradise en Corée du Sud, Ana Lucia Rodriguez, péruvienne et espagnole, blogueuse voyage et marketeuse de son état, m’a interviewé pour son blog et sa chaîne Youtube. L’intro est en Espagnol, mais après l’interview est en Anglais:

Jobi joba (mais sans la caravane, et avec un laptop en guise de guitare)

Pour ceux de mes amis qui ne seraient pas encore au courant: je viens d’atterrir à Osaka, au Japon. Parce que oui, certains de mes amis ne sont pas encore au courant, et vous allez comprendre pourquoi.

Quand j’expliquais mon projet autour de moi, la question suivante était naturellement: “Ah! Sympa! Et pour combien de temps?”. Et quand je répondais “6 semaines”, la réaction était invariablement une grande surprise, suivie d’un “mais pourquoi y vas-tu alors? Vacances? Travail?”. Ce après quoi j’aimais enfoncer le clou en précisant que je n’avais pris qu’un billet aller simple.

Et la confusion était palpable. Après tout, c’est vrai: soit on part quelque part définitivement, on déménage, soit on part 2 ou 3 semaines pour les vacances. Mais quelle raison pouvait bien justifier un tel voyage, dans un pays si lointain, pour une durée aussi longue, et avec quels moyens?

Alors je me suis dit que j’allais profiter de cet article pour expliquer un peu.

Imaginez que votre métier ne vous lie à aucun employeur fixe, ni même à aucun bureau fixe. Imaginez que vous puissiez gagner votre vie correctement depuis n’importe où, et que tout ce dont vous ayez besoin pour travailler, c’est un laptop et une connexion internet. Imaginez enfin qu’au delà des liens que vous avez tissés avec les personnes qui vous sont chères, rien ni personne ne dépende de vous ou de votre présence physique en un endroit précis (ni même plus votre chat, Yahoo, respect et robustesse mon p’tit père 😢). Si tel était le cas, resteriez-vous là où vous vous trouvez en ce moment? Ou plus exactement, limiteriez-vous votre champ d’exploration à la ville, à la région, ou même au pays où vous vous trouvez?

Et bien figurez-vous (allez-y, figurez-vous!) que ce contexte, ces possibilités, cette indépendance professionnelle et géographique se font de plus en plus fréquentes, et amènent de plus en plus de gens vers un nouveau mode de vie: le nomadisme digital.

Les nomades digitaux, où les DN (Digital Nomads, ndlr) comme on les appelle parfois sont de plus en plus nombreux, ils s’organisent, créent des liens entre eux, constituent des communautés, deviennent la cible de nouveaux services, voire même de nouveaux statuts administratifs, se regroupent dans des espaces de coliving (parce que le coworking, c’est “so 2010”), créent des groupes de voyage, et ce n’est que le début.

Depuis que j’ai découvert l’existence de ce mode de vie, il me fascine. Et après m’être longtemps renseigné, j’ai décidé de faire un premier test. Après la fin de mon dernier contrat “sédentaire” (traduisez une mission 8 heures par jour chez un client fixe en Belgique, dans un bureau), j’ai décidé de remplacer la recherche d’une nouvelle mission par des contrats qui me permettaient de travailler uniquement à distance et selon mon propre agenda, en tout cas jusqu’à ce que mon activité de formation en ligne prenne intégralement le relai. Puis j’ai fait un premier test de coliving dans les Alpes suisses pendant 4 semaines, un orteil dans l’eau en quelque sorte. L’expérience fut quelque peu “artificielle” (pas beaucoup de monde à cette période de l’année bizarrement), mais en même temps me donna envie de me lancer pour une phase 2.

Et c’est cette phase que j’entame aujourd’hui. Je rejoins un groupe de nomades digitaux qui partagent une spécialité autour du numérique et qui voyagent ensemble et de manière régulière grâce à des organisatrices de choc. Le groupe s’appelle Hacker Paradise, et la première étape de cette aventure me mène à Osaka, au Japon.

Première étape, car j’ai décidé de ne pas me limiter dans le temps ou dans l’espace. Parce que je me suis autorisé à suivre le groupe dans ses pérégrinations si jamais l’expérience était concluante. Ou alors à tester d’autres variantes de ce mode de vie, par d’autres moyens, dans d’autres contextes.

Est-ce que cela signifie que je quitte la Belgique pour autant? C’est plus compliqué que ça. Ce que je préfère dire, c’est que je ne quitte pas un endroit pour m’installer dans un autre, mais plutôt que j’élargis l’endroit où je vis: avant j’habitais en Belgique, et maintenant je vais tenter de vivre sur Terre.

Je vais me faire des amis, mais un peu partout dans le monde. Je vais explorer de nouveaux paysages, mais pas seulement pendant mes vacances. Je vais développer de nouvelles opportunités, mais pas uniquement celles qui me sont proposées.

Donc d’une certaine façon, je ne quitte rien ni personne dans ma tête ou dans mon cœur, je ne m’éloigne de nulle part. Je me rapproche du monde et je m’ouvre à une planète d’horizons riches et mouvants.

D’un autre côté, entendons-nous bien: j’ai toujours mon appartement en Belgique, je suis toujours enregistré en Belgique, et je me suis également autorisé l’éventualité que cette expérience soit un échec, que la réalité rattrape les fantasmes, partiellement ou totalement, et que je doive rentrer pour réévaluer mes options. Mais si je le fais, ce sera un choix, pas une solution par défaut, pour coller aux conventions, ou pour rassurer à outrance mon petit enfant intérieur éternellement effrayé.

Parce que ce voyage, cette aventure dans laquelle je m’engage, c’est aussi une expérience initiatique évidemment. Parce que toute la première partie de ma vie, j’étais un aigle déguisé en ours, qui essayait de ne pas trop faire de vague, de ne pas prendre trop de place, qui donnait parfois ce qu’il avait l’impression qu’on attendait de lui plus vite que ce à quoi il aspirait vraiment. Mais aujourd’hui, j’ai décidé d’envoyer l’ours en hibernation pendant quelques temps (oui au début de l’été, et alors, au diable les conventions on a dit, non?), et de laisser l’aigle déployer ses ailes engourdies.

Il parait que les grands rapaces ne se posent que très rarement au sol, et préfèrent généralement un promontoire en hauteur pour se poser parce qu’ils savent qu’avec leur envergure et l’amplitude nécessaire dans leur battement d’ailes, leur redécollage sera toujours bien plus compliqué depuis le plancher des vaches.

36 ans déjà que je le foule ce foutu plancher. Et je dois bien admettre que ces dernières années, ce plancher s’était même mis à ressembler à un bourbier qui commençait à engluer méchamment mes ailes. Donc le décollage n’est pas des plus faciles. Mais ceux qui m’aiment, me connaissent et se reconnaîtront savent que c’est ce dont j’ai besoin. Et sans forcément en être conscients, ils m’auront porté jusqu’ici pour m’aider à prendre mon envol, et je leur en serai éternellement reconnaissant.

Car malgré mes angoisses que j’essaie de ne plus ignorer, malgré les craintes qui me nouent l’estomac, malgré les incertitudes qui entourent les changements inévitables qui vont s’opérer naturellement sur les liens que j’ai tissés à travers toutes ces années, j’ai l’intime conviction que cette nouvelle étape de ma vie, quels qu’en soient les enseignements, les déceptions, les découvertes ou les revers, va me permettre de démultiplier l’impact que je peux avoir sur ce monde, et la trace que je pourrai y laisser.

Alors merci à tous ceux qui me soutiennent dans tout ça, désolé pour ce qui l’auront appris tardivement, voire qui l’apprendront ici. Mais je suis sûr que vous le comprenez tous maintenant: ceci n’est pas un changement d’endroit, ce n’est qu’un changement d’échelle, que j’essaierai de documenter ici et ailleurs.

Car je suis convaincu que quoi qu’il m’arrive à moi, c’est une évolution qui nous sera à tous salutaire, à plus ou moins longue échéance, dans une plus ou moins grande mesure, et quels que soient nos contextes ou nos contraintes, ne serait-ce que pour éviter de basculer dans ce repli sur soi qui guette de plus en plus nos sociétés, en ces temps où de plus en plus nombreux sont ceux d’entre nous qui se sentent dépossédés de leur destinée.

Et bien entendu, je suis tout à fait conscient que ce mode de vie n’est pas fait pour tout le monde, et que c’est beaucoup plus compliqué quand on a sa petite famille (on ne peut pas tout avoir hein 😉). Donc ne voyez aucun prosélytisme dans mes propos, juste du partage d’expériences nouvelles.

Je pars en éclaireur, je vous raconterai.

PS: Il y a plein de liens à explorer dans ce post.

PPS: Ne vous inquiétez pas pour le tremblement de terre, tout va bien.

Developing as a Contractor in Belgium

My experience

As a software developer, I have been freelancing since 2010. Before that I was an employee for a consulting firm for 5 years. And one of the things that pushed me over the edge was when I found the invoice my employer had sent to the company I was consulting for at the time in the office printer. It said they “sold” me for 650€ per day, 13000€ or more per month. Given the fact that my net salary was 2500€ per month, and even if you factor in all the taxes and social charges and all the other benefits, that was still quite a huge gap. And in addition to that, I was not free to buy the car I wanted or the laptop I needed. When I needed vacation, I needed to factor in the “loss” for my employer. And when I wanted to attend a conference somewhere, I had to ask for permission. And I’m not even mentioning all the things I had to agree with (company pension plan, eco-cheques, etc.) that had simply no value whatsoever to me, but I was forced to take them because they were fiscally interesting for my employer.

For all those reasons, after talking with other freelancers to carefully evaluate the risks and constraints of having my own management company, it appeared obvious that it was the smart move given my experience. And the thing is I’m not the only one to make the same calculation. I know plenty of senior developers who have quit the rat race, stopped being an employee and taken matters into their own hands. Sure it’s a lot of administrative pain, with the accounting and all. Sure every letter you receive from the SPF Finance (tax services) makes a shiver run down your spine. Sure it’s stressful to have to find your own customers, deal with contracts, plan ahead for your periods of inactivity, negotiate your rate for each contract… but that is nothing compared to the incredible freedom you get. Being able to choose your customers and projects depending on how much you need to work. Being able to choose how you pay yourself, how you train yourself, the tools you work with. All of that is really satisfying.

The ecosystem

That being said, when you are a freelance developer, there are 3 big kinds of customers in Belgium (and I guess in a lot of other areas):

  • The big corporations, banks and public institutions (European Parliament and Commission) usually have framework contracts and Preferred Supplier Lists with big consulting consortiums and firms that force you to go through intermediaries who take a 15 to 30% cut on all your invoices, no matter how long the contract is, and often for very little added value other than access to those customers.
  • The small companies are the most flexible and you can usually work with them directly, but they are the hardest ones to find and you have to negotiate a lot with them.
  • And then there are the startups. When you are in the ecosystem, they are quite easy to find, you can also work without intermediaries, the projects are by far the most interesting ones, and you get to work in really cool teams. But that’s where the funding is often the most fragile (“no I can’t pay my bills with shares in your non-funded startup”)

The fears

Recently though, I noticed a really disturbing trend with startups refusing to work with freelancers, mainly for a few reasons:

  • Most are afraid that a freelance developer will be less “involved” in the success of the company
  • Some even fear that a freelance developer will combine several customers in parallel and thus will devote less energy to them than an employee, as if freelance meant part-time
  • I recently heard companies being afraid that freelancers would have a harder time integrating into their team
  • And I’m sure some really look at the cost and think a freelancer costs more than an employee

The reality

It’s hard to know where these fears come from, but let me bring some counter-arguments to those.

First of all, when you are a freelancer, your very ability to find work and the best work depends solely on your reputation. You can’t hide behind the reputation of a consulting company or the manipulation skills of your business manager. It’s just you and your awesome work. If you leave a customer on wrong terms, if your work is not impeccable, and if your involvement is not up to par with your customer’s expectation, no employment code, no firing cost, no prior notice is there to protect you. If you don’t show dedication, you will get fired, fast, and your reputation will suffer, making it harder for you to find a new mission in the future, especially in the startup world where everybody talks with everybody.

Second of all, most freelance developers I know hate switching between projects at the same time. It’s very inefficient and frustrating, so most of us prefer working for months or even years for one customer at a time.

As for integration time, it is of course completely the opposite: when you have to change project on a regular basis, you have to get comfortable finding your place very quickly in a new team. Practice makes perfect.

Last but not least, about the cost issue, most companies, especially the smallest ones for which economies of scale are really small, only consider the salary cost. They don’t factor in the management cost of dealing with social secretariat, car leasing companies, medical insurance companies, training companies, buying and maintaining your own hardware inventory and so on. In my experience, unless you are a big company and you can make big economies of scale on these management costs because you have a lot of employees, there is little to no difference in terms of cost between an employee and a freelancer. In addition to that, you also have to factor in the cost of firing an employee with a lot of seniority, or keeping him around despite your non-satisfaction with his work because of this cost.

The benefits

But more importantly, I see plenty of companies neglecting the benefits of working with freelance developers.

  1. By definition, they have to manage their own company, find their own customers, negotiate their own contracts, so entrepreneurship is at the heart of everything they do. They understand what it means to manage a business, and they don’t expect to be told what to do: they take initiatives and think creatively.
  2. They come with an all-inclusive package: no need to worry about company cars, vacations, insurances, gear renewal costs or training. All of that is taken care of by the freelancer himself.
  3. If you are not happy with their work, or your budget constraints change, or simply your needs evolve, you can stop the contract very easily. Agreed, it’s the same on the freelancer’s side, so you’d better offer him the best working conditions possible to keep him around, but that shouldn’t be an issue, should it? ;-)
  4. Given the importance of their reputation and the desirability of their profile, most freelancers train on all the latest trends can bring some really cutting-edge tech to your company.
  5. A key asset for any freelancer is his professional network. So he knows a lot of developers, which can be incredibly powerful when you raise a new round of funding and need to grow your team quickly.

In addition to all those reasons, considering the fact that most experienced developers have already made the switch, if you don’t want to work with freelancers, you cut yourself from an important crowd of some of the best developers around. And don’t expect to bring freelancers back into an employee status: given how much it costs to kill a company in Belgium, and all the freedoms he would have to give up, I know very few freelancers who would come back to being an employee. It’s simply not worth it.

The future

As a futurologist, I also feel the need to mention the fact that in my opinion, the employee status as a norm and default situation is fading away. More and more people are realizing that they need to adapt to a changing work environment at an ever accelerating rate. You need to train for new skills, acquire new knowledge. The very notion of career is being questioned and revisited more and more regularly. And in some industries, software development included, it’s not uncommon to work for companies anywhere in the world, from anywhere in the world. This trend is pushing more and more people to be independent workers, and even though governments and administrations are once again incredibly late in adapting to it, it doesn’t prevent us (even though it makes it incredibly painful sometimes) from doing it. It’ simply the sense of history, and it’s always frustrating to see so many awesome companies resist it, especially when they are supposed to be at the forefront of innovation.

Let’s talk about it

Given all that, I would love to hear more about the reasons why employers, and especially startup founders and managers don’t want to work with freelancers. I’m sure there are plenty of myths to be busted in there, and I’d be really happy to help. Also, if you are a freelance developer, and would like to share some interesting experience to share, let’s get the debate started in the comments of this post.

The Last Kingdom

After binge-watching the first season of the TV show “The Last Kingdom” yesterday on Netflix, I was really annoyed and upset by all these constant references to God and Christianity, and as an anti-theist myself (atheist is not strong enough), I couldn’t help but feel close to Ragnar Ragnarson in his fight for justice. But what struck me even more is how much Christianity back then has in common with something today: Finance.

The Profit God

Finance has become the new Chrsitianity of the land. Currency has become the new Prayer. Economy is the new Faith. In Christianity, you have to suffer in life to be happy ever after in Heaven. In Finance, you have to work like a slave all your life to live happily ever after in retirement. Christianity had its priests and clergy, Finance has its traders and bankers and quotation agencies. In Christianity, you could either be a good Christian believer, or a godless barbarian. In Finance, either you are a docile taxpayer, or a jobless slacker. And if you push boundaries a bit further, when you dare to point out the flaws and the corruption of Finance, you are called a Conspiration Theorist, pretty much with the same status as blaspheming heretics back then. Dare to try something different, propose an alternative currency, universal income or negative interest rates and you are pretty much a witch, in direct contact with the Devil. Talking about the Devil, the closest thing to Finance’s equivalent of Hell would probably be… Socialism? Or Misery? Or Bankruptcy? Or homelessness? The concept of Salvation has been replaced by the concept of Growth, this thing that every politicial would like to influence, but nobody really knows how. Sometimes they sacrifice some jobs or human rights to the Markets, those angels of the Profit god, hoping it will please the Markets and bring some Growth. But everybody is drinking every word from the quotation agencies, those direct conduits to God. And then of course, nobody dares to discuss the fact that the clergy has to take its toll on all that: what used to be called tithes are now called interests, and everybody finds it perfectly normal to pay those interests when they borrow money that doesn’t even exist in the first place, they would almost be afraid not to pay them. Same for the taxes people pay to their Nation-State, that are used in turn and in good part to pay back interests to the banks as well. The Church itself didn’t have to pay taxes by the way, pretty much like the Markets and their actors. The main problem is that our governments, our Nation-States are way too entangled with the Clergy of the Finance Church, they are not independent anymore, and it will take years and tremendous courage to separate both, to separate the Finance from Government in the same way as we separated the Church from the State. Maybe we can take some inspiration, remember how this separation was done, and continue the metaphor to do the same for Finance.

A Vision

The way I see it, Finance has corrupted and rotten the very foundations of our societies. And I’m afraid that every attempt to separate the parasite, will also bring the whole house down. Unless we do something to build other foundations in parallel and when they are ready, we destroy the old ones. I would start with currency: with crypto-currencies, we don’t need the bank anymore, either to create currency or to monitor it. We can get rid of the middle man and let the network handle the security and rule-enforcement. Bitcoin is just one example of such a currency, not necessarily the best one because of the rules it was designed to enforce: deflation, parity with fiat currency, etc. But it opened the discussion and a whole new horizon of possibilities. Without middle-men in our currency exchanges, no more need to “pray for something to happen”.

I would continue with democracy. Once we have a suitable crypto-currency, based on a proper blockchain (a transparent, verified and universal ledger of all transactions), we can also dis-intermediate every single contract our democracy is based upon, including the most fundamental one: the voting contract. And I’m not talking about corruptible electronic voting machines here. I’m talking about the ability for every citizen of the City to take part in the public debate and give their vote on issues that matter to them on a daily basis, along with the capability to inform them accordingly of course. I’m talking about switching from Representative to Participative democracy. And I know some people will call me a utopist on this one (yet another word to discard heretics), but just make an effort to wonder how many of your beliefs that led you to this conclusion were actually taught to you by the Finance clergy. “People are not educated enough, if people had been asked about the death penalty in France, they would have voted to maintain it”. Etc.

Another important pillar for me is the very notion of work. Work in Finance is like Penance in Christianity. Society’s Growth is the direct product of your individual work, like mankind’s Salvation was the result of everybody’s penance. It seems obvious and non-questionable because we are being taught that from our very early age (and because it echoes some of the same theories from the Church as well). But with the massive movements towards workforce automation these days (Uberization and the likes), the absurdity of this logic becomes apparent. We are even creating some artificial penance, forcing people to work silly jobs that could easily be automated, for the sake of maintaining that illusion. Work, like Penance back then, is becoming a goal in and of itself. We are forgetting the real goal behind Growth: self-fullfillment, happiness, freedom. For decades we have been told that the only way towards that goal went through Work, Taxes and Financial Growth. But what if there’s another way, a faster way, a cleaner way? Do you think the traders who are paid more in a year than what you are paid in a lifetime will wait until retirement to find their Salvation? I think we need to change our vision about work, from something we must do to make a living, to an activity we enjoy doing because it brings us plenty of different rewards directly, including happiness, self-fullfillment and freedom. Because it brings value to the society as a whole today, not because it will bring Salvation later. Of course some of this value will be paid back to us in currency, and of course, the more value we create for society, the more benefits we should get (currency or otherwise). But work should not be a life-or-death necessity anymore. That’s why I’m convinced Basic Income is THE solution. And when you hear the Clergy of Finance say things about basic income like Socialism, and conspiracy theory, and utopia, remember about Hell, heretics and witchcraft.

Probably the last pillar, the hardest one to change, and the longest change to show its effects, is education. Our entire school system was designed for another time, a time of centralization, of pyramid structures. A time when school needed to train good employees, docile citizens, not independent entrepreneurs who have to figure out their mission in this world, and have the power to decide what they want to achieve. I strongly believe that this is the world that is emerging before our eyes. And it is time that we take it into account and rebuild our education system from the ground up accordingly. Our kids need skills more than knowledge. They need initiative more than authority, they need creativity more than learning by heart. Not just because of the internet and all that it gives them access to. But because of the way it is changing our societies, because of all the new paradigms it’s going to create in the future, whereas we are still preparing them for yesterday’s only paradigm. Our children need to be able to use their full potential, not just the normal one, to be able to see patterns and explore all the opportunities and dangers of what’s to come, because there will be both. And nothing in our current education system prepares them for that, neither in content, nor in form. I think we need to explore ideas like flipped classrooms and Montessori. Those are just two possible evolutions I’ve heard of and I’m clearly no education expert, but I think it’s time for us to reinvent our system, and maybe get out of the dogma of one single school system. Because kids are diverse, they are individuals, each with their own strengths and weaknesses, and they all live in different contexts, with different realities and concerns, and of course we need to spend as much energy understanding those contexts and adapting our schools to those contexts, as actually coaching our kids in those schools.

With the right currency, democracy, workforce and a generation prepared to take full advantage of all this, I don’t see how we couldn’t take things to the next level.

Earthians

Once we have those four pillars, we can actually start to build a new house on top, a global house. Because in the same way that the Church understood that it had to transcend borders back in the day, Finance is already transnational, unlike our democracies. And for me, that’s one of the reasons why we are powerless and divided. I don’t believe in borders, I don’t recognize the right of national governments to tell me where I’m allowed to live or not, depending on where I was born. I don’t see why I should suffer from the consequences of decisions of other countries simply because I have no say in choices that their governments make, although they have an impact on all of us. And more importantly, I believe I’m not alone to believe that. I think the new generations see themselves more and more as citizens of the world. I’m not French, I’m not Belgian, I’m not even European, I’m an Earthian. Yes, we have different languages, different cultures, different lives and different day-to-day concerns, but we all share the same planet, the same resources, the same science. So we should have a global platform for governance. Note that I didn’t use the expression “global government”, because it sounds too much like what we have today, only bigger, thus with even more corruption and control. What I think is that the transition I described earlier will happen locally, in various countries, playing by the rules of the old system, and then those transitioning countries will work together, create alliances, merge their platforms into one until it covers the whole planet. Will there still be a place for Finance in this world? Sure. Like there is still a place for Christianity in some places in today’s world. Some people will keep having faith in Profit, they will live by its rules, act on its precepts, but it won’t affect all of us. Because it should not.

Original Photo by keeva999 (with a cross instead of the dollar sign) – http://flic.kr/p/dQKNXH

You Have the Right to Buy some Shares… Soon!

calculatorIn my latest article, I mentioned stock options as one of the interesting perks in working for a startup. But the truth is that it is not really easy to understand as an investment instrument, and you can easily find a lot of resources how stock options work from the employer standpoint, and not that much from the beneficiary’s point of view. In addition, there are different mechanisms in different countries, with different tax systems, and it’s very difficult to understand. So let me try to explain stock options in Belgium. First of all, let’s talk about shares. When you create a company, it must have a starting capital, a certain sum of money in the bank to let you invest to start your activity. Typically, this starting capital is the only value in the company, so it also corresponds to its valuation. In Belgium, the legal amount to start a limited liability company (SPRL) is 18600€. This so-called social capital is represented by a certain number of shares, that are attributed to the founders, usually proportionally to their contribution to the initial capital. So let’s say John and Marc create the SuperCorp company with an initial social capital of 20000 euros, represented by 100000 shares. Each of them, brings 10000 euros to the table, so each of them gets 50000 shares. The value of each share is set to 20000/100000=0,2€. As the company grows, works and develops its business, its valuation increases. There is value created in knowledge, intellectual property, various assets that it may develop or acquire, and more importantly all the perspectives that it offers for the future thanks to the work that John, Marc and their employees do for SuperCorp. This created value is not financial yet. But if John or Marc decides to sell some of their shares to someone else, they will take into account the estimated current valuation of their company. Let’s say John and Marc estimate that all the work they put in is worth 80000 euros after a year, so that means the company’s estimated valuation is 20000+80000=100000 euros. So each share is now valued at 1 euro. It is all virtual until someone is willing to buy some shares for that price. Let’s say Simon comes in and proposes to buy 20% of the company at the current estimated value. One way to do this transaction is to transfer some of the shares of the founders to the new buyer. So for example, Marc and John could sell 20% of their shares to Simon, and we would end up with the following capitalization table:

  • John: 40000 shares, 40% of the company, worth 40000 euros
  • Marc: 40000 shares, 40% of the company, worth 40000 euros
  • Simon: 20000 shares, 20% of the company, worth 20000 euros

Here, the total number of shares doesn’t change, John and Marc each have less shares in the company, but each share is now valued at 5 times its initial value. The problem with that mechanism is that the company doesn’t get any money in that operation. John and Marc personally sold 10000 shares each and they received 10000€ each in the process. So basically Simon just bought a right to ownership of a part of SuperCorp, but won’t participate in its investment. Let’s say Simon is an investor, and his goal is to buy some shares of the company in exchange for some financial capital for the company, in the hopes that SuperCorp will use this new financial capital to increase its valuation even further and allow Simon to sell his shares with a premium sometime down the road. One way to do this is to create new shares of the company instead of selling existing ones. If John and Marc create 25000 new shares and sell those to Simon, he will own 20% of the social capital, which is estimated at a value of 20000 euros. So we will end up with the following capital table:

  • John: 50000 shares, 40% of the company, worth 40000 euros
  • Marc: 50000 shares, 40% of the company, worth 40000 euros
  • Simon: 25000 shares, 20% of the company, worth 20000 euros

The results of this operation are the following:

  • the company has 20000 euros more on the bank account to invest.
  • the value of the company before the investment was 100000€ (pre-money valuation)
  • the value of the company after the capital increase is now 125000€ (post-money valuation)
  • each of the 125000 shares is worth 125000/125000=1€.
  • each original founder now owns 50/125=40% of the company. This process is also called dilution.

Note that all of these figures are entirely fictional and chosen merely to ease calculations. Now that we understand these systems of shares, let’s talk about stock options, or more specifically warrants (we’ll use them interchangeably here even though they are slightly different). Warrants are a financial instrument used to incentivize employees to stay with the company as long as possible and do their job to their best. Simply put, a warrant is the right to buy a share of the company later at the price it has today, which is called exercising the warrant. And since the value of the shares is supposed to go up, the goal is to make it possible for the employee to make a profit when he buys the shares associated with his warrants, and then resells the shares at the value they are worth then. That is for the motivation to participate in the success of the company. The motivation to stay is created by what is called a vesting schedule. Basically, the vesting schedule says that the employee who subscribes to warrants has the right to vest (or exercise) these warrants only in a certain timeframe. Typically, 25% of the warrants can be exercised at the end of the first year in the company (that is called the cliff), and then 1/36th of the warrants can be exercised at the end of every month for the following 36 months (3 years). So if an employee is given 2500 warrants, that means he will be able to exercise 625 warrants (and get 625 shares) in one year, and then about 52 more warrants every month. If he leaves the company during the first year, he will lose all of his warrants. If he leaves during his 13th month of the company, he will be able to buy 625 shares of the company at the price they were at when he got the warrant, whatever the increase in their value. He is not forced to exercise the warrants: if he doesn’t have enough cash to buy the shares or if their value has gone down, he can simply give up on his warrants. So in our example, let’s say that when Simon comes in as an investor, John and Marc also hire Steve as a developer and they want to incentivize him to go the extra mile and stay longer. So they agree with Simon on the following:

  • John keeps 50000 shares, 40% of the company, worth 40000 euros
  • Marc keeps 50000 shares, 40% of the company, worth 40000 euros
  • Simon gets 22500 shares, 18% of the company, worth 18000 euros
  • 2500 shares are set aside in the warrant plan for Steve, representing 2% of the company, worth 2000 euros

So at the end of the 4-year vesting period, Steve will be able to buy 2500 shares of the company for 2000 euros. Normally, within four years the value of the shares will have greatly increased but Steve will still get a preference price thanks to the warrant, and he will be able to sell those shares for a much higher price. Note that those 2500 shares will not represent 2% of the company anymore by then, because other investors will have joined, more shares will have been created, thus diluting the existing shares. But a slightly smaller percentage of a much larger cake is still very interesting. Let’s talk about taxes now. In Belgium there is a very special tax system for these warrants. The general principle is that you have to pay your taxes right when you receive the warrants. So the warrants are basically free, and they don’t have any value yet, but you still have to pay some taxes on them as if you had received a revenue. Typically, these taxes represent 18% of the face value of the warrants. So in our case, the year Steve gets his 2000 euros worth of warrants, he will have to pay taxes on a taxable basis of 2000*18/100=360€. What if Steve decides not to exercise his shares in the end, or can only exercise a portion of them because he leaves the company? Well that will be too late then: the taxes are paid, and there is no refund. But there is an upside: in exchange for this advanced payment, Steve won’t have to pay any additional taxes when he exercises his warrants and sells the corresponding shares with a bonus. So let’s say Steve’s shares are worth 20000 euros when he can exercise the warrants to buy them, he will still pay 2000 euros and sell them for 20000 euros, receiving a 18000 euros bonus in the process, on which he won’t have to pay any additional taxes. That’s a nice deal, isn’t it? Woohoo! There we are… well… almost. Because there is yet another small trick with those taxes. Basically, if Steve exercises his warrants as soon as he can to buy the associated shares, it’s more paperwork and it’s only interesting if Steve intends to keep those shares for a long time instead of reselling them right away. So to incentivize Steve to hold onto his warrants and only exercise them to sell the shares directly, there is a 50% tax discount if he commits to exercise his warrant no sooner than the beginning of the fourth year after he got them. If he takes this commitment, he just has to pay taxes on 9% of the value of the warrants in taxes, which represents a taxable basis 2000*9/100=180 euros. And what happens if he leaves the company before this commitment ends, you might ask? Well in that case he can exercise the warrants he is entitled to according to the vesting schedule, and then pay the tax difference. Last element that really makes these warrants particularly interesting: in case SuperCorp is acquired or goes public (enters the stock market), all of Steve’s warrants are automatically exercised, and the vesting schedule is simply ignored. So if SuperCorp is acquired for 10 euros per share after two years, Steve will still be able to exercise his 2500 shares and make a 22500-euro profit, even though he should be entitled to only half of his shares after those two years. There are still a couple of subtleties I didn’t mention here, but this is the general way warrants work and are taxed in Belgium. And this explanation has been double-checked for correctness by an expert accountant. So I hope it was clear enough. If you still have questions about warrants, or remarks to improve this explanation, please feel free to leave a comment down below. And in any case, don’t forget that we are hiring developers, that we have warrant plans, and that we even offer premiums for referrals. Just sayin…

Top 7 Reasons Why You Should Work for a Startup (clickbait intended)

It’s been a while since I’ve posted something here but as they say, desperate times… So as you might not know a lot has happened in my professional life since I wrote here. Last time I was getting ready to start a new job for Instaply, a startup based in the US but with an awesome team spread around the world. I worked one year with them, and then I was invited to be a coach for NEST’up Spring 2015. Then last month, I started a new job for another startup, based out of Brussels this time, called Take Eat Easy.

Just to get it out of the way, since the topic of this blog post is going to be about the advantages to join a startup, let me come back to the reasons why I left Instaply after just one year. It has nothing to do with the startup environment itself, and everything to do with the reason why I chose to go freelance in the first place: I love to choose the projects I work for and the people I work with. When one or the other becomes something I have to accomodate instead of something I fully enjoy, AND once I have tried everything in my power to make things go back to where they were at the beginning without success, I start listening for interesting new opportunities. That is exactly what happened here. I would have loved to keep working with those great developers. I didn’t believe enough in the project anymore to fully enjoy working on it. I tried everything I could to steer it back to where I would have believed 100% in it. I was not the only person to decide of course. I was offered a coaching position for a renowned startup accelerator I co-created, I moved on. The funny thing is that the first season of this same accelerator, 3 years ago, saw the birth of another startup: Take Eat Easy, yes, the same where I work now. Small world, right?

Now that we’ve got that out of the way, let’s get back to the present time now. When I joined Take Eat Easy, I made it clear that I didn’t just want to code, I wanted to have a greater impact on shaping the future of a business I really believed in: helping people eat better from the comfort of their home. So I joined as a VP of Engineering. If you want to know the difference with the role of CTO, you should read this article. So now I have the opportunity to keep building some software, but also to build a team with the best possible methodology and structure for the years to come. As a team builder, one of my main responsibilities is to grow the team, to recruit great developers. And that’s what brings me back to my blog.

Right now, we are looking for 3 key persons:

  • one or two Java backend developers to keep building our core system and make it stronger as we release our platform in multiple countries
  • one or two web frontend developers, familiar with Java (JSP, Spring MVC, etc.) but also very strong with HTML5, CSS and Javascript, to make our customer website and our internal tools completely ergonomic
  • one or two Android developers to bootstrap the development of our brand new mobile app, and help us with the development of our apps for restaurant managers and bike couriers, among other things

And I’m not gonna lie: I was expecting to get more applications. The fact is that we are looking for senior developers because we don’t have time to train newbies for now (sorry guys), and we need strong developers with enough autonomy and creativity to take matters into their own hands and really build the backbone of a great team. But still, I can’t help but wonder why we don’t get more applications.

First hypothesis: people just don’t know we’re hiring. Well at least now, you know (and your best developer friends will soon know, right?). I also published a few messages on targeted LinkedIn groups, there was a lot of press surrounding our recent funding round, and we do have our recruitment website where you can see our awesome industrial office space. But maybe it’s not enough.

Second hypothesis: the technologies we are working with are so commonplace in big corporations and institutions like the European Commission, that offer good paychecks and a comfortable 9-to-5 job, that developers are just too comfortable there to get interested in anything else. But I’ve been there, I’ve done that, and I know that working for those big institutions can look like a golden jail and eat your soul from the inside out.

Third hypothesis: startups are so rare in Belgium, that few developers actually know what it’s like to work for one, they don’t see all the benefits, and it sometimes looks too good to be true. So let me set the record straight and give you my top reasons why developing for a startup is so awesome (and of course, even more so for Take Eat Easy :oP )

Have an impact

More often than not, when I’ve worked for big companies, I never met the end users of the apps I worked on. Sometimes, the software I wrote never got to a real end user because the project was just dropped before the end (which tends to happen when a full waterfall development cycle takes a few years to complete before you realize your software is already out-of-phase with your market).

In a startup, not only can you see your final users, but you can meet them, touch them, feel their pain, and more importantly feel the joy and happiness that your software brings to their lives. When was the last time you could say that from the invoice checking ERP/SOA system your worked on (real world example)?

Learn some startup skills

I know so many developers who stay in their 9-to-5 job in a big company and save money for the big day when they will finally take the plunge and turn one of their million-dollar side project idea into a real business. I used to be one of those.

What if you actually learned some useful things while saving for your big coming out? What if you actually witnessed first hand what it takes to be in a startup rollercoaster before you build your own? What if you used this experience to see if you are actually CEO material, and in the process, put your full power to good use by helping a business you actually believe in? There actually is a middle ground between a boring dull job for a pharma company and creating your own startup: it’s called an exciting job for an existing and thriving startup.

Bonus: where are you more likely to meet your potential future cofounders, team mates and investors, at the European Commission or at the heart of the startup ecosystem?

NB: if you are already further down the line and you are planning to launch your own startup within a year, this doesn’t apply. Working for a startup is a long-term commitment and you will only benefit fully from it (and let’s face it, the startup will only benefit from your expertise) if you stay long enough.

Zero-bullshit

9-to-5 jobs are called that for a reason: so long as you clock in at 9 and clock out at 5, you’re good, no matter what you have really done in-between. If you do less than that, you can already feel the warm breath of your manager in your neck (and probably smell his bad armpits with this weather). And those companies are so much about appearance, that you have to disguise as a serious person, with suits and everything. And you have to attend meetings, watch boring Powerpoint presentations, play political games, and the list goes on forever.

Nothing like that in a startup, really. It’s pretty much like McDonald’s. Come as you are. Geeky t-shirts, flip flops, 3-day beard, whatever. So long as you do your job, you get results and produce awesome software, we don’t care how you look or when you come to the office. As a matter of fact, we know you are going to stay late, because you will love your job and your team mates so much that we will have to send you home! And no bullshit meetings or layers and layers of management. We are not here to justify our paycheck, we are here to get some shit done, and make the world a better place, one distributed database at a time (Silicon Valley pun intended). Anyway, you get my point.

It’s an investment

Whatever you do for a big company, where is the incentive to do your job better today than yesterday? But who am I kidding, if you are reading this your are probably such a perfectionist professional that you don’t need any incentive. But what about your colleagues?

In a funded startup, not only is the paycheck completely comparable to your current corporate one and probably even better, but you get one thing the big guys will never be able to offer you: stock options baby! I know, this is not a salary, and I am the first one to say it should not be bargained as one. It is merely a bonus. Some would even say it’s a gamble, and in some sense it is. But what do you call a bet in which you can influence the odds of successful outcome with your hard work, sweat and creative ideas? I call that a pretty good bet, one that won’t make you rich for sure, but might go a long way in setting you up for your own startup some day… or anything else for that matter. How about that?

Awesome colleagues

How many times have you complained about all those guys around you, who are not all bad, but have become so infatuated by such comfortable working conditions, that they have completely stopped questioning the status quo and the misery of their conditions. But you are stronger than that, right? You are still too young for that shit, huh?

Then how about working for a company that doesn’t settle for the average Joe Does-the-Job, but strives to only work with the most creative, no-bullshit software builders it can find? How about being part of a great team, and even participating in building it with all the great developers you have met throughout the years, and thus influence your stock options value even more?

Cool perks

Do you remember the last time you yelled at your computer because you still don’t understand why you get to build complex user interfaces and innovative backend systems on the same gear as Julie from accounting? And that chair, boy that annoying old chair that was probably already used by card punchers if you know what I mean, and has likely squeaked though Y2K bug times. And don’t get me started on those unbearable cubicles and that awful stuff they call food at the Sodexo joint downstairs (confess to me: when people ask you how it is, you still answer “it’s fine!” with an awkward smile). I’m barely exaggerating, admit it.

Of course, a startup is so much better on all those fronts. I needed a big 27-inch screen to do my iOS storyboarding wizardry properly, I got the green light for one in a couple of days, and now it’s proudly sitting on my desk. Inspiring creative work environment? CHECK! Awesome food delivered straight from the most trendy restaurants in Brussels? What else? (ok, the Take Eat Easy factor might help there). All those little thing that make you smile your way to work, along with Magic Assembly breaks, no-nonsense days-off policies, do you really need me to go on?

The (real) Agile way

I’m not talking about post-it fakery here. No “of course we do Agile! RUP is agile, right?”. Ever heard of ScrumFall? Remember those post-it notes that you ordered to migrate your project to Kanban, and that ended up arming your post-it war with your cellmates across the road, out of despair?

In a startup, Agile is not something you do to shake up your manager’s certainty, or to make your life as a developer less miserable in an Excel-driven management world. It’s a necessity. It’s the norm. It is what you do because it’s just the most efficient way to get shit done and to ship actual software out the freaking door and into the hands of your feedback-blowing users. Real Kanban with regular retrospectives with which you can customize the process to fit your team’s way of working in full collaboration (not against) a business that actually craves for your every line of juicy code.


 

That’s what a startup really looks like. And of course that’s what OUR startup really looks like, and will do even more so if you loved every advantage listed above and want to make them even more real by joining us.

Of course, I can already hear some of you in the back whisper: “oh, but that’s not all rosy, you will probably do crazy hours, and you will have a lot of responsibilities, and it might not work out in the end, it’s not safe out there, it’s a cutthroat jungle, and investors will make a lot more money than you, and your kids will see your sorry face a lot less, and yes, you will learn, but you will fail a lot to get there, and…”

I won’t deny. That’s all I have to say: I won’t deny any of that. I’ll just let you read it back out loud and leave you with that and my direct email address: sebastien.arbogast@takeeateasy.be

What a year!

Usually, this time of year, it’s time for looking back on the past months and reflect on what has been accomplished. Last year I didn’t even bother because I was simply too depressed. I spent a couple of weeks isolated in a chalet in Canada, I needed to regroup, I needed to flip a switch. And boy I did!

One year later, so many things have changed in my life it is scary to think about it… though energizing.

One of the biggest decisions I made during my cold retreat was to finally tackle the pain I’ve been struggling with ever since I was a child. I had started my first diet when I was 3 and struggled with my weight ever since. For the past three years, I have been working on the roots of this disease, of this malicious relationship I had with food. But it was time to face it head on and do something concrete about it. In January, I had my first appointment with a nutritionist at the Brussels Weight Loss Center, and it was the beginning of a long but inspiring journey. I was too far off to just go on another diet, the only durable solution for me was surgery, so I did what had to be done… and told the story of it (in French). The surgery happened in early July, and I’m very pleased to report that I have already lost 55 kilograms over the past 6 months… and counting. The goal is to go back to 100 and get out of medical obesity, so things are on track.

When I took the decision to have the surgery, I knew I needed some financial and professional stability, both to prepare myself and to recover properly. I couldn’t afford to live the stressful entrepreneur life anymore. So I accepted a new consultancy mission for a big bank. Sure it wasn’t fully aligned with my values and goals in life, but it paid the bills nicely and allowed me to focus some attention on my health. I started working there in early April this year and I learned a lot. Then a few months ago, a Belgian friend of mine who had moved to San Francisco and joined a promising startup there told me they might soon need some help on their technical team. It was not an immediate need, but I started dreaming of settling in this city that I love. Then a couple weeks ago he got back to me. That was it, they needed someone now! My relocation plans had changed a little (I’ll tell you how) but I really wanted to join them. I talked to him, I talked to the CEO, I met the backend developer… and the deal was sealed in enthusiasm. So starting in January, I’m back in the startup world, but not with my own company. I’m a developer for Instaply and I’m thrilled about it.

Last (not really), but not least, I told you my relocation plans have changed in the past few weeks. Here’s why. When I took the decision to have gastric bypass surgery, it was thanks to a lot of online resources and especially testimonials from other patients who told their story in videos from a few months before to a few years after the procedure. It really helped me ease my concerns about the surgery, its consequences, its challenges and the overall journey that was ahead of me. Lucky for me I understand English without too much trouble. But then it struck me that very few French-speaking patients dared to talk about it, which allowed a lot of false ideas to spread, and the surgery to be somewhat shameful in the French-speaking world. So I took it upon myself to create my own Youtube channel, my own community, my own blog, with a triple goal in mind:

  • Inspire patients
  • Educate their family and friends
  • Inform the general public

But there was one side effect I didn’t anticipate: those videos allowed me to find my special someone. I thought that after I would get back my self esteem as the result of getting back in my own driver seat, I would have a crazy “catch up” period, having fun, meeting a lot of people, getting out and not taking things seriously. But as often in life, surprises are even better. She had the same surgery I did, she watched my videos, she called me to ask questions and share her experience with me, and we quickly noticed we shared much more than an obesity journey. I used to find this concept very overrated, but now I can tell you with full certainty that I found my soulmate. She is everything I had never hoped for, she makes me feel more alive than ever, she makes me enjoy every moment of life, here and now, like I never could, and believe me when I tell you that’s quite a feat. Things went incredibly fast between us, but it was just obvious, and being far away from her became so painful, that I took the decision to move back to France, near where she lives, and be happy there. Now of course this relationship and decision to move come with greater responsibility too, because she has two kids who are going to be part of my life too. But even though I’m fully aware of the challenges ahead of me, I’m not scared. It’s fair! And this move is fully compatible with me working remotely from home for Instaply, so everything is just perfect.

So… new body… new job… new girl… and kids. What did I forget? Oh yeah! Back in October we went to TechCrunch Disrupt in Berlin with the PeerTrust team. PeerTrust is this side project we had been working on for 18 months, trying to find a solution to this trust problem that made Kodesk (my first startup) fail. And PeerTrust failed to raise the enthusiasm that was necessary to keep us on track. So we decided to stop working on it. But on the other hand, it was obvious that we enjoyed working together very much, and none of us wanted to be a consultant for big companies our entire lives. That’s when it struck us: why not create our own agency, work for customers we chose, with our own tools and more importantly with our preferred team. Hence was born ZeTeam! I won’t go too much in detail about it yet, because things are still in their infancy, but suffice it to say that if you or someone you know is looking for innovative and pragmatic software solutions for their business, feel free to contact us or keep in touch. I’ll definitely keep you updated here in the coming weeks.

So there we go. 2013 is soon coming to an end. I’m on my way to enjoy the best holidays of my life, then 2 months between 2 jobs, finishing my mission for the bank and ramping up on my Instaply work, and then moving back to France with my sweetheart in March. Things are very exciting. So have a merry christmas, a happy new year, and don’t forget your destiny lies in your own hands. Be happy, and you will be even happier.