Monday, November 11, 2013

Project3 Summary

I think I write quite a lot in my Project 3 Q&A, so I just post some part I wrote really carefully here, I think many ideas are worth for sharing.

Project 3 General

   For this project, I don't think I did much job with the coding, but I go through the code written by others so that I know what happened.

   For the first week, I discuss the graphic issue with the team, and I think that should be a part of our assignment, but seems no body think that should be done.

   For the second week, out team got the assignment of implement the Sound and Score, I was assigned a job to write the class for the score, but another team member did that for me before I started. So I got nothing to do, so I turn to create the textures for the game, and post it on the perforce. Actually, I’m trying to push the others to use my textures to make a better game. (I’m not the team leader, can’t decide by myself)

   For the third week, our team leader Adi seems got some extra time and he decide to help me put the graphics part into the game. I think my ”push” works!

   As a team member in Team A, I did all my jobs, discuss the topic with others on Piazza and do some extra job to push my team.

Taking what you know now, how would you plan and manage this task in a global software environment?

   I assume this question means I am the project leader, and I should work with other people from other country with different time zone, and the project is still the Tetris and I have 3 weeks to do that.

   First, I will not need 12 people to do this task, I will shrink the team into a 2-3 person team. Cost would be extremely cut down. Also communication will be much easier.

   Second, as I know China well, I will probably choose the programmers from Chinese second-level city. I need a programmer and an artist, I prefer those people with multiply skills. For example, an artist can do both simple 2D textures and simple audio(won’t be too expensive).

   Third, build the environment for the project. A forum, a SVN, a wiki, an instance messenger. In this case, I will choose Discuz (free forum + wiki software, poplular in china), Subversion(free, I think perforce is also too hard to use for such project), Tecent QQ(a free IM software, support group chat, video meeting and file transport). It may take a while for people to understand SVN, but others won’t be problem (people familiar with them like google). But we may still need a simple document to let them know what we use (post on forum).

   Forth, we need a kick-off meeting, can be done online (QQ), choose a time that both people are ok. We should talk about the project, discuss some design and do some brain storm in the meeting. I will write down the important part and document it as our design document. Post the document on forum so everyone can read.

   Fifth, assign the job to everyone, give them a due date. (but actually it's a first pass, we should still have some time left)

   After the first pass is due, check the job they did (they should have done something) and decide what we should improve on the project. Get it done in the rest of the time

Note: If the project goes bigger, this solution may not work. In lager project, I may use some other SVN like perforce, and I will have to separate the whole job to small individual tasks. I will separate the whole team to small team with team leaders.

  How would you maximize your team’s time and effort and still get this project done?

   First, I think, why people sometimes are not willing to do your work is basically it means nothing but a way to earn money to them. So as a team leader, I may spent some time talking about dreams, future, how awesome we would be if we get the job done, ect. (To make myself more persuative, I may need to perform the best in the team)

   Second, actually I found that in a team project, team leader would be very busy but others will be a little bit loose. But what if I make everyone a team leader, and we work on multiply projects at once. For example, I got 3 programmer with different skills, and I let A, B, C in charge of three different project, and their team members are themselves. In this case, if A really want his project to be done nicely, he would work hard for B and C’s project first. After that, he would able to push B and C hard to help him to get his job done.  (Well, I just come up with this idea myself, I  have never tested it, I may have a try later in my own project~)

   Third, a working “Pipeline” is important. I found that sometimes people hard to get started just because the task is hard and boring and he has no clue how to deal with it. I think this problem could be solve if I design a good pipeline for them. Start from something easy and let them warm for the project is important.

   Forth, choose good team members. If I am the team leader, I won’t let some waste of money and time fools get into my team. I must choose the team members extremely careful, that is important than anything. 


Wednesday, November 6, 2013

This week's job and surprise

Our goal is to make a workable game of tetris
Our team leader gave me the job as follows.

API: 
// called when perfect line(s) are formed 
// param: 
// clearedLines : number of lines cleared 
clearLinesEvent(int clearedLines) 

// called when a tetromino piece has complete its drop 
// param: 
// endYPos : the Y coordinate of the piece location 
dropCompleteEvent(int endYPos)


Just before I try to get it done, another team member said he already done almost all the functions we need.
So I do not have to do anything this week.
I'm kind of person that don't like behind our team, so I took the effort to make some graphics.
See!Cool?  Almost all textures we need is here. We can build a really nice game!


I post it to the Piazza, but what surprise me is, some of the student believe this is out of scope, because Keenan didn't ask us to do much about the graphics, and they think this is not about the code things, and seems not willing to put it into the project.

But actually, put all of these texures into the game is not "not the code part" as they thought. Many code will be adjusted for drawing. Adjusting the positions and working on the button will cost time and effort. People may not willing to do that, because it gives no credit. So I'm pretty sure that these pictures will not be included finally, even I have done the half of the job for them.

This make me think about the team cooperation.
   First, for this Tetris assignment, I think I can do all the job myself in 3 weeks easily, with sound and graphic and even more. But when it turns to 15 people, the "speed" didn't improve at all, heavy communication cost make the progress even slower.
   Second, in the team cooperation, people actually think of themselves, its hard for a team members "like me" to push every one to do any extra job to make our product better. Only the Boss (like Keenan) could do that. Constructive idea did nothing in such cooperation pattern we use in the class.
   I think these two problem are hard to be solved easily, but a better cooperation pattern may decrease these effect. For example, let team A and team B compete each other, and the team makes the game better wins.
  Though I'm a little upset about my classmates' reaction, I still got some experience from this event.

Monday, October 28, 2013

Tetris Design


I was focusing on my own game project and missed the kick-off meeting on Sunday, which was bad!!!

Our team leader attended it, and they decided most of the design part, looks nice.
It looks like they have became a "design team", and rest of us are the implement team.

For the design part, I notice there is no task for creating 2D textures. I don't think the graphics by ED is enough for this project. Now I am communicating with them for this problems.

Also I want to emphasize that we got 3teams x 4 members = 12 person in this project, and we got 3 weeks. It's a large team + enough time for a small Tetris Game. In the real world, we won't have so many people and so many times for such small project. The communication cost for such big team might be higher, so I won't spent 12 people to do such project in real world. But its a good practice for the class.

Wednesday, October 23, 2013

Implementation Phase

   For the implementation phase, we are very lucky that what we should do is probably the easiest one, the Spin.
   The design team also has a pretty simple design, so this assignment turn out to be very easy.
   Our team leader assign the work to every body. What I should do is only create the project and finish the node class, which is quite a simple job.
    After that, our team write the unit test and finish the whole project almost without me, that's quit a simple task.

Wednesday, October 16, 2013

Subordinate Assignment

For this time, our team had a lot of discussion on Piazza.
We document the discussion to wiki, and it become a quite useful plan.
I think anyone can understand it well. It's quit a nice design, I think.

For me, this assignment is quite a good practice.

I'm leading a indie game team that almost all members are from internet that I never met before. We are in different time zone and different area. We use some instance message software for communication, but I found that is easy to lose our discussion record. Sometimes good idea just lost, because document the message history of the instance message software is painful.

Now I'm planning to use wiki, or other similar things, like a forum. People intended to post formally by using those.

A thing I hate about is that google site is blocked by Chinese government, my team members from China can't use that, I have to found a better way.

A thing in the global software development that easy to be underestimated is the communication cost. I always found myself spending a lot of time talking and writing to the team, and they sometimes still not understand me very well. Finally, I have to do those things myself.

I hope this issue will be solved, or at least be better, after I start using wiki and forum just like what we did in class.

Monday, October 14, 2013

Design the Bucket.

We begin designing our Bucket.
We found that actually the Bucket problem is a 2 dimensional problem.
So Adi draw the UML for the whole structure, which is very helpful.

We are using linked list at first, but I found that the user is using string for searching. we have to compare the String every time we add or remove the node.

I write down the process for some important method to ensure that our plan will work fine, and it seems also be very useful for the implement team. I actually found some problems by doing this.

The linked list might be to slow for the whole process. So we decided to change it to Tree. Adi did a great job that he draw the new UML very fast.
The program might be a little complex than using linked list, but I believe the speed will be much faster.

I'm still asking the team if we should use Binary Search Tree, I think we can use "strcmp" to decide the node goes left or right.  But I'm not that sure. I never tried to use string as the ID in the tree structure.

We still need to write down the schedule and fill the API page tonight. Good luck.

Wednesday, October 9, 2013

4 Unit Test Done!

I start writing the unit test yesterday, and got a lot of trouble at first. I didn't know how to start.
Then, I studied my teammates' code and learnt a lot from their code, and was able to finished 1 unit test after that.
There wasn't much time left, so I wrote a post to ask for help, my teammates were really nice and gave me some good advices.
I found Adi's code is quite similar with mine, I learnt a lot from him. I figure out that I have to pass the full path of the directory, and that's why I always got a false. I finished 3 unit test very quickly after that.
The 4th unit test is a private method and returns void, that is too tightly coupled with the class internal state, and was almost impossible to write the unit test for it. So I have to change a different method.
Finally, I finished all unit tests, but I'm still not very sure about my work. I asked AJ to take a look for me.
Thanks everyone, next time I should start earlier.