Tuesday, December 16, 2008

Project Constraints

Every manager knows that, given the quality-deadline-budget constraints, sooner or later he needs to "adjust" one in order to complete the project within the other two - especially if they are tight. Every project should find an acceptable balance between the three, a balance based on a trade-off limit established with the involved parties before the slippage occurs.

A question each PM should ask is: "In the most likely case that something goes wrong, what are my limits? What can I adjust?" The deadline and budget being rather fixed, given the market window opportunity and the sales forecast, is it quality then? It shouldn't be, as long as the quality target is within the application domain (e.g. no military constraints for a domestic use). Especially in our times of crisis and fluid markets - community sites, experts within reach, reviews, high competition-, lowering the standards of the product could mean a major drop in sales, or, even worse, brand compromise.

There is, however, an escape - the number of features. I can almost certainly say about every software project that is has at least one not-so-needed function that can be dropped off in case of emergency. What is there to do then? Well, I think the key word is prioritize: selecting that set of features that constitutes the core, that set that defines your project and makes it stand out of the crowd. These should be quite a few and be given the highest priority. Assigning a lower priority to the others, based upon business value and duration and making sure that you can complete the core and do as much of the rest as possible, without compromising integrity and quality should do.

As a rule of thumb: always try to make sure that a complete and coherent working product can be delivered at the highest acceptable standards, no matter what happens, and that all the stakeholders understand and agree with the compromises. And one important thing to remember: late cuts lead to inconsistencies, therefore cutting is something that must be prepared in advance. Ideally, all the times, the product should be coherent and marketable.

Sunday, December 14, 2008

Flow

'Flow is the mental state of operation in which the person is fully immersed in what he or she is doing by a feeling of energized focus, full involvement, and success in the process of the activity.' - Wikipedia

Generating and maintaining his fellow coworkers in the flow should be the goal of every manager - a deep state of concentration and involvement that generates a rewarding feeling in those who attain it. The thoughts of a person in the flow are similar to a stream of ideas focused on a single subject. He or she disconnects from the outer world and becomes one with the activity thus resulting in a boost of productivity and enjoyment. That is why jobs like programming benefit enormously if the practitioner attains this special state.

Flow is not necessary related to work. Basically everything that is intellectually intensive can trigger such a mental state. One of the targets of every game designers is to create a smooth and immersive environment that, eventually, will capture players' attention and will trigger the flow. All successful games are able to generate such deep involvement that, in turn, creates addictiveness and satisfaction.

Prerequisites:
  • A long period of silence and a surrounding atmosphere of involvement, lack of unnecessary distractions
  • Intellectual challenge
  • Streamlined tools or accessible interfaces (basically whole accessibility dogma is built upon the idea that a person shouldn't be distracted from his / her main activity and loose focus)
  • Prior knowledge of the subject or some other mean by which the person feels comfortable with the activity he or she is involved in (like a smooth learning curve)
  • A friendly but competitive environment
The main problem with the flow is that it installs quite hard and is lost quite easily. Repeated returns from the flow can be very unsatisfying and can cause frustration, boredom or a sense of general lack of enthusiasm. A programmer, for instance, needs about 20 minutes to attain flow and can loose it in roughly a minute or two of interruption. Therefore, it is imperative for a software company to maintain a low level of noise in the production department and for everybody to respect each others work and concentration. The simplest rules that can be followed that can have the effect of boosting productivity are:
  • Maintain a low noise level (less talk in the production area)
  • Don't interrupt your colleague for something that you can figure out yourself
  • All discussions or meetings that need only a part of the team should be held in a separate conference room
  • Maintain all activities not related to production to a minimum. When a colleague is doing something not part of his job, he may distract others
  • Maintain short compilation and start-up times for the application to debug (in programming)
  • Maintain the list of activities that one needs to perform frequently as short as possible; automate as much as possible. A single click or a shortcut should do most of the time
  • Streamline all processes and reduce the overhead to the minimum
  • Allow every employee to have enough personal space. Distribute desks such that everyone can have a feeling of intimacy and safety
Having said that, I wish you all to enter the flow as often as possible and to sustain it as long as possible. It's really fulfilling!

Saturday, December 13, 2008

The Broken Window Effect


A broken window - not a notable event by itself but, if not fixed soon enough, might lead to the idea that the owners don't care. If that's the case, eventually another window gets broken or some graffiti is painted on the walls. Later, it spreads throughout the entire neighborhood. The criminality rate starts to raise and the community collapses. A dramatic scenario that is quite unlikely to occur if there weren't already hidden tensions beneath the peaceful surface but the point is that, if an issue is left unfixed, things are much likely to start degrading exponentially. Imagine a car parked in the street. It can stay there for months left untouched but, once somebody breaks one of its windows or punctures a tire, the car is soon vandalized: all windows are broken, beggars start using it as a place to spend their nights, all valuable parts are stolen and it becomes a wreck in no time.

Smaller scale, personal life, common example: it is easy to wash the dishes immediately after dinner but, once you leave them in the kitchen sink unwashed, new dishes will start to gather there and it will be more difficult and unpleasant for you to wash them. A dirty car, uncompleted jobs are just the same. It is easy to maintain things in proper shape but, once you loose track of them, they start to multiply and then it is more difficult to put them back in order - with really bad possible consequences: lack of motivation, depression, loss of productivity and a sense of incompleteness, affecting your mood, your job, your relationships.

In software development, sloppy code maintenance can lead to disaster. It all stars with the inability to enforce coding rules or standards, a too permissive architecture and a lead programmer that does not validate code - either because he / she is too tired, under too much pressure or just doesn't care. Failure to maintain a good code quality is a clear sign that the project is slipping and every programmer will start hacking his way through the source or impose his personal view on things, leading to bugs and spaghetti code. Once this state of things installs, it triggers an acute loss of motivation in every team member, the feeling that the project is loosing track that, in turn, leads to a great decrease in productivity. People become unhappy with their jobs, soon fights start to happen and some might even start looking for something else. Again, a snowball effect.

Points I'd like to make:
  • Little things can get amplified and have really bad consequences if not properly recognized and managed.
  • Problems left unfixed generate a feeling that "no one cares" and weight that will, eventually, lead to bigger problems.
  • Taking care of issues when they first manifest is the easiest way to stay fit.
The subject is somehow analyzed, among other very interesting topics, in "The Tipping Point: How Little Things Can Make a Big Difference", written by Malcolm Gladwell - published in Romania by the "Publica" print house.

An interesting article on the subject is also "http://www.ambiguous.org/robin/word/brokenwindows.html"

Tuesday, December 9, 2008

Montreal

I've just returned from one week in Ubisoft Montreal where I attended a conference on new game technologies. However, I will not write about the conference itself, but about the city and the people I met.
  • The architecture - downtown is a mixture of modern skyscrapers, art-deco, Neogothic cathedrals, Victorian houses, new and old, American and European at the same time, that blend together splendidly. In 2006, the city was recognized by the international design community as a UNESCO City of Design, one of the three world design capitals (wikipedia)
  • The parks - huge parks, with free ice rings. One of the most beautiful is the Mount Royal, with wonderful panoramas to view the entire city.
  • The people - a mixture of nations and cultures. In the street, people are warm and willing to help you. The services are great. Everyone seems to do his/her job with passion and dedication.
  • The hotel - Ryatt Regency - warm, American, with a light jazzy feeling.
  • The streets - traffic seems by far lighter than in Romania.
In a word, a great experience.

Tuesday, December 2, 2008

Why Sometimes Less Means More?

May sound like a contradiction but, actually, it is not. Maintaining less things or activities around you helps you keep your focus on what is important. It helps you use your entire energy to do only the most crucial things and do them better. Switching tasks is time consuming and energy inefficient. It can also get you depressed because you just don't get to reach your maximum potential in any fields - you know you could do "that" better! Simplicity generates a feeling of lightness and that leads to optimism and confidence. Multitasking is great and can help you do more because it allows you to better fill time gaps and also doesn't get you bored but, be careful how many tasks you undertake ;). What to do when you get overcrowded? Delegate, simplify, get rid of things that you don't really need - become efficient and effective. Too many activities will get you lost in details and you will loose the big picture. When you feel it's just too much, stop, think, reanalyze, reorganize.

Monday, December 1, 2008

Innovation


One of the key ingredients that pushes a company or a product in the elite group is constant innovation. This applies to game development more than anything else because, in this industry, the winner takes it all and seldom it happens that a game that is not innovative sells.

How do we generate innovation, then? The process is tightly linked with a small resistance to change. It can only be embraced in a team that has constant improvement and self challenge as its core values. Innovation appears in teams made of professionals who are involved in the project beyond their current task. Innovation comes from inside those who spots a potential issue and propose a solution - even if the proposition cannot be applied directly, any idea, if spoken, can generate a cognitive process in someone else that might lead to something. It is a rare resource and it should be carefully managed and highly appreciated. It can be triggered only by sustaining a sense of friendship among the team members. It can be triggered by inviting team members to speak even if the subject is not necessary tied to their job description.

Constant brainstorming is a key process but innovation also comes from inside everyone - inner motivation and personal initiative being its traits. As lead, one should always take care people are not afraid to speak their thoughts. Innovation also comes from respect and the ability to actively listen to others - those who think too highly of themselves are less creative because they stopped listening. Everyone should know that their opinions are taken in consideration seriously.

Innovation needs time and, most of the time, it is an iterative process: an idea leads to a prototype, then again and again and then to the final product. People should have time to think and understand their role and the project, and, as a result, it will lead to something novel. However, care should be taken not to get lost in an infinite creative loop and never finish ;)