The life of a software developer 4/4: developing a Facebook application

ifiwere_logo2_tie.jpgAs Erick Schonfeld mentioned it on Techcrunch a few weeks earlier, it seems that every developer in the world in currently developing a Facebook app. Having followed my girlfriend during her exchange program in the US and having no chance to find a job for 3 months without any work permit, I decided that I will benefit from this free time to follow the wave and develop mine. The funny part was to explain what I was doing to my girlfriend’s MBA friends: they are so immersed in a business culture that they look at me with wide open eyes when I explain calmly that I have worked one month to create something that will benefit Facebook without being paid and without even hoping to be paid! But they understood a bit better when I explained that this kind of project, especially if successful, can be an additional asset when looking for a job in a Web2.0 company in Silicon Valley ;-)

The conception

The first step was to determine what kind of app I wanted to develop. Of course, I wanted to exploit the full potential of Facebook by creating an app with a viral potential. I identified 3 key success factors for a Facebook app:

  • It must be a functionality linked with the user’s ego to incite him to display the application on his profile;
  • It must allow an interaction among friends and it’s better if this interaction is based on some personal knowledge of your friends;
  • It must be fun.

This is how I got the idea of developing an app allowing you to create your Chinese portrait (by completing several sentences of the form “If I were an animal I would be a Lion” and to guess you friends’ one. It is linked with your ego as it allows you to display one of your answers on your profile with a visual representation; you interact with your friends by guessing their answers; and finally it is fun because you can see which friends know you the best.

The development

There are 2 ways of developing a Facebook app :

  • Using the FBML (Facebook Markup Language) only : your app will be developed for Facebook only;
  • Developing your app externally meaning that most of the processing will be done outside Facebook.

I chose the second option because it gave me more freedom, and also because I wanted to let me the opportunity to export my application on other platforms later on. Besides, to make some preliminary tests it was easier to be on my own hosting platform than being obliged to test my basic application and the integration to Facebook at the same time.

I finally developped it in php/MySQL, therefore I used the php library of the Facebook API, but was of course obliged to integrate some FBML during the integration stage. As said on HYPERLINK “facebook.developer.com” Favebook’s developers wiki, “Facebook Markup Language (FBML) is an evolved subset of HTML with some elements removed, and others which have been added that are specific to Facebook”. Facebook has also developed a specific tool allowing developers to make queries in Facebook’s database: FQL (Facebook Query Language). Javascript also has its own Facebook version: FBJS.

The most striking thing during this development stage has been the quality of information available to developers concerning the API. The Facebook developer community is really active, offering on the Wiki almost all the answers that are necessary to be efficient in Facebook languages really quickly. Numerous scripts, easily customizable, are also available, as well as numerous updates.

The launch

I finally launched it on Thursday, and what interest me most in this adventure is having first-hand data to analyze the famous network effect. I started by sending invites to my friends, and my girlfriend did the same: 30 of them added the application until now. But in 6 days I managed to reach 395 users, with 24% of them being qualified as “active” by Facebook. You can see below the day-over-day growth rate in the table. Only 10 removed it to date (which is, completely subjectively speaking, a good ratio). What is more worrying is that only 107 “tests” have been done, which means that the feature allowing you to guess your friends’ Chinese portrait is not used a lot (only 25% of users on average have tried to guess one of their friends’ Chinese portrait), which is probably due to the low penetration to date.

tableau_ifiwere_tie.jpg

What is a bit frustrating (but fortunately for privacy reasons) is that developers can’t make elaborated statistics on the users of their app, because if these users are not part of the developer’s friends, he has no access to their information. I would have loved to analyze the geographical spreading of my app: as most of my friends are French, I would like to know when the proportion of French users of my app will start to decrease. I would like to know how many American users I have: as there are many more relations between American users, the value of an American user must be on average superior to the value of another one because of the potential viral adoption he will generate.

You can try my “If I were” application here. Do not hesitate to give me feedback about it; it will be obviously much appreciated.

The life of a software developer, episode 3/4: how to be flexible?

software-iron-triangle.jpgAs a software developer, one of the most difficult challenges to have a interesting career path is to be able to adapt to changing environments, even when you are an expert in a specific framework. I think there are 2 majors reasons to explain this necessity: the first one is that technology evolves very quickly, so you have to be able to be on top of the new “killer” programming language (e.g. currently RoR); the second one is that the essence of a software developer job in almost every company lies in the ability of being assigned to different projects with different practices and programming languages. These changes in assignments are most of the time unexpected, unless you consider that you have to expect them all the time! In all cases, you must be efficient and productive very quickly: an in-house software developer almost always has to prove that he can do the job better than a service provider and that internal development offers more advantages than outsourced one. This is of course not always true, but the variety of a software developer job often depends on this assumption. To illustrate that, I remember the case of HCL America, a provider of software development services, loosing its clients because software developers at the client’s company threaten to leave the company if external developers were about to take some of their functions, even for the restricted time of a project.

But the question is, how to be efficient and productive very quickly with new programming languages or development platform? In my previous company, some members of my team and I have had to learn programming languages like JAVA or FORMS in only few weeks. Whereas it may seem difficult to be up to the task, there are some basic principles that help a software developer on a day-to-day basis to build on his current knowledge to acquire new skills.

One of the main asset to get started is simply… Google! I know some companies where software developers are not allowed to use an Internet connexion, and I think that it is completely counter-productive. We have to remember that the developers community is like the gamers one: we don’t like to spend hours looking for a solution to a problem that plenty of us have already encountered; we love receiving tips to go quicker, and we are ready to share our knowledge without any limits to benefit from this community’s knowledge in return. I am never reluctant to dedicate time to answer some developers’ questions on dedicated forums, and I use them a lot when I face a problem or simply want to get started and understand the “spirit” of a new language.

Then, the basic reasoning of any programming language is always the same. A traditional software developer formation does not provide a knowledge of every language, but an understanding of how you can solve a problem in a development context and what are the best tools to do that. Therefore, mastering basic algorithms like Dijkstra or the graph theory, and modeling languages like UML is almost sufficient to develop in every language.

For example, during my first year in my previous company, I had to develop an application in FORMS (language developed by ORACLE). Of course, as it happens all the time, I was asked to do that without even knowing anything about this language. But in only one month I was able to develop a complex application with FORMS and to help other people to get started with this language. The secret of such a flexibility was to understand how this programming language worked. Some basic questions were:

  • Is it a object-oriented programming or a procedural programming? – Which tools are used to develop this language?
  • Where is processing made?
  • How to create a variable?
  • What is the syntax of conditional statements, conditional expressions and conditional constructs?
  • How to make tests on the code?

Any good developer must be able to process quickly this kind of reasoning because of operational pressure. For example, for web applications, with interactive applications becoming mainstream, operational people just can’t tolerate that all their specifications to add interactive features can’t be developed in a timely manner. Therefore integrating Ajax to a code written in Java is simply an obligation if you want to meet deadlines. However, this kind of market pull, forcing technical people to adapt their skills and the technologies they master to market needs, is clearly what drives excellence and motivation among most developers, eager to push their limits further. This is also our capacity to overachieve in terms of flexibility, adaptability to new challenges, capacity of anticipation and rapidity which lead to recognition of the value of software development in any company.

The life of a software developer, episode 2/4: the improvement of software development processes

Recently I read an article saying that only 16% of data-processing projects are a success. On the other hand, 59% of data-processing projects don’t respect initial budget, 35% don’t respect deadlines and 54% of all applications don’t match clients’ needs.

This being known, we can understand the success of CMMi (Capability Maturity Model® Integration) model. If you don’t know anything about CMMi you can find some information here, but basically it is a software quality process leading to a certification with 5 different levels.

I took part to a CMMi project at my previous company which has been working on obtaining the CMMi level 2 certification for its R&D department for 3 years, and finally got it last year. The project aimed at reviewing all the software development process. A lot of CMMi experts say that the level 2 is the toughest level to obtain because the company must destroy all previous processes to build better ones, which rubs against the traditional idea that we can always improve on what has already been done without starting from scratch again.

One year after this certification, it is easy to assess the great impact of CMMi: it has definitely improved the productivity of software development processes.

For example, before CMMi, lots of processes were implementing differently depending on employees’ different habits and preferences. It was mainly an oral culture that helped us to coordinate. Now all the processes are archived and referenced in an internal source developed under CMMi quality: the focus is now on discussing important decisions about the product rather than explaining to others the different processes used by each part of the team.

Unsurprisingly, the key to succeed in CMMi certification is to involve all employees. For them, it was a huge change (which implies of course HR management), because all habits have been modified. For example an increased care in file management or the writing of a review after every meeting is now mandatory. In this context trainings are crucial: employees must see why new processes are better than older ones to avoid rejection. But the improvement process is definitely not a top-down one, where the management team would agree on some processes and then try to make them adopt by the rest of the company: employees have to propose new processes to improve the productivity by themselves as they are the main “clients” of CMMi processes. As users, they are in the best position to suggest the greatest ideas.

In general, to reach the next level (except level 1), a company need between one and three years; but why going through all this hassle? Just because, before all, CMMi certification is a great marketing tool: for clients, it means that you produce prime quality software.

In France, only a few companies are certified level 3. In comparison, 89 companies are certified level 5 in India. Indians are even used to create companies which are directly certified level 5: why don’t French companies make the same profitable quality investment upfront?

The life of a software developer, episode 1/4

be.jpgJérémy suggested that I describe my different experiences as a software developer in a set of articles, and I found this approach really interesting. I will start here with my first big experience as a developer during my company creation, and then I will continue with the different projects I’ve realized in my current company. I apologize in advance for not being able of giving some deep details sometimes, as confidentiality matters prevent me from doing this.

Two years ago, Fidji and I decided to launch a company “BlogEntreprise” (now discontinued). The project was to develop a professional blog portal for companies and associations. Instead of using existing tools, we decided to develop our website entirely by ourselves to offer the best personalization tools. The website had two different parts:

              – A professional blog search engine 

              - A personal space to create and manage your professional blog

  • Languages and DBMS used :

I was the developer and it was my first real experience of web development. In three months I have developed a website using three different languages.

              - HTML: the basic language for all web applications.

              - JavaScript: it was principally to control that all forms were filled correctly.

              – PHP: I’ve chosen it because it’s the best free language to use with MySQL and because it’s both a procedural programming language and an object-oriented one.

As I said before, for the database management system (DBMS) I have chosen MySQL for two main reasons: it’s free and it’s a powerful tool when used with PHP.

  • Strong focus on the analysis stage

In order to develop the website more easily, I took a lot of time to build my entity-relationship model. For those who don’t know it, an entity-relationship model is used to describe the structure of your database and the relationships between different tables.

I think that having a good entity-relationship model is crucial to have a strong database: it is a basic for software developers to dedicate a lot of time to think about it as it eases dramatically the rest of the development process.

  • Main issues

The most difficult part of this project was to combine the technical and the design aspect. With languages like PHP it’s not easy to separate the design part from the technical part as they are mixed in all files. Conceptually it is really difficult to know where to start: a website conceived by adapting the technical development to the design might be really different from one conceived with the technical part coming first. In that case it’s often a problem of competencies: as I’m not at all a web designer, I had a tendency to think to the technical part first, and then to adjust the design.

Besides I developed this website in parallel of my studies during nights and week-ends, so I didn’t have a lot of time and I tried to focus on the technical part to get things done more quickly. 80% of my time was dedicated to the technical part of the website and only 20% to the design aspect.

At the end, my lack of design abilities has been the main problem: it was really hard to attract companies and associations with a design which didn’t look corporate at all.

Finally, without any money to invest in design, our idea was perfect on paper but the realization as a whole wasn’t enough convincing. Even a well developed website, without any bugs, can’t convince customers if the design is really bad, as it is the first impression given to visitors.

  • Doubts

During those three months, and especially since it was my first large development project that I started from scratch, I had a lot of doubts about my development choices. When you develop an application or a website you never know if you are writing the “best” code. By “best” I mean the most adaptable, the most evolutionary code possible, which is the definition of an “optimized” code. I think that the answer to the question “did I make the right choice or is it possible to optimize the source code?” is that you can always optimize it but sometimes you have to make some choices because you can’t always imagine all the future developments of your website.

  • Technical insights

If I had to make the same project again I think I would use a language based on the Model-View-Controller design pattern (it could be RoR or even the MVC version of PHP). Indeed, with MVC, everything is clearer: data access and business logic, data presentation, and user interaction are separated in different files. I’ve also learnt that developing this kind of project alone is really hard as you can’t get any feedback on your code and the testing part is even longer.

  • Business insights

The fact of having both a technical and a business education has helped me a lot in this project as I was able to better understand the requirements of my business partner. And it has shown me that software / web developers can’t become obsessed by the development to the detriment of the business idea (and unfortunately it is often the case, which leads to products with a perfect code but which are unmarketable!). I’ve also experienced the thrill of being both a software developer and an entrepreneur, which leads to accept with pleasure long hours and an entire dedication to a project.

Rémy is a co-author on Tech IT Easy. You can read more about him on his initial announcement.

Staypressed theme by Themocracy