Agile Development - Weekly Planning

Posted by on December 24, 2010

Make the Right Moves Each Step of the Way

The premise that software projects cannot follow a fixed plan and expect to succeed due to its complexity, is the basis of agile software development. We have to make course corrections each step of the way. However in agile projects, we can get lost in a set of practices, and miss the element of course correction. This is an attempt to emphasize the importance of investing time and effort into making the right decisions for course correction throughout an agile software project.

This article is not only about projects that follow an agile methodology like Extreme Programming or Scrum religiously, but this is applicable to any software project that has an agile nature, where the project team believes in making incremental changes and frequent course corrections.

A project team should have a weekly planning session with the participation of project leader, customer or customer representative, developers, and QA representatives. The weekly planning meeting should be an investment in time and effort, that would help the team make the best possible moves for the week. Although hours spent in meetings may sound like loss of productivity, the benefits that a project can get from properly conducted planning sessions is immense. Such sessions would help iron out ambiguous or vague requirements, help come up with proper design solutions that would avoid the need of rework, help breakdown stories into detailed tasks and more accurate estimates. Insight gained during such sessions of analysis and assessment is invaluable when deciding on the best possible course for the week.

The team should pick stories based on priority for the week, and for each selected story perform the following tasks:

  1. Analyze requirements in detail.
  2. Come up with a solution
  3. Come up with a detailed task breakdown
  4. Estimate effort for each task in the story

The outcomes for each selected story should be tracked on a mind map (this can be a single sheet of paper). This mind map can be used by developers as a reference. This will also be a valuable tool to organize thoughts, and will be useful for reference in future.

Read the full article

Facebook users, why it’s worth looking at Twitter

Posted by on May 9, 2009

It takes a while to get the hang of Twitter. For a first time user, it is not obvous how to use Twitter effectively. I have a few friends who are somewhat active on Facebook, but have inactive Twitter accounts. This post is an attempt to compare Facebook and Twitter, show how Twitter is different, and hopefully convince some of my friends to be active Twitter users.

Facebook is a social network with a lot more features than the simple Twitter. Other than that, I see one major difference between the two. On Facebook one can add another user as a friend only with that user’s authorization. The default behavior on Twitter is to let anyone follow anyone else’s updates. This fundamental difference has resulted in me using these two social networks in two different ways. Majority of my friends on Facebook are my existing friends. I have made very few new contacts using Facebook. I use Facebook mainly to keep in touch with my existing friends. The conversation there is casual.

I use Twitter differently. Only a few of the people I follow on Twitter were known to me before.
On Twitter, I follow a lot of people in the software industry. Although I Tweet about personal activities, the focus of my tweets has mainly been on Software Engineering related topics. I find Twitter a great way to learn about software engineering or any other specific topics of interest.

There is a lot of interesting and well-known people on Twitter. Here’s a list of Twitter users worth following:

Well known personalities in the software industry

Other well known Twitter users I follow

Enrich your Twitter experience using TweetDeck

Although you can always use the simple web interface given by Twitter, you can have a richer experience by using a client like TweetDeck, which is my favorite Twitter client.

TweetDeck is an Adobe Air application and you can install it in a few minutes. It allows you to group tweets. For example you can have a group of favorite users, or have another group with tweets on Twitter that has the words “Unit Testing”. I find this very useful as it’s a great way to know what’s happening right now related to a particular key word.

Follow me on Twitter

The story of software freedom

Posted by on May 1, 2009

I switched from Windows XP on my laptop to the free and open source Ubuntu Linux (vrsion 8.04) about an year ago. Before that I was frustrated with Windows more than once. There were occasional crashings and subsequent loss of data, increased slowness, and vulnerability to viruses. Getting used to Ubuntu was easy, and I could find free and open source software for Ubuntu that met my needs. On Ubnutu, I can do almost everything I did on Windows, and more with less disruptions to my work.

As a beneficiary of “free” and “open source” software, I thought of tracing its history.

Free Software

Let’s try to understand what “free” software is from a layman’s perspective.  In the following video, Stephen Fry presents the argument: if you  own your house, you can improve the plumbing or do any changes you want. Why can’t you do the same to software. Why can’t the community alter and improve software? That is how science works. All knowledge is free all knowledge is shared.

Now let’s look at a more formal definition of free software by Richard Stallman, the president of the Free Software Foundation (http://www.fsf.org/)

Note, the word “free” here means “free” as in free speech, “free” not as in free beer.

Stallman lists the following freedoms that software should have:

  • Freedom 0 - Freedom to run the program however you wish
  • Freedom 1 - Freedom to study source code and change it to do what you wish
  • Freedom 2 - Freedom to distribute copies of the program as you wish
  • Freedom 3 - Freedom to distribute modified copies as you wish

According to Stallman, if one of the freedoms is missing, it’s proprietary software; it should not exist; we should reject proprietary software, and replace its unjust social system with the ethical social system of free software.

Is proprietary software really evil and should we reject them?

The argument is that knowledge (like science) should be shared. Good scientists share knowledge, and all knowledge is open and free.

However, software is also a business. Had it not been a business, software may not have advanced to where it is now. Let’s for a moment look at the analogy of buying a car. What if the buyer could replicate the car and freely distribute clones. If it were possible, the auto industry would collapse. Therefore, if we allow the sharing of software, the business model of selling or renting software would fail. The ability to easily replicate software mandates this restriction of freedom.

Could there be a better software business model that allows freedom, as well as generates revenue. Yes. The commercial value in the software industry has started to move from the product to related services like technical support, trainings, customizations of the product.

“…  software itself is no longer the primary locus of value in the computer industry. The commoditization of software drives value to services enabled by that software. New business models are required. “ - Open Source Paradigm Shift

In my view, in the coming years, we will see a competion between these two business models. In some cases, proprietary software would find it difficult to compete with free and open source software with large developer communities, and service based business models, while in some other cases community based open source software that fail to attract large developer communities could lag behind proprietary software. My view is that free and open source software and proprietary software could co-exisit to provide maximum value to consumers.

Open Source

Now let’s look at how the term “Open Source” originated.

“The Open Source Initiative is a marketing program for free software. It’s a pitch for “free software” on solid pragmatic grounds rather than ideological tub-thumping. The winning substance has not changed, the losing attitude and symbolism have.” - Producing Open Source Software , Karl Fogel (http://producingoss.com/)

The difficulty to market “Free” software in the business world resulted in the origination of the term “Open Source”.  However it has resulted in some friction between the Free Software movement and the Open Source movement.

The following videos discuss the switch to open source.

Related videos: Revolution OS

Follow me on Twitter

Book: Super Flexibility for the Knowledge Enterprises

Posted by on February 14, 2009

I recently read the book: “Super-Flexibility for the Knowledge Enterprises” by Homa Bahrami and Stuart Evans. It discusses the concept of a knowledge enterprise being super-flexible to harness the inevitable uncertainty. This is highly applicable to start-ups that have to go through uncertain periods as well as to any organization being affected by the current economic environment.

The book is not an easy read, and it does not provide prescriptive actions similar to 10 steps to building your start-up. However, it has a lot of insights that you would be able to apply, if you read carefully with your organization in mind.

Follow me on Twitter


Pain in fingers with computer use

Posted by on January 27, 2009

Do you use your laptop as a desktop? Then be aware!

How convenient is it to use a laptop instead of a desktop computer? The amount of space it saves is amazing, and when you use the same computer both at home and at work, there is no need to synchronize data. I stopped using a desktop when I bought my first laptop about four years ago. Since then I have been using my laptop as a desktop, working on it many hours a day.

Recently I started feeling tingling sensations in my fingers and occasional sharp pains in my hands while working on the computer. When I searched the web, I realized that I had the symptoms of Carpal Tunnel Syndrome. Further look up revealed that I have been having a poor posture while working on the laptop all these years.

The correct way to use a laptop as a desktop

The website: http://ergo.human.cornell.edu/culaptoptips.html gives the following advice about using your laptop as a desktop:

if you use your laptop at work as your main computer you should:

  • position this on your desk/worksurface in front of you so that you can see the screen without bending your neck. This may require that you elevate the laptop off the desk surface using a stable support surface, such as a computer monitor pedestal.
  • use a separate keyboard and mouse. You should be able to connect a keyboard and mouse directly to the back of the laptop or to a docking station”

The correct way to use a mouse

After switching to the recommended set-up, I could feel a slight improvement in my condition. However, the issue did not disappear, especially on the right hand which I use to hold the mouse. It seemed that mouse use contributed a lot to my condition. Further search brought me to the an article that described how to use the mouse properly:

I started practicing the advice, especially when using mouse buttons, and although it took some time to get used to, it further improved my condition.

However, the discomfort returned with many hours of mouse use, that prompted me to look for ways to use the comptuer with minimum use of the mouse.

How to use computer with minium use of the mouse

Gmail shortcuts

I spend one to two hours everyday on my email using Gmail as the mail client. I learnt that it’s in fact possible to configure Gmail to use keyboard short cuts. This is a very convenient way to use Gmail. Even when you have the option of using the mouse, using Gmail shortcuts can be faster.

Mouseless Browsing

I use the web a lot as well as use a lot of hosted services with Firefox as my browser. The Firefox plugin: Mouselss Browsing allows one to perform almost all operations on the browser without using the mouse. Although it takes a while to get used it I found it quite effective.

Exercises

Although all these changes helped, they did not completely cure me. So, I bought the book: Conquering Carpal Tunnel Syndrome from amazon.

I am glad I bought the book as following the simple exercises mentioned in the book gave me instant relief.

I continue to follow the exercises and use correct posture when I work at the computer. Even though I still have a little bit of pain, it is gradually reducing, and it has not prevented me from spending many hours at the computer.

Follow me on Twitter

It ain’t a Unit Test just because you used xUnit

Posted by on December 2, 2008

Test Driven Development (TDD) is great. When I started unit testing and TDD with JUnit about six years ago, it was a relatively new concept. I was impressed by the way it helped development, and led to developing better code. However, it’s only now that I realize how little I knew about unit testing back then.

I can remember an XP project where we developed an enterprise application which had two layers of session beans, and entity beans that got persisted in an Oracle database. We used to have unit tests (that’s what we called them) testing all layers, accessing the session beans and propagating all the way down to the entity beans and to the database. As a result of testing all layers, running the whole suite of tests took us about one and a half hours. We were not convinced that our so called unit tests added any value to the project as it took us so much time to use them properly. So we ended up running only groups of tests together, and not the whole suite.

Recently I stumbled upon an article by Michael Feathers that literally describes the same issue we faced. He lays down the following rules:

A test is not a unit test if:
1.It talks to the database
2.It communicates across the network
3.It touches the file system
4.It can’t run at the same time as any of your other unit tests
5.You have to do special things to your environment (such as editing config files) to run it.

The main takeway from this is that the purpose of a unit test is to test the functionality of a particular unit of code. It need not test all the layers of functionality upon which the class being tested depends (e.g. entity beans, databases etc.). In our case, we could have used mock objects to separate the business logic from the underlying persistence layers. This should have allowed us to simply test the business logic of our classes using unit tests without effectively writing comprehensive but bulky functional tests. We could have defined our classes with dependency injection in mind. Dependency injection is the practice of writing testable code by separating code for object creation and business logic, and passing all dependent objects through the constructors of objects.

The Google tech-talk below provides a great explanation of this concept:

So, just because you use an xUnit framework and write automated tests for your classes, they don’t necessarily become unit tests.
Bookmark and Share

Are XP User Stories the same as Use Cases?

Posted by on November 30, 2008

A topic which often surfaces in discussions about XP is, whether Stories in XP are the same as Use Cases under a different name. Apparently, they seem to be the same. However, if you analyze a little deeper it’s possible to identify subtle differences between the 2 approaches.

In my view, the main difference is their purpose of existence. The main purpose of a user story in XP is to identify the scope of the project as early as possible and to track project progress. While a use case tries to capture requirements at the required level of detail. The XP approach is to have the story defined in simple words and to get more details from the customer before development starts.

User Stories in XP

  1. Purpose: Estimation, identification of scope early, and tracking progress.
  2. Characteristics: Simple; any customer visible functionality.
  3. Approach: Meet customer face-to-face and get details before implementing.
  4. Suitability: Projects that need early implementation.

Use Cases as used in the Unified Process

  1. Purpose: Describe all tasks that users will need to perform with the system.
  2. Characteristics: Can be scaled to have many details; functional and behavioral requirements.
  3. Approach: Gathered mainly initially (inception & elaboration phases).
  4. Suitability: complex large projects.

Bookmark and Share

Agile Testing

Posted by on November 23, 2008

Today I watched a talk from the Google Tech talk series by Elisabeth Hendrickson on YouTube. This talk provides a good overview of testing in an agile project. She talks about:

  • Agile methodologies in general
  • Test driven coding
  • User stories and acceptance test cases
  • Documenting test cases
  • Testing when all features are not complete.

Watch Video:

To understand this talk, it requires no previous knowledge of agile methodologies as the presenter starts with an explanation of agile methodologies.

We adopt some of these practices at OrangeHRM, which uses a hybrid process that includes chosen practices from both agile and plan-driven methodologies. I am planning watch the whole video again with the team and have a discussion. It’ll be interesting to identify how we could further improve the way we do things.

5 Qualities of a Customer for Software Project Success

Posted by on November 20, 2008

The search for the so called “silver bullet” or the cure-all in software development has been there for ages. Many methodologies were developed, each claiming to be the solution. However, still there is no one universally accepted methodology that can solve all the inherent issues in software development. While all these approaches try to find an ideal development methodology for success in software projects, an important variable is usually forgotten. That is, the role of a customer in the success of a software project.

A good customer has an enormous impact on the success of a software project. A bad customer may fail a project which has the best engineering and project management skills.

The acronym CRACK 1 represents 5 qualities of a good customer (or customer representative).

  • Collaborative, and willing to work with the project team toward the same goals, initially with requirements, and later with deployments and any integrations.
  • Representative of the end users of the software, and is able to speak on behalf of them.
  • Authorized to make decisions that have a significant impact on the project. If the customer is not authorized, there could be delays in proceedings until the necessary approvals are received.
  • Committed, willing to see the project to the end, and willing to put effort to eliminate inevitable hurdles that software projects face.
  • Knowledgeable about the organization and the requirements.

Here’s a comparison of two customers I have worked with in the past (Each quality is scored on a scale from 1-5, 5 being excellent)

Customer #1 (project #1) Customer #2 (project #2)
Collaborative 5 - Communicated the requirements clearly including the required screens. Replied to emails fast. Always clear in communication. Available over phone when needed. 1 - Sometimes took weeks to reply to emails. Rarely available for calls. Vague requirements. Did not give timely feedback to specifications and early releases of the software.
Representative 4 - He was in a position to directly answer questions about requirements based on his understanding of the end user requirements. 1 - He had to go back to the end users and come back to us to answer questions about requirements. The answers usually were copied and pasted from answers received from end users.
Authorized 4 - Had authority. 4 - Had authority.
Committed 5 - Committed to make the project a success. 2 - Partly committed. The project was a low priority among other commitments.
Knowledgable 4 - Had a good understanding of the end user needs and the needs of the company. 2 - Did not have much understanding of the end user needs.

Project #2 continued to be in an uncertain state with periods of inactivity and late change requests leading to indefinite delays in project completion. Although Project #1 had its share of issues, most the issues were related to engineering (e.g. performace), and with a little bit extra work, the team was able to overcome them.

It’s good to know what sort of a customer you’re dealing with before you start a software project. Although most of the time we don’t have the luxury to pick and choose customers, knowing the customer characteristics makes is possible to do the necessary precautionary process adjustments.

[1]Boehm, Barry, and Richard Turner. Balancing Agility and Discipline. Addison-Wesley, 2006.

Bookmark and Share

Book to read: The 7 Habits of Highly Effective People

Posted by on November 17, 2008

Dr. Stephen R. Covey’s bestseller: The 7 Habits of Highly Effective People presents a simple principle centered approach for solving personal and professional problems. If you want to build a highly effective team at work, I recommend you expose your team members to the invaluable material in this book. The book discusses how to be effective in leadership, time management, negotiation, and most importantly, how to be a better person.

A few years ago, I read the book and used its material in the trainings I conducted for my team of software engineers. Now, it’s time to have a similar training at OrangeHRM (where I work now). So I started reading the book again to refresh my memory. As I move from habit to habit, I plan to blog about how to apply the principles in a software company.