Agile Process - Different Types of Meetings

Daily Work Day SCRUM briefing

  • Please describe what you did
  • If you are blocked, explain and get the team to help

Bi-Weekly SPRING meeting

  • Close the tasks for the prior SPRING cycle
  • Retroactive: What are the lessons learned and what can be improved
  • Add and Edit tasks for the upcoming SPRING cycle
  • Assign Tasks to owners

Running Application on Cloud (1)

Running Apps on Cloud is not new.

The mainframe apps were running as hosted apps.  At that time, hardware business is also software business. The users were using terminals to access their apps.

We later moved to the client/server model. The desktop computing ago come.  Two key technologies enabled this client/server computing: Wintel PC and LAN. The benefit is to empower the end users. 
Later, we found that client / server is a maintenance nightmare.  It is when the client / server model was modified to the "thin client" or to the three tie model.

Web based computing come about the same time.  We then moved the thin client part to web.  The degree of using browser varies.  Gradually people found out putting logic into browser is not a bad idea.  That's where Web2.0 kicked in.

Now, we are in another paradigm swift.  The key driving technology is the network bandwidth is reaching a point to let us to run the apps over Internet. At least, we now know better about mastering it.  Of course, there are computing technologies as well, such as virturalization.

Unit Testing

Unit testing is the test executed by developers.
Unit testing is part of coding.  I learned from day one when my mentor told me at that time when I start my career in software development.
Coding is not done if unit testing is not done.

Unit testing may involve writing codes. We write codes for testing our codes.

In the modern software development tool, unit testing codes can be generated and we can simply run it after coding work is done. It is not always the case, however. 

Unit testing cannot replace system testing.  Unit testing is to test a small unit of the software.  While the unit A and the unit B both pass unit testing, unit A and B may not work together.

Unit testing is important since when we test features or test the integration, the unit testing error may becomes the bottleneck. It introduces higher costs and the delay to the system testing schedule.  A developer should feel shame if an issue is found in the system testing when it can be found in unit testing.

The challenge of unit testing typically comes from the the lack of the testing env. The unit may rely on other units.

Developers do not do proper unit testing are typically not because they do not like to, it is typically due to the overhead on setting up the env.

A unit testing env should be provided to ease the unit test work.

Regression testing

Regression testing is to ensure the software still working as designed.

Since we continue making the changes to software for introducing new features or fixing bugs, the changes may accidentally introduce bugs which cause the other existing features that were working become not working.

Regression testing is the way to detect this type of issues.

Regression testing should be automated if possible.

Ideally it should be executed every day.

The problem needs to be uncovered as early as possible.

The test cases used in regression testing are typically not new test cases.  They are the test cases used in feature testing.

Obviously the test case can become invalid since the product feature may change.  The test case should be associated with the product feature somehow so when the product functionality changes, we remember to up date the regression test.

Here is a good article. - Regression Testing with Regression Testing Tools and Best Practices.  I agree every single word described.

Team Work

Some people are good at finding issues.
Some people are good at solving issues.

Sometimes those people who are good at finding issues cannot show their values as the issues they found are ignored or overlooked by the organization.

Sometimes they are afraid of raising issues and telling others.

Some people good at finding issues but do not know how to express themselves or do not know how to properly express themselves at the right time and in a right way.  They may get some recognitions but won't get the credits.

Sometimes those people who are capable to solve the issues are not solving issues for some reasons, such as lack of the motivation or wrongly assigned to different tasks.

There are people who are lacking self awareness or organization awareness.
There are good observers who can monitor organization and find the above mismatch.

There are action takers who know the above organizational issues and can act on it and fix the organizational issue.

We call those people managers.

From Installation to Provisioning

I learned the concept of provisioning within the past five year.  I do not remember when I first heard of this term. I do not think that I heard the provisioning process in enterprise apps development before.
The provisioning seems a concept borrowed from the hardware business.

I do not know the exact meaning, but based on my understanding, the idea is to enable the various components to work together.

It involves of installing, configuring, deploying, initializing, and removing application components.

This is part of the overall IT automation.  It is a special offering from an enterprise software vendor.

When you buy software individually from different vendors, you have to spend time to make sure that they can work together.  Earlier, various vendors need to work together to collaborate the integration processes and some 3rd party professional services need to participate to make software packages from different vendors work together.

A simple example is to think of the problem in a client server apps.  You install the database and you create users in the database.   You then install the client and configure the connection to the database. Since the database and the client come from different vendors, the installations are separate.  The process of creating user and entering the user in the client is your responsibility.  The vendor providing the client software will need to test and certify the database they are using and document how you can use their software with the database.

With the provisioning process, the installation, creating the user, entering the connection become one process.  You can still enter or override a user, but only once.  The provisioning process does it for you.

This is the power of consolidation and integration.

It is the value the enterprise software vendor can provide with its special position.  They acquire companies so they can provide the integration out of the box for the IT department.

From business perspective, it extends the product and service they are offering to the business used to be taken by IT or by 3rd party service provider.

From software development perspectives, the line of codes we are providing are, if using the client server apps example, database software, the client software, and the provisioning scripts.  It may not be a big deal for the architecture involving only two components.  It is a big deal if the software architecture involves many components.  

How to measure the product success?

You may have multiple product lines.How you measure their success?
You can have a simple metrics to measure how much revenue they are bringing into the company.

The way how we measure and evaluate the performance can change the behaviors.
By treating them as individually units, you are encouraging them to complete.

Don't get me wrong. The resource is limited. Comparing them so you can properly allocating resources to them.  They do compete against each others on resources.

Competition is not necessary a bad thing.  However, it may not be always a good thing, either.

One way we can do is to measure how much it can bring the revenues to other products.

In a big company, there may be a mix of product lines or product units.  For those established products with an established installed base, their revenue should not be measured alone.  They should be measured by how much revenue that can bring by upselling the other products.  Only with this measurement, we can guarantee that there will be enough incentive for building an integrated solution.

What is a software bug?

A bug is a defect of the software product.
A defect is about something is not working as designed.

Some people are confusing a bug with a functional gap.

A functional gap is something that was not designed properly.

The design of the product is not working as expected.

This differentiation is useful as the process of  handling a bug could be different from handling a functional gap.

It also shows the ownership of the problem and how the problem should be handled and can be avoided in the future.

From the end user and from the customer's perspective, a bug and a functional gap may not make that different.  For people working as part of the software development organization, correctly categorizing the issue is important.

Project Manager, Development Manager, and Work breakdown structure

A person who is good at the execution will know the importance of creating work breakdown structure (WBS).

A good executor makes things happen, or get things done (GTD).  A good executor not just come up idea and plans, but know "how to" make thing happen.  They know what the WBS looks like.

Coming up a WBS, from PMI's PMBOK perspective, is a planning task. It is a function performed by a project manager.

However, I found that coming up a work breakdown structure is actually sometime a technical job that requires people to have certain level of the domain knowledge.  Similar projects have similar WBS, especially at the high level.structure.  When I go further down to the detail level, I found that the work breakdown structure will be more specific and requires people to have the knowledge to come up the breakdown and come up the list of tasks.

A project manager is really a role the assigned resource plays.  A project manager is really not a separate function. I feel that we cannot easily make a good project manager who can manage construction project well to be a project manager for software development.  There are shared knowledge that can be useful for any project manager.  The project manager to manage a specific type of project need to know that work down to certain level to do the project manager job.

Who should create the WBS? Can the job of creating WBS to be assigned to someone else? 

I think that it cannot be totally avoid anyway when we go down to the detail levels.  For a new project that has not yet been done before and no similar project the project manager can use to come up the WBS, the project manager need  to work with the architect who need to come up the high level components to help project manager to manage the project.

I think that this process also define how the architect works with the development manager.  I think that typically the person with the development manager title in software development organization should play the project manager role.  Sometimes, a project leader or an architect may also play the project manager role. A person who never played the project manager can still be a good architect, but is never qualified to be a development manager.

GTD Contexts

1. Someday/Maybe List

This is a Wish List.  If I have time I should spend some time on this task.
I still review it regularly to remind myself that I do not forget them.

This is different from the list that I will be regularly once a week on a specific scheduled time.

This is the list of tasks that I am not working on it.  The items listed here are unplanned lists.

It could be a project that still has not yet been broken down.

It can be a project idea.  They can be removed after researched and planned and the individual breakdown items ( not the whole item) are moved to other context category.

This a blog posting about Seven Problems with a Someday/Maybe List.

2. Special Occasions

I am assigning tasks to future of me under some occasions.

Typically these are part of my regular life.  Either once a week or  may be a particular time everyday.

The typical example used are @Home, @Work, @Errands, or Reading List.

I feel that it still very important to talk with people in person even we can send emails and using messaging.  Having one on one with your boss and your directs are part of the system developed within my company.

My contexts are organized by people
@Boss 1on1
@Mary 1on1
@HQ Office
@Pleasanton Office

@Weekly Staff Meeting
@Weekly IDC Meeting
@Home with kid
@This weekend

The more context you have, the more regular scheduled time blocks you have.  It may become less flexible, but I feel that I will be more organized.

This is a good article that talks about GTD contexts -  What is (not) a GTD context?

Learn GTD

1. What is GTD

2. How to create a to-do list?


Three categories:
  • INBOX: Today: Review multiple times a day
  • WEEKLY: Week: Review it daily
  • MAYBE: Longer: Review it at least once a week

Use Wikidpad (3): Publish HTML pages

Although Wikidpad is personal wiki tool and does not really allow multiple users to update the wiki pages, Wikidpad can be a useful tool for generating HTML pages.

Use Wikidpad (2)

Where to Download the Wikidpad software?

You can find it in  Here is the specific Wikidpad Download page.

After I downloaded it, I got the WikidPad-2.1_01.exe file (7777KB) in my Downloads directory.

The WikiPad developer allows us to install the software in a portable form.  It means that we can install it into a USB drive.

It takes 25.5 MB from the disk after installing the software.

Getting Start with Wikidpad

It may confuse you after you open the Wikidpad first time.

It opens the WikidPadHelp wiki file, the help file itself written as a Wikidpad wiki file.

You can go ahead to create your first wiki file by click menu (Wiki -> New).

A dialog window "Create New Wiki" popup.

It asks you to enter a "WikiWord".   It is confusing again.

A wikiword is nothing but a term capitalized and connected without space.

You can enter "MyWiki" as a a start.  It will ask you where to save the file, like NotePad.

This step will create a file called "".

How to create a wiki page in WikidPad?

You should see three wiki page already created for you:
  • MyWiki
  • ScratchPad
  • WikiSettings
This is still confusing.

The MyWiki page is the wiki home page of your wiki workspace.  It supposes a wiki page that contains links to other pages.

The name "MyWiki" is coming from the name entered as the "WikiWord" when you create the wiki file.

ScratchPad page is a child page that is created by default under MyWiki page.  You cannot delete this page. 

To create a new page, you can simply enter another "WikiWord" in the ScratchPad page or the MyWiki page.

For example, you can enter "FirstPage" and click Ctrl-S to save the page.  You will notice that the FirstPage is created under the MyWiki or the Scratch page as another child page.

This behavior is similar to other wiki software.  You create a new page by creating a new link first.  The page name is the same as the title of the page without space.

Wikidpad makes an assumption that all "WikiWord" are links to a child page.  To turn off the behavior, you need to escape it by entering "\FirstPage".

Use Wikidpad (1)

What is Wikidpad?

Wikidpad is a desktop software that allows you to create a personal wiki.
A wiki publishes and shares the information. A personal wiki is for creating wiki pages that hold notes taken for yourselves.

I think that Wikidpad is really a note taking software.

You can use Notepad to take notes.  Notepad lets you enter text and save it to a local file.

Wikidpad does a similar thing.  You write your notes and save it locally.

Wikidpad is a more advanced software than Notepad in that it allows you to organize your notes.

Unlike Notepad or Textpad, Wikidpad does not just store the notes in text files.  It also stores the index to organize the individual wiki pages in a database.  This feature is similar to the feature available in many other wiki software packages.

Unlike the other wiki software that stores the wiki pages in a database server, Wikidpad stores the wiki index in a sqlite database.  It is basically a structured file that does not require you to install any database management system.

It makes that the wiki pages created by Wikidpad is very portable.  You can save the .wiki file in a USB and take it with you.  You can email or upload the file.

Each wiki file consists of multiple pages.

Continue with: Use Wikidpad (2)

Why do we need design docs?

Writting a design doc requires you to think before you start implementing it.

A design doc communicates what is going to be built. Your customers can verify if this is what they want. Your QA can get the idea what they will test and can start preparing the testing scenarios.

Writing designs is not waste your time.


I tried to compare COALESCE and CASE WHEN.

FROM    (
  select CASE
       ELSE  1
       END AS val
  FROM dual
  CONNECT BY level = 10000

There is no difference!

COALESCE function

I have been using NVL.  However, I think that we should all move to use COALESCE.

COALESCE is more modern function that is a part of ANSI-92 standard.
NVL is Oracle specific, it was introduced in 80's before there were any standards.

This testing describes the reason:

In case of two values, they are synonyms.
However, they are implemented differently.
NVL always evaluates both arguments, while COALESCE stops evaluation whenever it finds first non-NULL:

FROM    (
        FROM    dual
        CONNECT BY
                level <= 10000

This runs for almost 0.5 seconds, since it generates SYS_GUID()'s, despite 1 being not a NULL.
FROM    (
        FROM    dual
        CONNECT BY
                level <= 10000
This understands that 1 is not a NULL and does not evaluate the second argument.

SYS_GUID's are not generated and the query is instant.

 COALESCE is much efficient than NVL!

Fixed barrack, floating soldiers

I read a good article. It is written in Chinese 


This sentence's original meaning was "Soldiers come soldiers go, the military camps stay fortified." In military, soldiers typically stayed for a fixed period, such as two years.  However, there are regular missions and work have to done, and cannot be stopped.

If staff changing is expected, the way how to handle the situation is to keep some staff changes, not as often as others.

However, I also disagree that an organization should keep adding new people.  Adding people requires team building activities.  Changing the team member too often may make the team under an unstable state.

A good way to handle it is that assuming soldier only stay two years. Replacing half of them a year and keep the other half not changed.  You will still have people can lead.  You need to have some sergeants who can stay longer and lieutenants who may stay even longer.

Keeping everyone staying as long as possible may not be a good practice if there is not much growing opportunities inside, but a lot of great job opportunities outside.