| Problem | Proposed solutions | Thoughts of the PM |
|
The instructor simply tells the student what to type. The student doesn't want to ask questions because it will slow down the process. As a result, the student may not know what's going on until after a long time. |
|
I think (1) won't work well. My personal experience indicates that students usually don't understand explanations without seeing the code. Usually typing the code first and then explaining later works better. I'd suggest a solution based on (2): The instructor can ask the student to see if he has questions when running "All Tests". This will make much better use of the idle time waiting for the tests to run. (3) should provide the fastest feedback to the student but it requires the instructor to be very sensitive. So it may not be practical. (4) can be done, although I'm not sure if it will change their behavior. |
|
Too many new technologies (Tapestry, Hibernate, OpenWFE and etc.) for the students. The gap is too wide. As a result it takes quite a long time for them to get on track. |
|
This raises the question of what can be best learned in a traditional training course and what can be best learned in pairing. I think that pairing excels when teaching a few skills that are so hard to master and that require repetitive uses/practice. Traditional training is better for the rest of the stuff. (1) seems to be in the right direction. However, should SDI really be positioned to teach all the hot and great technologies that help the students to get a job right away? I think its real mission is to transfer fundamental skills in software development that require repetitive practice to master (OO, customer interation, planning, team work, testing). With these fundamental skills they can learn all the hot new technologies by attending regular training courses to prepare themselves for the job market. New technologies will become old one day, but the fundamental skills last. SDI is not a replacement for regular training, but an important complement. Therefore (2) seems to be the right way to solve this problem. |
| Some unit tests are just like acceptance tests. | None |
Not all instructors are good at writing unit tests. Due to lack of instructors, it is impractical to require all instructors to be good at this before joining SDI. Instead we may identify a couple of instructors who are better in this aspect and let them inspect unit tests written by others and suggest ways to improve the tests. The ideal timing may be when they're running "All Tests". The resulting tasks must be signed up. The hard part is how to make sure they will do this job. One way is to do a standup meeting every session (or iteration) and ask each person in turn to report his findings on quality problems. |
| Unit tests pass when an acceptance test fails. | None | It means the unit test coverage is poor or the code written by different people just don't integrate well (e.g., different people have different expectations on the behavior of a certain class). If it's the latter, there is not much that we can do. If it's the former, it means the code is not written with TDD. As it's very slow to run unit tests using HtmlUnit, I agree that it's a pain to do TDD on Tapestry pages. This should not be a problem for a fat client. Another potential reason is that there may be too much code in the service classes which really belongs to the domain layer. In that case, the standup meeting may help. |
| Intentions of acceptance tests are unclear. |
|
Both solutions are worth doing. Again, should be done in the standup meeting. |
| No standup meeting. | Do it. | I was not seeing the value of it and what is the right format. Now I see it could be very useful in making quality problems visible. The format is simple: ask each person in turn for his improvement suggestions. |
| Subversion (or subclipse) is not working and is causing a lot of problems with file renames, duplicate new files and conflicts between deletes and edits. Sometimes it is just impossible to see and get the changes made by others or to commit our changes. It is also very slow sometimes. | Use CVS. | Even though many people seem to be using Subversion and subclipse without problems, but our experience with it is extremely bad. CVS seems much better. |
| One has to login again to switch input methods in Linux. | Use Windows. | This is not necessarily the case. SCIM allows one to switch input methods instantly. Just make sure to install SCIM if i18n is required in future projects. |
| Coding standard was not agreed on earlier. | Agree
on it up front. |
We should do it in the quick design session for each story by agreeing on the names of the classes/interfaces. We did do it for the later iterations. I don't know why we didn't do for the earlier iterations. |
| Design was not agreed on earlier. | Agree on it up front. | Again, we should do a quick design session. |
| No main screen until very late. | Make it earlier. | We should have a main screen for the first story. After all a user has to use the main screen to use that function. |
| Running "All Tests" takes too much time. | Use faster computers. |
As suggested above, we can make good use of the time when running "All Tests" including: seeking questions from the students, looking for quality problems and etc. In addition, working on fat clients should improve the situation. |
| It is very hard to make the acceptance tests pass because the person debugging is not the one who wrote the code. | Let two people work all the tasks in the whole story instead of 12 people. |
This is the most important reason for the slow velocity of our team. If this solution works, it will greatly speed up the velocity. So this is a very attractive proposition. However, due to the natural sizes of the stories as defined by the acceptance tests, we can only complete one or two stories in each iteration. For this solution to work, two people must be able to implement the story as quickly as 12 people. Not that it's impossible, but I am not sure how likely it is. What if it can't be done? The worst case is to revert back to the current situation. However, can we plan the stories for say 3 iterations and allow a story to span across iterations? This can blur the velocity as it's difficult to measure how much work is done and how much work is to be done in a story. However, by estimating the relative workload of each task in a story, the velocity can still be measured pretty accurately. Another difficulty is that there may be little to demo to the customer at the end of the iteration as all the stories are only partly done. |
| Spindle is not as good as JSF or ASP.NET tools. Writing HTML code by hand is no fun. | Use JSF or ASP.NET instead of Tapestry. | I don't think our time is mainly spent on Spindle or writing HTML code; our time is mainly spent on debugging failing acceptance tests. |
| Some technologies such as OpenWFE are new even to the instructors. This slows down the progress. | Only use the technologies that we are familar with. | Good suggestion. |
| As there are several days interval between two sessions, one may forget what to do at the begining of each session. | Merge the two sessions into a single longer session. | I don't see how this can improve the situation as this will increase the interval to one week. Some members may also feel too tired to work in a long session. |
| Many members don't like to come in weekends. | Schedule it to run in weekdays. | While I personally also don't like working in weekends, neither do other CPTTM students. So, someone has to come in weekends if there is no classroom. |
| The
technologies to be used are
not indicated on the pamphlet. |
Do it. | |
| The initial estimated velocity is 5 times of the actual velocity. | Use this measured velocity as the baseline for future web-based projects. | |
| We have way too many cases of late arrival and absence. This is probably because buying drinks is too affordable. We avoid food because it takes too much time to eat. | Adopt a fixed penalty system. Use the fund to buy food to eat in the half hour before the start of the last session of the iteration or to take home after the session. | |
| Network cables many times don't work because they are made by CCNA students. | I forgot to bring this up. If the lab still doesn't have fixed cables by then, we should have cables dedicated to SDI. | |
| Fedora Core 1 is unstable. Sometimes it hangs and doesn't work well with USB mice. In addition, the SVN command line client is much outdated and there is no update available for FC1. | I forgot to bring this up. In the future we should use a more updated and stable OS. Fedora has never meant to be stable. Ubuntu may be a good candidate. | |
| Each
pair had to setup their own development environment (Tomcat , Tapestry
and etc). |
|
I forgot to bring this up. I was thinking to let the students practice doing the setup. However, as it is now clear that SDI should focus on transferring skills that requires repeated practice, setting up software is definitely not such a skill as it is done only once. Therefore, we should setup a master and clone the hard disk before the start. |
| Doing
the login user story
requires a lot of effort. |
|
We as the developers can't force the user to do which user stories first. So (1) doesn't work. If we try to play this role, we will jeopardize the project as we'll be interfering with user's view on what's important and what's not. We are in no position to do that. (2) sounds OK in principle, but is very difficult to do in practice as there are too many sequencing combinations. I think we're mixing two issues together: Implementing login itself is easy to do. What requires a lot of effort is to make sure the Tapestry pages are access protected. This is what the access control for PR user story does. The scope of this user story is semi-fixed (limited to PR pages, but if we add new PR pages or new PR stories, the scope will expand). This is not good. User stories should have fixed scopes. But a more important issue is that, shouldn't security (including access control) be built-in when the code is being written? Adding security later doesn't sound like a good idea. Security should be part of the architecture. Therefore, access control should probably be part of each individial user story. But when considering complicated access control issues such as who can read or write a PR in a given tray, the user story will become quite large and involve a lot of domain logic. But let's try. |
| Too late to perform this review! | I forgot to bring this up. We should have performed such a review regularly (e.g., every iteration). |