20
Jun 12

Tips to stay in the zone as a developer

Keep a simple todo-list

This is a sample of my todo list:

Write unit tests for new presenters
x Test each user story manually under IE7
x Fix javascript issue
x Fix AUDIO VIDEO styles

The todo list helps you with several things.

First, it helps you fulfil all your promises and commitments by not forgetting them.

Second, it frees your mind and you start thinking less of work when you are at home. Your mind will start trusting your todo list and will stop reminding you of doing certain things when you are in your shower or about to sleep.

Third, it helps you get back in the flow. Let’s say that you are in the middle of writing a method and someone comes to ask you something. If the interaction with that person lasts more than a minute, you are likely to lose your train of thoughts. The todo list will remind you what item you were working on so that you can get back to it straight away but it will also put you in the same mindset as to when you wrote the todo list, helping with context switching.

Avoid interruptions

Communication mediums

Avoiding interruptions is obvious advice but it is hard to deal with in an open space. We are all responsible to help each other stay in the flow by deciding whether we need the answer right now or if the answer can be asynchronous (in which case we should send an email or a chat message). Using Skype or emails also reduces the environment noise.

Emails

Another way to get interrupted is by constantly checking emails. The action of checking your emails is not what cause the interruption but it happens when you receive an email you decide to reply right now.

If you find yourself easily distracted. Set yourself a rule to check your emails once per hour.

Background noise

I realized recently that I get distracted by surrounding activity: the printer, the discussions in the next aisle, phones ringing. To help me reduce these distractions, I started listening to music and it has helped tremendously.

It makes my days more enjoyable.

I don’t get distracted as much.

People think twice before interrupting me instead of sending me an email.

Ask when you are stuck

I spoke several times of avoiding interruptions and using emails rather than directly speaking to someone but I am still a strong believer that you should still ask for advice if you get stuck. Don’t hesitate to ask someone (via email, chat, directly as you see fit) if you can’t solve your issue. You could get stuck for 3 hours when someone could solve your issue in 5 minutes just by having a fresh perspective on your issue.

Make pauses

Making a few breaks in your day allows your mind to solve your issues in the background. Going to get a cup of tea or to the toilet could be enough to get unstuck.

I know some people use the Pomodoro technique. Work 25 minutes and rest 5 minutes. Repeat.

Pomodoro doesn’t work for me but a lot of people embraced it and love it.

Do you guys have any tips on increasing productivity and reducing stress?


17
Jun 12

How DragonBox an educational app beat Angry Birds in the AppStore

Aymeric
I have interviewed the founder of the companyWe Want To Know that is behind the app DragonBox.

DragonBox teaches kids algebra in a innovative and fun way and has reached the #1 spot in the Games category of the AppStore in Norway.

Click here to check out the app on the iTunes store. (here for the Android version)

In the interview, I was interested to hear about the specifics of the execution of the idea that helped them get so much traction.

The app is innovative and well polished but many of us have great products and yet fail to get any traction. Through my questions, I have tried my best to extract what they did that other entrepreneurs can reproduce in their own ventures.

Building a great team

Aymeric
I know that you are not a developer yourself and that you are not funded and yet you have managed to gather a team of talented experts to help you develop DragonBox.

Can you tell us a bit about the composition of your team (skills and geographical location) and how you found them?

Jean-Baptiste
My vision on this is: get the best experts that share the same vision as me, in this case people who love mathematics, or share the vision to revolutionize education thru games.

  • Patrick Marchal, former game director of a big studio Montecristo (game XL cities), based in Paris. Found him on the net through an article he wrote about serious games.
  • Jerome Lacoste, a friend, expert in building automation, lean process, polyvalent, extremely user centered, based in Oslo.
  • Regis Faller, one of the best art directors in France, extremely creative, and one of the few artists who loves mathematics. I met him while working in the publishing industry, and I love his way of thinking, he’s extremely visual, and that’s a key element in how we want to present mathematics in our games. He’s super experienced and talented to communicate with children, based in Paris.
  • Rolf Assev, former top executive from Opera Software, visionary as he sees the power of game based learning, very experimented with PR, marketing and strategy.
  • Chloe Faller, 14 years old, she drew the pokemon figures in the game, super talented, and she knows what children are interested in. Most part of the adults would have never thought the drawings would work for almost all ages. Paris.
    Luis Sanches, soundtrack, super talented, and professional, Brighton (UK), was not given so much time to make the music, so it’s pretty impressive what he achieved. I heard the music a million times and it is still ok : )
In what terms did they agree to work with you? What helped you convince them?

Good question. I guess I can be convincing 🙂 but the vision behind the company is really strong and our team and product show we can deliver what we promise. Some are shareholders because they want to stay in the long term, others got a fixed fee and they will get a percentage of sales. But basically, if people I meet share the same vision, the biggest part of the job is done because we both want to make it happen.

Build a great product

Aymeric
Getting an idea implemented the way you want by someone else is extremely difficult, as anyone who has tried outsourcing development can attest. Although having a team is very different from outsourcing, they both share the process of explaining one’s vision to someone else.

LLpppgjPCibF1uU8logaJ0-temp-upload.utwnqfsq.320x480-75

How did you decide what features to include and what to remove before the launch?

I basically took the decisions at the last moment. As you can imagine there are many decisions or choices to make.

Which target group, what kind of games…. it was many choices but the vision helped me find one path that turned out to be correct.

I do these games for my children, in order them to learn difficult stuff rapidly.

So the mission and vision helped me massively. Simple game, simple rules, not too much, more importantly get the flow when you play. Make it work with kids as young as possible.

How did you clarify the requirements inside your team to make sure ideas were understood?

The main problem is not to make ideas understood but rather have ideas accepted. Lots of discussion to come to the features I wanted, and very often nothing was made. Strong personalities in the team. So it’s more kind of a consensus. Same language and same goal make things pretty clear… every team member thinks and lives the product. Not that many explanations needed.

I remember you mentioned you were doing some user testing, what useful feedback came from doing this kind of testing? Where did you find the testers?

The main blocker is to get access to testers. You have to be completely crazy and passionate to be able to test the game with anybody at anytime. We are that kind of guys… test, observe, and accept that things don’t work and that you have to change it. Openness is KEY. Accept that you have to change things to make it work. Because my goal is to make it work with my own children. It is pure research actually.

Dominating the AppStore

Aymeric
Your app reached the #1 spot on the AppStore. Congratulations, this is a great achievement. Let’s dig into how you launched your product.

Was is a soft launch (organically from your social network), or was it a Hollywood launch (create as much buzz as possible)?

We invited journalists to come to my school to present the product. In parallel we did a lot of things to work on our own social networks. But sincerely, all that has no meaning if your product is shit…

We got PR and social network response because it is more than a game. Education and mathematics is a hot thing that is in great need for innovation. So there is a trend there and a HUGE need and market. Competitors are welcome : ) it is a new industry we are starting..

What worked the best in generating publicity? PR, word of mouth, your personal network, etc…

PR was key, for example in the US where we got a great article from Wired. Obviously the journalist saw a great story in the product.

You have been interviewed by very popular blogs and newspapers, how did you approach them to get covered?

Rolf is a very experienced PR guy, he is doing everything to set up meetings, pitch the journalists or get people to pitch journalists. I come afterwards to sell the vision. But again, if the product and vision are crap, forget about taking contact with journalists. That said, I spent 4 hours with a journalist in Sweden and she didn’t write a word about our vision and the fact that it is possible to revolutionize education… so PR work is very difficult and unpredictable. Especially if you are small. I would have never done that without Rolf… we would have gone another way.

Can you think of specific tactics you have used that helped generated more buzz? (in-app share feature, use of twitter or facebook, etc…)

We are zeroes when it comes to features like in-app recommendations… we are losing lots of momentum and sales because of that.. We missed something there actually.

But at the same time, it is difficult to implement everything and test it and have minimal bugs. And I had no experience. We decided to launch the product even if all these features were not in, to get feedback from the market. It is important to get feedback from the market as soon as possible to adjust things if necessary.

How many journalists have you met in total so far?

I met or talked to 7 journalists so far and half didn’t publish a thing about us.

Anything you wish you had done better in regard to PR?

Yep, it is important to be well prepared and anchor our speech locally. In Norway that is easy, but abroad, quite complicated. For example the optimal way is to get schools or teachers in each country that journalists can contact. All messages must be as much as possible localized. Especially in the education sector. We have to present our game as innovation and not just a product we push. I should have been better prepared at one of the interview… but we learnt from that.

Aymeric
Here is the Hacker News thread related to the Wired article.

I hope you enjoyed this interview, don’t hesitate to ask questions in the comments and I will pass them on to Jean-Baptiste.


02
May 12

How to receive incoming emails in your Asp.net MVC app

now sends an email asking its users how their day went. They can reply to the email directly and their answer is directly added to their journal.

This is how I have implemented this feature using SendGrid and Asp.net MVC3.

1. Set up your DNS

SendGrid needs you to set up a dedicated domain name that points to their email servers. For example, for WEEK PLAN, I use hello.weekplan.net and the emails I send the reply-able emails from uses this convention:
command+encrypted-arg1+encrypted-arg2@hello.weekplan.net

If a user replies to one of these emails, SendGrid would be processing it.

MX record

2. Set up incoming emails in SendGrid

Each time SendGrid receives an email, they will parse it and post it to a URL you give them (POST request). Simply go to the Developers section, and click on the “Parse Incoming Emails” link:

SendGrid settings page

3. Set up a new route in MVC

WEEK PLAN Now we need to make that URL work. I simply need to add the following in my Global.asax.cs:

Adding a new route

4. Code the action

This is the code of the receiving action:

A few comments on this code:

1. The ValidateInput(false) attribute prevents MVC to consider the incoming data as not safe.

2. I have created a class IncomingEmail to take advantage of the default binder in MVC. I simply name the properties the same way SendGrid names the different parameters.

3. I wasn’t sure what type should the envelope parameter be so I decided to use a dynamic object  for that (and I needed to deserialize the envelope parameter into the dynamic object). Probably not the best option, I am happy to receive suggestions on what type should envelope be.

That’s it, the rest of the action is simply parsing the email address (post+asd87d+sadj23@hello.weekplan.net) for example to know what to do.

I Hope WEEK PLAN users will find this useful.


28
Apr 12

Allowing your users to unsubscribe from your email notifications in MVC3 and Entity Framework

This is a step by step list of all the steps I took to be able to add a “Unsubscribe” link in the signature of the emails Week Plan sends to the users.

Of course, users must be unsubscribed even when they are not logged in.

This is how I went about it (took me 30mins).

1. Modify the models

First I have added a boolean “BlockedEmails” and a Guid “Guid” property in the User table.

Because I use Code First Entity Framework and Automatic Migrations, I don’t have to take any additional step to make sure the database will be upgraded as well.

2. Autopopulating the value of the Guid

In the mapping class of the User model, I simply need to add the following line:

this.Property(o => o.Guid).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

How simple!

Now, I want to add an Unsubscribe link in the emails being sent. The link would follow this format: http://weekplan.net/Account/Unsubscribed/GUID_OF_USER

3. Adding the Action in the Account controller

This is just two lines of code:

As you can guess, the UnsubscribeFromEmails search for a user with the same Guid as the id parameter and sets BlockedEmails to true.

The rest is basic Asp.net MVC development:

  • I added a Unsubscribed view in the Views/Account folder.

  • I added the Unsubscribe link inside the email.

  • I don’t send emails to users who have their BlockedEmails set to true.

Thank you for reading.


28
Apr 12

Sending emails in Asp.net MVC like in Ruby on Rails

Recently I found  a nuget package that allows me to use MVC Views and Layouts to define how my emails should look like, in a similar way as how mailer works in Ruby on Rails.

This article will show you how I integrated it into my online weekly planner WeekPlan.

1. Set up of the package (5 mins)

The package documentation can be found in the NuGet gallery and ongithub.

I first run the following two commands in my package manager console:

The second command generates the files I will need to customize MvcMailer behaviour and the view files for each email.

MVCMailer generated views

MVCMailer generated files

Finally, we need to set up our Web.Config:

Because I need a different configuration on production, I used the Configuration Transforms technique:

2. Setting up a new email to send (10 min)

Let’s check out how to write the method that will build the Invitation email:

Pretty straightforward. We build a standard MailMessage and call the PopulateBody method to call MVCMailer magic.

This is how my view file looks like:

The neat thing about MVCMailer is that it allows to set the HTML view and the Text view too (this is why I used the –WithText parameter when calling the scaffolder:

3. Send an email

In my controller, I need to call the Invitation method and use the extension method Send (given by MVCMailer) to send the email:

I have a base Controller class where I added the Mailer property:

If I test my code, I get a new file in my drop folder:

image

And if I open it in Outlook, I get the result I expected:

image

Et voilà!

Nice isn’t it?

(Get the full gist here)


28
Apr 12

Enabling automatic migrations with Entity Framework 4.3 on an existing database

Now that my online weekly planner WeekPlan has been migrated from Linq2Sql to Entity Framework, I can take advantage of automatic migrations.

This is actually very simple to put in place and will save you (and me) many headaches in the future.

First, execute these two commands in your Package Manager Console:

Enable-Migrations -EnableAutomaticMigrations
Add-Migration InitialMigration -IgnoreChanges

The first one will create a Migrations folder with a Configuration class (that enables the Automatic Migrations).

The second command creates an empty migration so that the future migrations will start from the current state of your database.

Additionally, I needed to add the following line in OnModelCreating method of my DbContext class:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<WeekPlanDataContext, Configuration>());

That’s it! Now, If I add a new column in a model, it will be automatically added to the database schema. Even better than migrations in rails


23
Dec 11

Making changes based on data: fixing our registration process

UPDATE: I have added the results of my changes at the end of the article

I am currently working on Goalstribe a group coaching website and this month we are trying to prove we can sell groups via online marketing channels.

After bringing sufficient traffic from Google AdWords, Bing and Facebook Ads, we haven’t managed to sell one spot yet. So I started looking at our web analytics data to try to understand where in the funnel we are losing people.

Identifying the problem

The funnel goes like this:
1. User arrives on the landing page /join/loseweight
2. User clicks on the “Join tribe for $10/month” and needs to create a new account
3. After the account is created, user is asked to become a paid subscriber
4. User clicks on the “Go to Paypal” button and is redirected to Paypal
5. User is redirected back to the application as a registered user (if he pays)

First I looked at the new visitor flow function from Google Analytics:

Visitor flow from Google Analytics

I learned three things from this:

1. Our PPC campaigns are doing a good job at bringing traffic for cheap.
2. An outstanding 25% of the visitors go from step 1 to step 2! This is big because we explicitly mention the price before they click on the button, so they are highly qualified leads.
3. We lose 100% of the people who are presented with the registration screen.

The funnel visualization tells us a similar story (I added the goal visualization only later in the month, it is why we don’t have the same numbers as the visitor flow chart):

Funnel visualization

Obviously there is a BIG problem with the user sign up page and I will try to fix it.

Never has a visitor landed on the “Become a subscriber” page which tells me that the blocker is on the registration page.

Tweaking the sign up page

This is what the visitor sees after he clicks on “Join the tribe” button.

Registration page

I can see a few wrong things about this page:

1. The red message can scare people away.
2. The duplicity of the two forms (log in and register) can confuse users
3. The additional links on the top right and bottom right can divert people’s attention
4. There is no reminder of why it is good to join Goalstribe (no credibility factor, no testimonials, etc…)

The modification

New registration screen

The new registration screen doesn’t display the links anymore. The message is green instead of red, the login form has been removed and the right side is used to remind people why joining Goalstribe is a good idea.

The changes have been deployed and we will see what results we get out of it. I will update the post once I get some results.

UPDATE: This is the funnel visualization after a few weeks:

image

We managed to get the full funnel working. We are still losing a awful lot of people on the sign up page 🙁 which I need to improve even more.


04
Nov 11

IMPROVE, new idea management software

image

Link: idea management software

Every now and then I like to work on a side project just to keep my skills sharp and gain some perspective on my main project.

Weekplan.net was born out of one of these weekends and reached over 10K users so far.

IMPROVE was heavily inspired by a blog post from 37Signals where they showed an internal app they used to manage the ideas inside their company.

A year later they still haven’t made their app public so it makes me feel a bit less guilty to try to recreate the app based on their post.

image

Give it a try and let me know what you think! 🙂


03
Nov 11

Free: Financial Independence spreadsheet

Very few books have changed the way I think as much as “Your Money or Your Life”.

I have developed an Excel spreadsheet to help me and my friends stay on top of our personal finances following the steps outlined in the book “Your Money or Your Life”. You can download it here: Your money or your life spreadsheet.

This post will describe what the spreadsheet does.

Your money or your life steps

Home tab

Nothing much, just a splashscreen:

Become financially independent

Lifetime earnings

Lifetime earnings

This step consists of listing all the income you have generated throughout your life.

This step makes you realize that you can actually generate income but that if you mismanage it you don’t have much left.

Which brings us to the next tab.

Personal balance sheet

Personal balance sheet

This step asks you to list everything you currently own or owe. You may realize that you actually own more than you expected 🙂

True hourly wage

True hourly wage

This step looks at the time and money you spend for work related activities and how much you have at the end of the month.

You end up with a dollar per hour figure that can help you make buying decisions: “This restaurant will cost us $50, it represents 2 hours of work, is it worth it? Can we have a similar enjoyable experience somewhere cheaper?”.

Expense tracking

Expense tracking

This step is about tracking every cents you spend every day for 30 days. This will raise your awareness of where your money goes.

No judging just tracking.

Expense adjustments

After one month of diligent expense tracking, you can go to the next tab, Expense adjustments:

Expense adjustments

After your expenses have been grouped, you judge whether the money you spent in each category was well spent. This will guide you to find where you should spend more of your money and where you should spend less (coffees everyday?).

Time to financial independence

And finally, the last step of the spreadsheet is about tracking how far you are from the crossover point, the point where your capital interests are higher than your living expenses.

Financial independence

I found this spreadsheet very useful for my personal use and I hope someone else reading this blog will find it useful as well!

Cheers,

Aymeric


22
Sep 11

Features: simplicity versus completeness

I am tired of all the “simplest [Application Type] of the world”. I wrote about it before.  A simple application is not useful if it is incomplete.

Would Excel be so successful if it was limited to editing a grid?

On the other hand, people like the feeling of simplicity and despise being overwhelmed by too many features.

Which one should you choose? Simplicity (and you may use users for lacking features) or Completeness (and you may lose users for being too complex)?

Stop thinking that one excludes the other!

1. Give your users the option.

Like http://trello.com does:

Or like GoalsTribe does:

2. Progressively present your users with new features

Like StackOverflow does for example:

3. Qualify your users and show features depending on their types

Like Odesk does:

You have many ways to hide features and provide simplicity in a complete application.
Please stop calling your laziness ”simplicity”.