Know more and connect with me on [Linkedin Profile].

Friday, December 14, 2007

New Google Group, SPEG

I have just created a new google group to share software process engineering and management issues. To join, visit You can also use the box below for subscription.

Google Groups

Monday, November 26, 2007

Software Reuse, an Integrated Approach

>>This article is published at SEPG Egypt at

Software reuse is a comprehensive issue; without taking into account all perspectives, it could fail. Here we are trying to look at different angles and highlight several issues.

Business View:

First, senior management should take reusability into consideration. Loading technical team alone with the reusability efforts will not normally succeed. It should start from top management. As opposed to seeing the business as developing a certain product for some customer, senior management should look at the business as developing an application family to satisfy different client’s needs. The business focus here will affect all efforts after it. As example, HP shifted their thinking from developing a new printer driver for each new printer to developing a reusable family of drivers. The result was a huge saving in cost and improved quality.


After focusing on a new business perspective regarding what is really required, reusing is shifted to create requirements with focus on reusability. Requirements even could be restated to match certain reusable components features. Requirements analysis phase will follow by creating use cases focused on variability points. The following example will explain the concept of determining variability points:

Vacation Request:

1. Employee requests vacation from his direct manager

2. Direct Manager retrieves balance from Human Resources

If there is no balance

3. The vacation request is rejected

If vacation is more than 3 days, Direct Manager forward to Senior Manager

4. Senior Manager approves or rejects the vacation request

If vacation is more than 3 days

5. SM needs to receive email notification

6. Direct manager approves or rejects the vacation

In some companies they don’t escalate to senior manager the vacation for whatever reason. The Direct manager always has permission to approve or reject the vacation request. We will mark variability with curly brackets {}.

1. Employee requests vacation from his direct manager

2. Direct Manager retrieves balance from Human Resources

If there is no balance

3. The vacation request is rejected

If {StrictSMFollowUp}

If vacation is more than [ApproveLimit] days,

4. Direct Manager forwards to Senior Manager

5. Senior Manager approves or rejects the vacation request

If vacation is more than {NotificationLimit} days

6. SM needs to receive email notification

7. Direct manager approves or reject the vacation

The StrictSMFollowUp is variable; it could be true or false based on the way the organization work. In our example, we classified the businesses that will use our application, some have strict SM follow-up, and others have not.

ApproveLimit states the max number of days Direct Manager allowed to approve without consulting Senior Manager. NotificationLimit states the max count of days that need no notification.

The above is just an example to identify variability points in the requirements. We can use many ways to mark variability in the requirements that makes sense for our own applications.

Variability Implementation:

  • Inheritance: As an example, in a typical application we wanted to support different database servers. You can select the basic reference dbase and create classes to implement it. Each other new dbase could inherit from the base classes and override essential operations. As the basic SQL construct are the same between databases, you should centralize the variability in specific classes.
  • Parameter: You can have pages or screens with customization parameters. Administrators have the permission to customize the system. As example, the timeout of waiting the response from the external bank server.
  • Configuration: In many cases you can use extensive configuration files to adapt the behavior of the system. In some systems you can even specify a complete alternate component through the configuration file. As example, specifying another XML parser. In this case, your application should use standard XML parser interface and the new parser should implement the same interface.

Architecture and Design:

Building the architecture and design in a way that makes configurability and reusability easier is an important issue. Layered architecture and components based design make it easier for you to achieve better designs.

Focusing on using known architecture and design patterns will make it easier for you to build state of the art architecture and design. Explaining patterns is outside the scope of this article, but some references will be listed in the references section.

Reusable Asset Library:

Having a reusable assets library with processes that define how to reuse a certain component, how to add new component and how to update existing component is important of reuse success.

A traceability table that traces each component version with which products are using it is required to guide in updating the applications with new components updates if necessary.

Asset library should be organized so that each one item should has:

  • Version number. A unique version number to the library item.
  • Status: is it ready for reuse or still in beta state.
  • Bin reusable component (if exist) such as DLL files or OCX files.
  • Documentation: A simple document that specify how to use. A sample code will help component users to use it effectively.
  • Release notes: This can specify what bugs are solved, new features, or knows issues compared to the earlier version of the same component.
  • Source code: if applicable.

Process Support:

We will describe basic processes to help managing the reusable asset library. We will not state the details of each one.

  1. Add new reusable code item: The steps needed and standards that should be satisfied in the new reusable code item.
  2. Delete reusable code item: Remove a typical item as it is no longer used nor supported.
  3. Update reusable code item: A new revision is created and needs to be available in the repository.
  4. Use typical reusable code item: reusing should be organized to know the full dependencies between reusable code items and applications that use it.
  5. Requirements development process should have activities for requirements development to guide in stating techniques and methods to state the variability points.
  6. Architecture and design process should be stating using typical techniques to help focusing on reusability.
  7. Testing processes should take into account testing variability points comprehensively.

Before adding a new version to the library, an extensive test and peer review is done to make sure the component is meeting quality requirements.

A common challenge is what to do with a large set of reusable code, should we create a project to organize them and add them to the new empty asset library? Or just focus on the new reusable components?

Without first closing the sink that continuously diminishes reusable code, we will always have the case of old code that need cleaning to be added to the reusable code repository. So first establish a system to close all waste holes and in parallel clean up and restructure old code.


Whatever your company size and experience are, you can not simply order reuse or install it at once and expect it to happen. Rather, you should encourage reuse by following many steps as described in this article. Although reusability conceptually is a simple idea, many efforts should be done to realize its benefits. This article was an attempt to highlight many of these issues.


  • Software Reuse, Architecture, Process, and Organization fir Buisess Success by Jacobson, Martin Griss, and Patrik Jonsson
  • Design Patterns, GOF, by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides.
  • Pattern Oriented Software Architecture, a system of Patterns, Volume 1 by Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sornmerlad, and Michael Stal.
  • Patterns of Enterprise Application Architecture, By Martin Fowler, David Rice, Matthew Foemmel, Edward Hieatt, Robert Mee, Randy Stafford.

Wednesday, November 21, 2007

Presentation Skills Observation

This is my hints and observations after attending a one day ITIL awareness session and saw many speakers at the same day.

  1. Don't ever joke or even smile. Be very serious. People expect being very serious.
  2. Don't read slides. You are expert in the area of presentation, isn't you?
  3. Keep a distance between you and the audience. You are the teacher and they are the students, at least in this session. Don't let them feel your are friends or you are their servant.
  4. You are educating your audience. You many even challenge them by questions to keep them awake.
  5. Asking questions should be at the end only.
  6. Don't ask after each slide, "Is it OK to move to next slide?" Move on, you are the teacher. Some attendees are not prepared enough to follow you, you can't slow down much for them. The other good guys will suffer.
  7. Use attractive images from nature and may be human pictures, of course if related.
  8. Use wisdom quotes. It will inspire people.
  9. Don't ever show you are tired or disappointed. Be very confident and serious. If you feel that, show the reverse.
  10. If you are asked to give them the presentation (i.e. PowerPoint presentation file) (and there is no problem). Give it to them but let them feel a favor. I mean, let them feel they are getting a valuable asset.
  11. Don't ever slow down. You should move on to keep the flow of conversation. and to keep time. Keeping time is your own responsibility. Everyone will blame you if you did not.
  12. Don't ever give a speech in a subject you feel you are not expert in it.
  13. You own the slides. Even if prepared by someone else, you must tailor it, practice it and test yourself before the training session.

My hints focused on giving training or session to strangers that most of them you are seeing them the first time. Many of these points are not applicable to in-house sessions/training where everyone know everyone else.

ITIL Awarness Session by SECC

Yesterday, SECC organized a session about ITIL in ITIDA building in Smart Village, Cairo, Egypt.

Here are some of my personal notes, I just wrote it as it may be useful to someone else.

  1. ITIL have certified training for individuals, no certification per the organization. However, you can be certified by ISO20000. ITIL will help you in your certification. See
  2. HP helped Microsoft to has its own framework, called: Microsoft ITIL based framework (MOF), see:
  3. HP has their own efforts based on ITIL, "HP ITSM Reference Model v3.0".
  4. HP provides ITIL help and automation tools: Service View tool that let you understand your infrastructure dependencies. They have also Service Level Agreement monitoring software. I expect them to have many other tools.
  5. HP has their own way to assess ITIL implementation level.
  6. The importance of proper training. The presenter presented a very nice graph representing the transformation of data, to information, to knowledge to wisdom through professional training. He assumed written words in books like data and the experienced talented trainer help move the audience very fast to wisdom.
  7. Start (ITIL implementation) with the part in your organization that has the most pain. I generally like pragmatic approach!
  8. Let process drive the tools not the reverse. The tool buyer can push you in the wrong direction, be careful, I warned you.
  9. Deployment planning is so important to avoid service interruption.
  10. For me, the real experience of Mansour Auto and Orascom was exciting, more than the theoretical description of ITIL.
  11. In a big organization, agreeing on service level between internal dept is important in your excellence journey.
I recorded many notes about presentation hints, but I will post it in a separate post.

Amazing Iceberg

Many problems that could seem simple actually very big and requires a lot of efforts to be resolved. In some other cases, complex problems could have simple solutions.

I saw this picture, or some one like it, at a presentation about ITIL organized by SECC at ITIDA building in SmartVillage yesterday. See

> The image is from :

Sunday, November 18, 2007

A Definition of Best Practice

  1. The application of common sense; not rocket science
  2. Proven and practical activities which are in common use
  3. Replace "Chaos", "random results", or "best effort" with "order", "predictable quality" and "optimization"
  4. And by the way, when was the last time you needed an ROI justification to apply common sense?

Copied from public presentation.

My New Nokia N800

I am fond of Nokia N800 Internet tablet, but it is not yet available in Egypt. I asked friends in KSA, Dubai, and Kuwait with no success. I finally decided to buy one from but amazon does not ship outside USA.

Look at Nokia N800:,n800

The solution came finally few days ago from one of my friends. Aramex has a service called Shop&Ship. They will give you two addresses, one in USA and the other in UK. If you ordered any thing from USA, give the seller your address in USA. Once Aramex receive your shipment, they will re-ship it again to you at your home country. Look at:

The service was very exciting and finally I got my Nokia N800 Internet tablet.

As Nokia N800 is Linux based, you can download the source code and find tons of free open source programs at

Fired or Not?

In the case of a manager leaving his position, if you want to know if he is fired or moved to a better position, notice his speech in his farewell:

If he is not fired:
  1. He speaks about his past achievements with pride.
  2. He speaks about his future with enthusiasm and excitement.

If he is fired:
  1. He speaks about past achievements with a pity tone.
  2. He speaks about his future with doubts and almost have no concrete or exciting plans.

Process Improvement, a Parallel Documentation Project

One of the pitfalls of applying process improvement is to stay using the same old process and having a parallel project that just produce the required documentation. Project documentation is actually important but it is just documentation.

To make things clear, here is an example. If you developed a design document early as opposed to documenting the design after the actual implementation. The process improvement approach will change the way you do your work and will direct you to think and plan using design document. You will make reviews and inspection on time per the defined process. The other approach lets you developer design in the same old way and before QA audit or before appraisal, you will create a design document.

Thursday, October 11, 2007

SNEEZES Around the World

This is very interesting article about sneezes in different cultures. I enjoyed it.

It is very interesting for me to find other cultures says something like Muslims in case of someone sneezed. It is something like international culture. In English, "God bless you" or "Bless you".

Wednesday, October 03, 2007

8 signs it's time to change jobs before you get fired

This article about "8 signs it's time to change jobs before you get fired" is interesting from the point that, these signs - from employee point of view - let him left his company. I know many development managers who suffer from turnover. This article could help them avoid making things that enforce employees to seek new workplace.

I hope it is useful.

Wednesday, September 26, 2007

Pidgin, a nice chatting tool

I really hate distractions and interrupts, but nowadays I am very busy that I begin to lose contacts with my close friends. Chatting although annoying to me but at least an initiation channel that could lead to phone calls or meetings. I found pidgin ( a nice tool that can read many protocols at the same time. Here a list of supported protocols:

  1. AIM
  2. MSN
  3. Google Talk
  4. ICQ
  5. Yahoo!
  6. IRC
And other protocols also:
  • Groupwise, Bonjour, Gadu-Gadu, MySpaceIM, QQ, SILC,SIMPLE, Sametime, XMPP, and Zephyr

Pretty more than I need, I just have accounts for Yahoo, Google, and hotmail. Now I am connecting to all my friends at once.

I want also to mention that, it is a GNU software. Enjoy the open source movement!

Tuesday, September 04, 2007

Move Outlook Data Files

If you sadly have to use Outlook. You should save your emails data location to a convenient place so you can easily backup and restore them.

Here is a useful link:

Thunderbird and Firefox Profile Location

I like to have all my data at a convenient place, so I can easily backup and restore it. Nowadays email data is crucial to any person. I hate the idea of saving my valuable (I hope so) emails in some cryptic location under C:\Documents and Settings. I want to put my profile on some other location like d:\docs\D:\docs\Thunderbird\my-profile-name.

Here URLs that could help you do it easily.

As a simple example. My Thunderbird profile file is located at: C:\Documents and Settings\My Account Name\Application Data\Thunderbird\profiles.ini

I have modified entries in the file to be:

Of course make sure your profile is copied to that location.

Sunday, August 19, 2007

Artistic Style 1.21

Artistic Style is a source code indenter, formatter, and beautifier for the C, C++, C# and Java programming languages.

When indenting source code, we as programmers have a tendency to use both spaces and tab characters to create the wanted indentation. Moreover, some editors by default insert spaces instead of tabs when pressing the tab key, and other editors (Emacs for example) have the ability to "pretty up" lines by automatically setting up the white space before the code on the line, possibly inserting spaces in a code that up to now used only tabs for indentation.

Since the NUMBER of space characters showed on screen for each tab character in the source code changes between editors (unless the user sets up the number to his liking...), one of the standard problems programmers are facing when moving from one editor to another is that code containing both spaces and tabs that was up to now perfectly indented, suddenly becomes a mess to look at when changing to another editor. Even if you as a programmer take care to ONLY use spaces or tabs, looking at other people's source code can still be problematic.

To address this problem, Artistic Style was created - a filter written in C++ that automatically re-indents and re-formats C / C++ / C# / Java source files. It can be used from a command line, or it can be incorporated as classes in another C++ program.

Sunday, August 12, 2007

Fully Elaborated Documents As a Completion Criteria ...

In May 1988, Bary W. Bohem published an article about Spiral Model. He described the available, at this time, software models and write some of its advantages and disadvantages. I liked the following paragraph from his article.

"A primary source of difficulty with the waterfall model has been its emphasis on fully elaborated documents as a completion criteria for early requirements and design phases. For some classes of software, such as compilers or secure operating systems, this is the most effective way to proceed. However, it does not work well for many classes of software, particularly interactive end-user applications.
Document driven standards have pushed many projects to write elaborate specifications of poorly understood user interfaces and decision support functions, followed by the design and development of large quantities of unusable code."

It is risky to treat software process improvements initiatives as just a punch of documents as Bohem stated above.

Saturday, July 21, 2007

Create your First Mobile Application in 1 Hour!

Recently I bought a new mobile, Nokia E61i. It is actually not just a mobile, look at:

I want to create my first mobile application on it, I know I have the choice between C++ and Java. I want to start the easy way so I decided to give java a try.

I tried a Netbeans Mobility Pack. E61i is compatible with CDLC 1.1 and MIDP 2.0, so install the CDLC version.

Using graphical drag and drop I have created my first application very easily, I encourage everyone to try it.

Monday, July 16, 2007

FireFox Profiles

I access the Internet using my Laptop from work, home and at many clients sites. I always adjusting FireFox proxy settings to match my current location settings. I want to have an end to this repetitive task. I found that FireFox can have multiple profiles feature. So I can have profile for "Home" with direct connection to the Internet and "Work" configured for the work proxy and so on.

I found the solution at:

I just added -ProfileManager switch after the FireFox exe name. When I start FireFox you I see the following dialog.

So you can manage as much profiles as you want.

Friday, July 13, 2007

Software Process Improvement

In this article, the author highlights a software process improvement approach that works effectively in his opinion. Next, he will highlight the importance of having central knowledge base to store organization assets. Finally the IDEAL methodology is briefed.

SPI in a nutshell:

For Software Process Improvement (SPI) new comers, process improvement seems to be confusing. In the following paragraphs I will try to explain process improvement intent and rational behind it.

Any software Company has 3 basic elements that work together to develop software products. They are People, tools and processes. People use tools in a certain way to develop products. People need leadership, ethical management, and rewarding. Tools require proper selection and training to be used effectively. The remaining part is the way people collaborate together to plan and execute development projects. The way people collaborate and use tools is called processes. Software process improvement focuses on improving the management procedures used by team members to manage work tasks and the way and order tools are used.

Still confused! Process improvement can be called management practices improvements. As many people believe they lack proper management to their human and non-human resources. SPI helps you learn how to manage your team members, projects and tools in an organized and scientific way.

First Steps in SPI:

Every company has processes, even if large parts of it are not written and not consistently followed. Regardless of your organization size and characteristics, if you have developed products, then you have used some processes to develop it, even if known verbally.

The first days of process improvement should focus on discovering the current way you manage your projects, whether they are good or bad. Start by documenting your organization structure, job description, responsibilities, the processes/procedures used in the company, and any assumptions in action. Now you have something to start improvement efforts.

Second step is to focus on your business needs and critic your system. Document your current problems, challenges, advantages, disadvantages, and areas you believe you should improve.

Now you have basis to start with and rational behind your SPI activities. Trying to ignore your company culture, strengths, weaknesses and experience in doing software development in favor of a suggested magic solution that will overnight convert you to a mature company is unrealistic.

The idea is to discover your system, document it, and retain your strengths. Study your current problems and your business needs. Learn from other’s method of doing development, and then find ways to improve your weaknesses.

What if you reuse ready made process descriptions to move faster and use a reliable quality system that is proven to be perfect? Sure you will start fast but in the wrong road. It is not yours, so the gaps between what is been already documented and the actual practices will be widened. Even if you enforce team members to follow it, they will find ways to avoid it.

And what is next in SPI?

Most of the companies, probably your company have the foundation of project management. So treat software process improvement as high priority project. Define requirements (i.e. what to be achieved), tasks, assign resources, and define budgets. Then track tasks completion and cost. Make the project as a 6 months project, and at the end of the project evaluate your position and plan for the next 6 month project.

Software process improvement is a continuous effort, so the 6 months projects will never end. You should move from initial software process improvement to CMMI level 2 then to higher levels. The only level that you can stay at is level 5. Level 5 is the “Optimizing level”, which means continuous process improvements.

Start by documenting your best practices that work great with you, the current processes and procedures that you use, then document current organization structure, job descriptions, and document all templates used in your company. It is easy to create Plan templates from the best plan you have.

Define clearly what is good in your organizations and what works bad, what are the future challenges you have to meet. Define your business goals and how they will affect your current processes.

Make 3 or 4 iterations per project, which is 6 months time frame. In all iterations, follow the IDEAL model. Although there are several improvement models that you can use such as PDCA (Plan, Do, Check, Act), PDSA (Plan, Do, Study, Act) or Six Sigma DMAIC (Define, Measure, Analyze, Improve, Control), I suggest IDEAL for its comprehensive guidance.

Organization Repository:

If you don’t have a content management system hosted in your current Intranet, you should have one very fast.

Many organization experience, culture, knowledge are stored in the memories of team members and on many emails stored on personal computers. Some have file server, but have never being up to date and are usually incomplete. File server in my experience is not efficient in organizing organization assets. It is inefficient to browse for a certain document and you can’t effectively search.

Organization should move from vocal knowledge to written knowledge. When human invented writing, it was the first time people can share knowledge between them even if they have never met. Your organization should have central repository to host all of the company documents, all project artifacts, lessons learned, guidance to current and new employees, and all digital asset. By doing so, you will build a real organization asset that foster team learning, sharing, and reusing across your organization.

Happily there exist many open source and commercial systems, selecting which system to select is a critical task and beyond the scope of this article.

IDEAL brief description:

Here is a brief about IDEAL, for full description look at:

IDEAL is a model for continuous improvement. It helps by describing the main steps necessary to establish a successful improvement program.

IDEAL is acronym for Initiating, Diagnosing, Establishing, Acting, and Learning.

I – Initiating: Laying the groundwork for a successful improvement effort.

  • Stimulus for change: Change for the sake of change rarely results in significant improvement, so state business reasons for process improvement. When the business reasons for change are more evident, there is greater buy-in throughout the organization and there are greater chances for success.
  • What benefits (such as return on investment or improved capabilities and morale) will result?
  • Sponsorship: It is necessary to maintain sponsorship levels throughout an improvement effort. Sponsors can be most effective if they give personal attention to the effort and stick with it through difficult times.

D – Diagnosing: Determining where you are relative to where you want to be.

  • Characterizing the current and desired states is similar to identifying the origin and destination of a journey. A good starting point is "stimulus for change" activity in Initiating phase.
  • Develop Recommendations

E – Establishing: Planning the specifics of how you will reach your destination.

  • Set Priorities
  • Develop Approach
  • Plan Actions

A – Acting: Doing the work according to the plan.

  • Create Solution: Write the new process descriptions (or the modifications proposed), templates and procedures that are best guess solution.
  • Pilot/Test Solution: Try executing the process on a pilot project to make sure of applicability.
  • Refine Solution: Once the pilot done, refine per the lessons learned in the Pilot project.
  • Implement Solution: You are ready now to apply the new process changes organization wide.

L – Learning: Learning from the experience and improving your ability to adopt new technologies in the future.

  • Analyze and Validate: In what ways did the effort accomplish its intended purpose? What worked well? What could be done more effectively or efficiently? Lessons are collected, analyzed, summarized, and documented. The business needs identified during the initiating phase are reexamined to see if they have been met.
  • Propose Future Actions: During this activity, recommendations based on analysis and validation are developed and documented. Proposals for improving future change implementations are provided to appropriate levels of management for consideration.

Note: many statements are just copied from “The IDEAL(SM) Model: A Practical Guide for Improvement” at


Tuesday, June 05, 2007

ANT hate white space

I am trying to install Bonita workflow engine, it uses Jonas application server. Jonas requires ANT. I have ANT installed in "C:\Program Files\ant". Bonita gives me very misleading error messages. After some research I got the idea to put ANT in a path without spaces. I moved ANT to be on "C:\ant" and every thing worked fine. So I believe now that, ANT hates whitespaces a lot!

Saturday, May 26, 2007

Open Source Projects Metrics is a new kind of web site, it monitors open source projects, crawl their source code repositories and give you some interesting metrics.

Try JSPWiki (A Java based Wiki) and you will find interesting facts like:
Code Base: 65,670 LOC
Estimated Effort: 16 Person Years
It will cost you $879,389 if the average programmer salary is $55,000. You can change the average salary to your local market salary. I am sure you can save a lot by using open source tools.

Try it at:

Thursday, May 24, 2007

The Three Elements of Communication

Albert Mehrabian stated in his theory that verbal communications have 3 components:
1) words,
2) tone of voice and
3) body language.

He stated that words stands for 7%, tone of the voice is 38% and body language is 55%.

Look at this example: "You are a smart man", you may mean it or mean "you are supposed to be smart", or "you are really stupid", it depends on your tone and body language.

To properly interpreter his theory, apply it specially on emotional expressions, but words alone in factual expressions should express more than 7%.

If you feel a little angry, feel you don't trust the other party, or the situation became ambiguous, it it better to hold a meeting for full bandwidth of communications.

If you feel greatly angry, stop doing anything and relax. don't email, speak, or meet. Just do nothing and you can take a shower if possible. In extreme cases, you can do nothing and relax for a few days.

Friday, May 18, 2007

Thunderbird and Calendar

I am a fan user of Thunderbird, but I was missing a calendar features. Today I am happy to find what I was dreaming of. I found addon that did more than what I wished.

It also exist also a separate application for tasks and calendar if you wish. Enjoy all of these at:

Look at: Choosing an open calendar manager

Wednesday, May 16, 2007

Software Process Improvements. The Fastest Way!

You want process improvement. Let me tell you about the fastest way ever. Just buy that commercial package that has complete Quality System that let you achieve CMMI maturity level 2/3/4/5, whatever you want. Just copy and paste and you are almost done. What is remaining? Just enforce your team to follow the new Quality System processes and you are done. Enforcing them to follow it is not so hard especially if you used the management power (sometimes called sponsorship). Is this fast? yes, but you have achieved nothing.

When you get ready made process description and templates, you instantly have a system but simply isn't suitable for you. A clothes that does not fit your size. After a while, you have a good process and your implementation is always lagging and struggling. Sure your team productivity, creativity and moral will be degraded as well.

To give an analogy. Look at clothes variety. What is the probability of getting a complete formal suite of someone else that match your size, favorite style and color. The probability is very low.
Organizations needs quality systems that is suitable for them. There exist many factors like team size, skills, structure, type of products, ... etc. This makes reusing others processes will not help you, but typically will hurt you much.

Improve your quality system step by step completely synchronized with your actual implementation. Don't start with great process that no one needs to follow.

Copy and paste ready made process description and templates is very easy while applying them in real business life is much harder and tedious.

So, stop using other's processes and templates and develop your own. Time consuming? Yes, but this is the fastest way for real process improvement if not the only way.

Wednesday, May 09, 2007

Is Waterfall Still Valuable?

I wonder if Waterfall methodology still valuable. I see many companies that apply CMMI L2 is just using waterfall. Is it consistent to be a small business and still work with strict Waterfall?

I think many companies are comfortable using waterfall as the artifacts required are classic and generally simpler. One complete requirements document with some revisions based on limited number of change requests. I hope we can move the software industry to use iterative methodologies to increase work progress visibility.

Read more details about waterfall and iterative methodologies at:
Iterative and incremental development
Waterfall model

[Wikipedia quotation]

In summary, the criticisms of a non-iterative development approach (such as the waterfall model) are as follows:

  • Many software projects must be open to change due to external factors; the majority of software is written as part of a contract with a client, and clients are notorious for changing their stated requirements. Thus the software project must be adaptable, and spending considerable effort in design and implementation based on the idea that requirements will never change is neither adaptable nor realistic in these cases.
  • Unless those who specify requirements and those who design the software system in question are highly competent, it is difficult to know exactly what is needed in each phase of the software process before some time is spent in the phase "following" it. That is, feedback from following phases is needed to complete "preceding" phases satisfactorily. For example, the design phase may need feedback from the implementation phase to identify problem design areas. The counter-argument for the waterfall model is that experienced designers may have worked on similar systems before, and so may be able to accurately predict problem areas without time spent prototyping and implementing.
  • Constant testing from the design, implementation and verification phases is required to validate the phases preceding them. Constant "prototype design" work is needed to ensure that requirements are non-contradictory and possible to fulfill; constant implementation is needed to find problem areas and inform the design process; constant integration and verification of the implemented code is necessary to ensure that implementation remains on track. The counter-argument for the waterfall model here is that constant implementation and testing to validate the design and requirements is only needed if the introduction of bugs is likely to be a problem. Users of the waterfall model may argue that if designers (et cetera) follow a disciplined process and do not make mistakes that there is no need for constant work in subsequent phases to validate the preceding phases.
  • Frequent incremental builds (following the "release early, release often" philosophy) are often needed to build confidence for a software production team and their client.
  • It is difficult to estimate time and cost for each phase of the development process without doing some "recon" work in that phase, unless those estimating time and cost are highly experienced with the type of software product in question.
  • The waterfall model brings no formal means of exercising management control over a project and planning control and risk management are not covered within the model itself.
  • Only a certain number of team members will be qualified for each phase; thus to have "code monkeys" who are only useful for implementation work do nothing while designers "perfect" the design is a waste of resources. A counter-argument to this is that "multiskilled" software engineers should be hired over "specialized" staff.

ActiveCollab, Project Collaboration Application

ActiveCollab is an easy to use, web based, open source collaboration and project management tool. Set up an environment where you, your team and your clients can collaborate on active projects using a set of simple, functional tools. 100% free!

My experience installing, using, some advantages and disadvantages:

- Very easy to install especially if you used WAMP to install Apache, MySQL, PHP in one shot. It has simple and friendly installation. After installing it say to your c:\webapps\activecollab, just point your browser to it and the setup page will show up asking you a few installation questions.

- The system is simple and easy to use.

- You can have client companies and as many projects as you need, add users and give them permissions.

- You can add milestones and tasks. Tasks can be related to a specific milestone and assigned to a specific person. The idea of havig deadline to milestones only is simple. Tasks are done or not, no deadline or duration assigned to it. We can name it management by objectives, I think Agile teams will like this simplicity.

- It have a message features which you can use it like a blog. You can add message and anyone can add notes. The feature is totally under control by the assigned permissions.

- You can have attachments, and folders. Files have revisions, so you can track file changes. You can enable comments on files uploaded. This feature alone deserve using ActiveCollab.

- You can search if the simple browsing they have did not help you find what you want.

- Fast, and stable, actually I fond no problem using it.

- Although milestones and tasks are nicely done, you miss having metrics, like task estimates and actual effort spent. But they are working to improve it.

- This is the light version, they are planning to have commercial version, I am afraid in the future that, all nice features to be in the commercial version.

I enjoyed experiencing this tool and hope some of you find it useful.

Thursday, May 03, 2007

Select the Best Wiki, Weblog, Forum, or Podcast

When I try to decide about a new open source product, I get overwhelmed by the number of choices available. Always I have no no guidance on what to choose.

Today I found 5 websites that helped me to know about many alternative products and select the suitable one for my needs.
  1. Select a Wiki with the help of
  2. Select a weblog with the help of
  3. Select Forum with the help of
  4. Select a Podcast with the help of
  5. Select a CMS system with the help of[From a friend comment

Saturday, April 28, 2007

Code Reviews Considered Hurtful!

Code Reviews Considered Hurtful, why?

First, read this link from extreme programming website:

The same principle applies to any project artifact review, whatever it is requirements document, design document or plans. What is we should stress is collaboration on the artifacts with all involved people and all people who could give feedback per their role or experience in the project or similar projects. I wonder why we should replace collaboration with criticism which will lead to non objectivity in most cases.

Per the Agile Manifisto, where people and interactions are given more value over processes, stick to value people and collaboration over criticism. Detect any problems early while creating the artifact other than delay it to review after its creation. By doing so, you will foster a collaboration environment other than a bureaucratic process followers.

Reclaim Your Emails and Address Book!

Reclaim your emails:
I am using gmail for 3 years until now, I am even poping other accounts inside gmail. It gave me consistent view to all my email. I also liked the conversation view very much. But wait, all my data is there, if my account is stolen, all my emails can be misused. I moved back again to read my email using Thunderbird.

1) I am poping all my emails and not leaving it on the server. I am using always my laptop so my data is always with me. Even if you read emails from several machines, you can make the master machine to remove emails from the server while other machines to leave emails on the server. This is not necessarily perfect as accessing it on the gmail, but my priority is to reclaim my data again.

Hundreds of megas and thousands of emails are poped from gmail, a lot of data that should be destructed as it is out of context, gmail wonder why I should every delete emails as I have more than 2 Giga of storage!

Another added benefit from reading my email to my laptop is the contribute ability I have with any open source project like Thunderbird, can you get this benefit from gmail?!

2) I feel a little safe from the risk of my emails gets compromised by security agents or hackers. I have no high security needs but I feel better with it.

Reclaim your Address Book:
I am convinced now to have separate two address books, the one that focused on voice conversations on my mobile and the other that focus on emails and web addresses on My Thunderbird Contacts. Each has its own objectives and limitation.

So now, I am happy I have reclaimed my emails and my address book, but I am making CD backup weekly to protect my data from a corrupted hard disk.

Wednesday, April 25, 2007

So, you want to learn Bookkeeping!

Several years ago, when I was studying stating my own business, I researched to learn the basics of bookkeeping, The tutorial of Dave Marshall helped me a lot.

I advice everyone to have a little understanding of bookkeeping (at least).

CMMI 1.2 Process Areas Table

I like this table which map CMMI process areas in two dimensions, the first is the level and the second is the process type.

Level/Process Category




















Sunday, April 22, 2007

CMMI, Process Should Be Documented at Level2!

Many people think that if you are at CMMI L2, you don't have to have process description. They believe process description is required only in L3.

Absolutely, this is not right. If you look at the Reference Book, at GP2.2 text title "Establish and maintain the plan for performing the process", think a little and remember CMMI is a model not a process, it does not describe exact activities to be done, so don't depend on it as a process. The point is how could you plan the project without knowing the activities done in planning. However the model doesn't leave us to conclude, it states in "Generic Goals and Generic Practices" chapter the following:

"The plan for performing the process typically includes the following:
• Process description
• Standards and requirements for the work products and services of the process
• Specific objectives for the performance of the process (e.g., quality, time scale, cycle time, and resource usage)"

It even states to have measures for the process, stated in the plan:
"Measurement requirements to provide insight into the performance of the process, its work products, and its services"

So prepare a process description and include the level of detail that is suitable for the project, and each project could have his own process description that is suitable to the project type and size. At level 2 you don't have to have organization wide process repository and a
tailoring guidelines, this is required in level 3 and above.

Friday, April 20, 2007

New Ubuntu and Thunderbird

There are two important open source release, here are the links:

1) Ubuntu 7.04

2) Thunderbird 2.0

We are the Web

Do you want to understand what is going on on the Web? What is meant by "Network is the computer"? What is blogging and social networking and how these could affect our lives in the next decade?

Watch it:

Watch it several times, you may stop the music to concentrate on the content.
Still did not get the point, read We Are the Web. Although long but deserve reading.

These clip also could help gain better understanding.

Thursday, April 19, 2007

I am a Little Angry, Stop Emailing and Pickup Phone or Schedule a Meeting

Although I love to respect all people I deal with and very rarely hurts anyone in speech over phone or in a face to face meeting, sometimes I miscommunicate using emails.

As example, If I am making 100 voice conversation, I may go wrong just once. If I am making conversations through emails, I guess I may make 20% bad emails. Why?! This is actually annoying me to the extent of thinking to stop emailing unless really necessary and depend instead on phone.

While browsing my favorite blog feeds, I saw a blog that describes what I was thinking of. Enjoy it in the following paragraphs:

Send: Why Good People Send Savage Emails

By Will Schwalbe — Even the most placid soul can find her or himself in the midst of a full-fledged, take-no-prisoners flame war. One minute you are scoring a minor point, then a few more emails go back and forth, and soon you are choosing the perfect vicious barb to complete an angry screed.

We all know jerks who live for this kind of angry exchange. This post is not for them. This is for those of us who would rather not spend our lives composing savage emails - and who realize the enormous danger they post to our careers. One livid email, especially if taken out of context, can seriously damage your reputation.

Recently, a distinguished UK television producer wrote an angry email to her staff when they had neglected (or purposefully forgotten?) to ask her to sign a birthday card that was to be presented to one of the employees. That peeved email is now enjoying a very active and healthy life online and in the UK press. Perhaps some major aggravation was the spark for the boss’s intemperate email outburst? No one will ever know or really care. The birthday card email lives on forever.

So why do angry email exchanges happen to even placid souls?

Harvard psychologist Dan Gilbert, author of Stumbling on Happiness, wrote the following New York Times Op-Ed about conflicts around the world. It seems to apply equally well to the subject of flame wars.

“In a study conducted by Sukhwinder Shergill and colleagues at University College London, pairs of volunteers were hooked up to a mechanical device that allowed each of them to exert pressure on the other volunteer’s fingers.

“The researcher began the game by exerting a fixed among of pressure on the first volunteer’s finger. The first volunteer was then asked to exert precisely the same amount of pressure on the second volunteer’s finger. The second volunteer was then asked to exert the same amount of pressure on the first volunteer’s finger. And so on.”

The results were fascinating. The researchers reported that the volunteers typically responded with 40 percent more pressure than they had experienced. Concludes Gilbert:

“Each volunteer was convinced that he was responding with equal force and that for some reason the other volunteer was escalating. Neither realized that the escalation was the natural byproduct of a neurological quirk that causes the pain we receive to seem more painful than the pain we produce, so we usually give more pain than we receive.”

Moral of story? For preservation of your job, your business relationships, and your friendships - next time you find yourself in a situation where the emails are flying fast and furious, do consider that you may be as responsible for the escalation as the other party. When you feel your temperature rising, it’s a good sign that it’s time stop emailing and, perhaps, to pick up the phone or schedule a meeting or just let the issue go. Unless, of course, you want your version of the birthday card email to appear on the nightly news. In that case, in the immortal words of Clint Eastwood: “Make my day.”

Defect tracking tools and waste

Defect tracking tools and waste

Defects are waste. User stories with known defects aren't done and can't be released, they're partially complete work or inventory, and they are waste too. If you're using a defect tracking tool you're queuing up waste and you're inspecting for quality after the code's been written.

Eliminate waste. Avoid queues because they prevent throughput of released software and block the flow of value to the customer. Build quality into the code from the start by fixing defects as you go. To help improve the quality of code, developers should use test-driven development and testers should perform exploratory testing as developers complete vertical slices of user stories. If a defect is found, stop the line and fix it immediately. Don't queue it up.

ahammad notes:
I like this post very much. I like thinking outside the box. Many times we treat our problems as a fact of life. This must end and we should strive to solve our problems. This is why I like the idea of ISO that stress on each defect to has a corrective action and a preventive action. This idea alone could let organization improve very rapidly.

One of the interesting ideas of Lean Thinking is the focus on the principles, focus should be continue to be on the source code. So you stress to develop automated testing even before the development of the task begin. The automated test say the test is failed. Then you develop the code to pass the automated test cases. This is test driven development.

As a programmer, I like the idea to write even your docs in your code! Why not write the design inside the source code comments and with the help of tools you can generate class diagram and documentation automatically from your code. Want to see, try doxygen. It is full featured, reliable, free, and open source.

Even code comments should not be waste. It should be concise, to the point and is not redundant. If you can rename a method or class to be easy to understand without any comment, do it. Comments are not an objective in its own sake, if it does not add real value, it is a waste.

Put customers first and everything else follows

Put customers first and everything else follows

W Edwards Deming said something like:
The real purpose of a company is not to make money, but to create customers who are so pleased that they will continue to buy products.
Don't fixate on sales figures and profits. Get your relationship right with your customers and end-users and everything will follow. Work from the outside, in. Continuously collaborate with your customers and end-users. See everything from their point of view first. Understand value from their perspective. Have your efforts be driven by your customers and end-users. Ask them what they want next and let their requests pull you ahead of the competition.

This is very basic, I see many cases of failures to serve customers well, whatever the customer is a colleage or external to the organization, the same principles should apply.

Sunday, April 15, 2007

My Second CMMI L2 Appraisal

Here are the lessons I have learned from my second CMMI L2 appraisal, not all of them are technical:

1) Let actions speak about you and don't speak about yourself; doings are more respectable than sayings. Most people hate who speak much about themselves.

2) Dictatorship: If you are a team leader and unable to facilitate team discussions or reach consensus, this usually reflect your dictatorship style or the mentality of win-lose. As a team, everyone must focus on win-win relationship. We should believe we are strong because we are different and being different means we have a great chance of building integrated vision.

3) Treating people should be smooth, not just when things are easy but also with hard issues and when we feel angry. IMHO this is the measure of person kindness and professionalism.

4) You can always ask people for annoying things as long as you treat them with great respect and let them understand your intention. As example, if you in a critical meeting, you can ask a person to leave the room, or to turn off mobiles as long as you say it properly. On the other side, some people feel great when they have the chance to hurt other people.

5) CMMI interpretation is quite flexible, you can tailor it greatly. Remember that CMMI is a model not a process. You can use this feature to hurt your business or to help it.

6) Using tools improperly can lead to a very complex baseline taking and reconstruction. So always use tools the right way.

7) Tools come with their own complexity. Use sophisticated tools only to solve complex problems. Generally use the simplest tool that is good enough to manage your current problem. Use the right tool for the right task.

Saturday, April 14, 2007

NetBeans Visual Web Pack 5.5

I was dreaming of an open source Java development tool that let Website programming much easier and mostly visual, this will help juniors and beginners to start developing applications faster. I was dreaming of something like .Net environment, or the Borland DELPHI, but open source of course.

I am very happy to say that tool is already exist, I tried it and it proved very successful. It is the Popular Java tool NetBeans, with the Visual Web Pack.

Download Netbeans, and then the Netbeans Visual Web Pack, many tutorials are exist to help you start very fast, look at

All tutorials are full of screenshots and there are many blogs that share Netbeans experience with everyone. The help exist with the default setup is also very helpful.

It works a little slow on my 512M RAM machine (but OK, it worked just good enough), I think it will be very smooth and fast on 1G RAM.

Remember, everyone needs web development, even for inhouse website to improved knowledge sharing and workflow automation. Try it and share your experience with the world.

Wednesday, April 11, 2007

Task Coach, Gaim (Pidgin), and Subversion Feeds

Task Coach
Screenshot Task Coach is a simple todo manager to manage personal tasks and todo lists. It grew out of a frustration that well-known task managers, such as those provided with Outlook or Lotus Notes, do not provide facilities for composite tasks. Often, tasks and other things to do consist of several activities. Task Coach is designed to deal with composite tasks.

It see full features, try it.

GAIM Chat Client
It is a multiplatform tool that can interface with all popular chat systems like hotmail, yahoo, gmail, AOL, ...
Imagine you can access all your chat accounts from ons tool. I use it and it is worth trying.
Recently Gaim changed there name to be Pidgin, but everything else is the same.


SVNFeed is a Python script that creates RSS feeds of Subversion repository logs. Both remote and local repositories can be monitored. It is helpful to use your favorite Feed Reader product/service to watch source code changes.

Tuesday, April 10, 2007

Download Wikipedia Encyclopedia

Download Wikipedia Encyclopedia

Download full Wikipedia DatabaseDo you know that it is possible to download the entire Wikipedia Encyclopedia to your computer and use it offline. See the click above.