Wednesday, December 30, 2009

Eclipse UML2 Tools is Good

oodThis week I'm reading the book UML for the IT Business Analyst, and following its instructions to do requirement analysis.

I had used Enterprise Architecture long time ago, and I like it very much. Unfortunately, it is a commercial product, and expensive. Since I'm working on this open source project, I want every tool used is open sourced. I tried ArgoUML  sometime ago, a very famous open source UML tool, but was not satisfied.
I know Eclipse has a UML2 project under Modeling Project and a graphic tool project to draw UML2 models. I checked again and found out UML2 Tools already released 0.9 this summer. So I followed this tutorial to install and use the tool. I'm very impressed by this Eclipse UML2 Tools, and think it is good enough for UML modeling.

The graphic is pretty neat, and consistent with the whole Eclipse style. For example the use case diagram:

I appreciate the feature that you can save the diagram as SVG file, so I can post very big diagram to internet as SVG files, because all browsers now support SVG. So if you click the picture, you can view the more clear diagram in browser.

Here is the activity diagram for Manage Meeting business use case.

The Partition is very cool. The only issue is I can only layout partition horizontal, which is not the same as examples I see. And it is not convenient to view in browser or printed document.

The class diagram is also beautiful:

It is amazing that such a good tool is free and open sourced. Many thanks to Eclipse Modeling Team!

Friday, December 18, 2009

You Believe You Know What You Want Until You Start To Write It Down

I had the idea to build a web site for our toastmaster club a year ago. This Open Toast Project was created last Nov, and there is very little progress. Many reasons (or excuses) for that, but time is the most critical one. This Christmas I take three weeks super long holiday, so I can have some days to focus on the project, hoping to achieve something.

I have been in Toastmaster for about 2 and half years now, and have been the President of TM4PM club for more than a year. With a little confidence, I believed I understood the business of a small toastmaster club fairly well, until I tried to write down the requirements.

Since I don't have much time working on the project, I want to make it very simple, just to solve the problem of scheduling club meetings. As a club VP Education, the job mainly is setting up weekly meetings, assigning meeting roles to members. Currently we use emails to communicate with each other, and it works pretty well, most of the time. The problem occurs when something unexpected happens, such as members go vacation or business trip, have heavy work load, or family issues, health issues, so that they cannot participate. VP Education or meeting toastmaster will have big headache to fill the missing roles. If, and only if, we have an on-line application that allow us to sign up meeting role, confirm attendance, monitor meeting status, life will be a lot easier.

So the first requirement is As a member, I can sign up a role in a meeting. Okay, that sounds simple.

We have Member business object now, and the member is also the user of the system. Member can assign meeting role to himself/herself. And we also want VP Education or Executive Members can assign meeting role to other members. Member or Executive Member are Actors, and Executive Member is a specialized Member.

Where are those member information? They are spread out among Guest Cards, pieces of paper, emails, everyone's contact lists, or memories. So often the meeting toastmaster couldn't get confirmation from members because no contact info available. Since Toastmaster is a self-motivated education, the turn-over rate is extremely high, more than 70%. Even executives can suddenly disappear. If, and only if, we can manage our members contact info, life will be a lot easier.

So we have 2 new requirements, As an executive member, I can register member and As a guest, I can self register to be a member. There may be more requirements about managing members, assigning executive position to members, but I want to keep it simple, so let's add them in the future.

We still need one more requirement, As an executive member, I can assign meeting roles to other members. Usually it's VP Education's responsibility, but other executives have to take over the task sometimes. Maybe we can use delegation mechanism, so VP Education can delegate this job to other members. But I want to keep it simple, that is all executive members can do the job.

Member and Executive Member are Actors in the context of Club. Wait, I belong to two clubs. I'm the President of TM4PM, and a normal active member of Dawnbreakers. I'm also a regular guest to two other clubs, CU@Noon and Paragon. I want to see all the meeting schedules from clubs that I'm associated with, so I can prepare the speeches or meeting roles assigned to me. We have to separate User from Member. A user of this system can be member of many clubs, and may have different position/status in each club. So we have to manage clubs, let user join clubs. Oh my, it is never simple anymore. I can see the security will be a big challenge.

This system will work well only if everyone is using it. Remember the requirement As an executive member, I can register member. Since we separate user from member, I prefer to give user more control, like which club to join, or just watch club activities, sign up a meeting role, etc. Maybe it will cause problem when someone starts to abuse the system, but right now I assume we are good citizens, and put all those hard issues to the future release, if I can ever release something.

Let me organize my thoughts and list all the features:

  1. As a new user, I want to register myself to the system.
  2. As a user, I want to easily find a club, join a club and quit a club.
  3. As a user, I want to easily view all my toastmaster meeting agendas from joined clubs.
  4. As a club member, I want to sign up a meeting role in future meetings.
  5. As a club executive, I want to plan meeting agenda, assign roles to members.
  6. As a user, I want to manage my contact info or profile.
There are many other features to think about, like manage club info, manage club member, manage executive team, etc, etc... I have to stop thinking now. Even above feature list I don't think I can do them all at once.

The feature list is the high level business requirement, and I try to segment it into system use cases. Like the title says, I believe I know what I want, until I start to write it down. basically I'm facing two challenges:

First, how to balance current needs with long term vision. I have been doing VP Education job for quite a while, and understand current workflow. The leader, usually VP Education, assign the meeting roles, or ask for volunteers, through email or signup sheet during meetings. To automate the process on-line is hard, because you have to shift control from the leader to the members, so the members have the final say to the signup sheet, the leader is just a coordinator. That is process re-engineering. Besides, we have a bigger vision, to let users manage the clubs they join or watch, so they can monitor all meetings they are interested. In the future, we can add more features like user can track educational progress in Toastmaster designations, or people can give feedback to speakers, etc, etc. Whenever I think about the bigger picture, the scope easily explodes, and I get overwhelmed.

Second, how to balance analysis with design and technical details. I'm a user of this system, and a developer to design/implement the system. Now I'm trying to analyze the requirements, but I spend lots of time imagining the user interface and system architecture, dreaming how I can use GWT + Spring to build a cool RIA. This feeling drags me to the Eclipse to start writing code. But I know I will be stuck with all kinds of technical details, and will lose focus of requirements. I believe analysis and design are closely bound together in order to build a good software. however my goal is to get requirements done, so better write text instead of code.

During the use case analysis, I find it is a blessing to be a programmer as well. I can identify which request is doable even it seems too fancy, and which request is very hard to implement. That helps me to prioritize the feature requests, so the project scope is under my control. It is interesting that I'm also considering project management issues.

Writing down my thoughts in English is much more difficult than writing Java code, and it needs great perseverance to continue. I feel my mind is clearer after this blog, and it is fun to share with others.