Tackling a programming project as a group rather than as an individual changes the way the project is constructed. The group approach in my opinion creates a more successful outcome but adds new challenges as well. My experience with iteration one has definitely favored group work above individual work. In iteration one we had a few setbacks because of multiple people working on the same project but the benefits of group work far exceeded those challenges.
The first challenge that we encountered from group work was communication error. When working as a group my partner and I would sometimes interpret each other wrong or there would be a lack of communication. For example, sometimes we would work on the project at the same time and when we checked in our code one of us would get a code conflict. The solution to this problem was obvious to us. We just needed to communicate more. Whenever one of us began working on the project we made sure to inform the other. This was an easy problem to resolve and we haven't had a code conflict since.
Sometimes one of us would have a really good idea but explaining the idea to the other partner would be another setback. It can be difficult to express your ideas about code in words sometimes and this would delay our progress at times. Our response to this problem was to write pseudo code to the other partner to help them understand. Usually this was enough to at least convince one another to move forward with the code.
Our second challenge was the problem of conflicting ideas. We would find ourselves at a point where we both think our own idea would be the best and cannot decide which to use. In this situation we would pick one or more of the following options. We would just pick one, we would implement both of them and compare them, we would argue until the other was convinced or we would do both when applicable. As an example when designing our linked list I used the new operator while my partner used the malloc function. Our final result ended up using both the new operator and malloc function. I think next time we will just pick a single method for code readability but in this instance it worked out just fine.
This is one of the great things about group programming though. Having different perspectives on things can really help with difficult problems. I feel like most of our success came from having different perspectives. Rather than just taking the only idea available we were able to take the best idea from two minds. Additionally, there was the occasion where one of us was just wrong and it helped things go much smoother when the other had the answer. Everybody has different strengths and weaknesses. Much of the time if I am weak in a particular subject my partner can help me and vice versa. For our next iteration I will make sure to keep in contact with my partner more to take advantage of this. I found that when we code together we make much more progress.
My favorite advantage to group work is sharing the workload. I find it a great feeling when I personally do not have all the responsibility of the project. I can count on my partner to do his work without worry. Whenever I get stuck my partner can help me figure out the solution. When we were working on simpler parts of the project, such as enumerating the regular expression types, we could break it up in half and complete them separately. I find this a particularly effective strategy when dealing with simple coding tasks.