Onega's profileOnegaBlogListsNetwork Tools Help

Blog


    July 15

    Dinner with Ivar yesterday

    I was attending an offsite training, so I missed the presentation Ivar Jacobson given to our company, but had the pleasure to had dinner with him. Here was what I caught (might have misunderstanding):

    You can do MDD, but forget MDA. MDA is not mature and only PHD student can understand and use it.

    Use case vs User Story: Use case can be used to derive test cases, but user story can't.

    Standard persistent format for UML

    It is in the first version of UML, but every tool created its own format.

    UML library: Rational has created some common asset management pieces, but not very useful.

    UML 2.0 is too heavy. I was thinking of using essential UML (20% features) in development.

    Craig Larman

    Today I had a chance to ask questions to Craig Larman and here was what I got.

    Q: Do I need to create WBS before Iteration 1?

    A: You spend 2~4 days in creating a backlog (feature list) before iteration 1, and spend 5% time of each iteration to do plan for current iteration, and team members create their own WBS in each iteration.

    Q: Do I estimate size of project according to backlog?

    A: Yes.

     

    Some notes I caught (might be wrong):

    Don't do resource pool, a stable team is better.

    Microsoft did daily build 20 years ago, if you don't do, you are 20 years out of date.

    It is a bad idea to "code a little, test a little". It is a good idea to "test a little, code a little".

    User story can be documented as: "I want <a feature> because it has <this benefit>".

    Abandon MS word document as requirement Spec, use wiki instead.

    April 30

    "Do not program prematurely" is not "Do not program"

    There are a lot of books proclaim that "Do not program prematurely". Many readers understand it as "Do not program" before you have a mature model. This is misleading because for Non-functional requirements, it is difficult to model without investigation. You should start investigating every new technology that are going to be used in your design, otherwise they won't work as your expected. New technology will always surprises you if you are not familiar to it. As an example, people prematurely think Multi-CPU will run faster than single CPU, but it is not always true; for some programs that do not take advantage of extra CPU resources, it can be SLOWER due to extra synchronization cost between CPUs. Windows service is part of our new system, then I spent a few days to familiar to service project in VC++ 9.0(which is a lot different from VC++ 6.0 version). Tcp will play an important role in the new system, then I spent efforts in playing with boost.asio. Don't postpone investigation to construction phase, otherwise you can't get right estimation for corresponding task, and also at the risk of blocking others from system integration.

    March 05

    Who is willing to take challenge?

    TSP stated that "New and inexperienced developers are often reluctant to take on unfamiliar challenges. More experienced developers are eager to learn new methods and techniques."
    This is not true. New members usually does not reject tough assignment in order to acquire recognition. More experienced developers usually familiar to the project and understand the risk and are more active to say no. Some experienced developers stopped learning and focus on personal investment.

    March 04

    Argue with TSP on applying Maslow's Hierachy of Needs in team motivation

    The famous Maslow's Hierachy of Needs is cited in TSP. TSP claimed that self-actualization level is required for development work, which is not bulletproof in my opinion.There are several facts beyond Maslow's theory: People may sacrifice their life for religion or belief, like Galileo. Another fact is that "Self-actualization" may not be aligned with business goal, mostly likely be a personal hobby like sightseeing, etc. If there is possibility, many people will retire early, thus get work done is not self-actualization, I would emphasize on cultivating motivation in belonging and recognition level. When working as a team, we have the feeling of belonging and recognition in common, while self actualization is diverse.

    February 24

    Understand what the team expects

    Creative people needs for job security.
    Agree, quite a lot people don't change job for better offer. They would prefer work for large company to small company. Most development professionals want to work on a cohesive and cooperative team. Many people only go to head hunter when they are unhappy to current environment, not current salary package.
    The team members like to be successful.
    Many team members want to do technical work what is interesting and that satisfies their personal goals and aspirations. There are also quite a lot of people like to do nonchallenging work, they are not akin to learning new knowledge.

    January 22

    Complementary techniques to Test-Driven Development

    I realized that TDD is not enough for quality ensurance one year ago -- unit test code was written but a use case still failed, since TDD does not focus at use case level, so I think an independent test team is important for high level validation&verification. Scott W. Ambler published a lengthy article on Feb 2008 issue of Dr. Dobb's, he also considered Agile Modeling in addition to test team.

    December 17

    Estimation

    Applied Software Project Management challenges the rule of "testing should always take exactly one-third (or some other fixed ration) of the programming time", which is promoted by The Art of Project Management. I'd support the latter since we are making guess and it is simpler to guess one factor instead of two.

    Wideband Delphi Estimation process:

    Choosing a qualified team
    The team generates a task list of 10-20 major tasks and assumptions (WBS) based on vision and scope document in Kickoff meeting
    Indivisual preparation offline estimation
    Estimation session
    Additional session to solve disagreement

    September 18

    The secret of planning and estimation.

    In order to be successful, good estimation must contain enough buffer for the team, as expressed by many well known experts.
    I always add 30% to my original estimate for anticipated problems then another 20% to cover things I hadn't thought of.
    Ian Sommerville, Page 100 of Software Engineering 8ed.
    Add time to each iteration for changes that are identified during an iteration review... set aside one or more "empty" iterations at the end of the project... features assigned to the last iteration or two should be those that can be dropped if necessary.
    Jim Highsmith, page 155 of Agile Project Management.
    Applying the rule of thirds (Plan and Design, Programming, and Testing).
    Scott Berkun, Page 26 of The Art of Project Management.
    September 13

    C++ VS Java

    C++ is less strict than Java:
    undefined length of bool may be a problem for the same C++ code compiled
    by different compiler.Exception and RTTI are implementation dependent.

    C++ does not have good support for various apsects:
    CORBA, Web Service, XML, thread, encryption, network, GUI, security, and
    Database etc. There are open source projects for C++, but they are
    native supported in Java.

    It is difficult to put C++ libraries to work together.
    User has to configure various options before using a C++ library:
    debug/release; single thread/multi-thread; multi-byte/unicode;
    dynamic/static; with/without RTTI; with/without exception; wchar_t as
    native type, OS version, with/without STL etc.

    On windows, there are so many types for string:
    char* wchar_t* TCHAR* OLESTR BSTR _bstr_t CComBSTR
    std::string CString, and some open source libraries also define its
    own string types.

    My conclusion: C++ is more difficult and less productive than Java.

    The price for using Java (my experience):
    Have to tell memory usage to JVM at program start;
    Performance penalty;
    Eat a lot of resource;
    Java implementation bugs usually will affect software
    development(http://bugs.sun.com/bugdatabase/).

    As an End user, I would prefer to C++ program which is faster. To a
    manager/architect, it is a difficult decision most of the time.




    August 16

    War on naming convention

    There are several widely used naming conventions and each has a lot of fans.
    naming convention:
    lower camel Java, Apache XercesC
    Hungarian MFC, Microsoft Platform SDK
    underscore boost, ACE, STL

    I personally favor to boost style, which only use lower case for class
    and member names.