Hello, dear readers!
It’s high time I published an elaborate review of a team project I recently had the pleasure to take part in. First off, let me introduce you to the preceding events.
Perhaps many of you already know about my current occupation as a student at Telerik Academy. In the last 10 months I had the opportunity to attend courses in computer programming along with hundreds of other students united in the effort to become skillful junior software engineers. While we had been under the impression that we were making quick progress it was not until the recent months that we finally began to see a bigger picture – one not strictly inside the world of algorithms, but rather in how one can develop software that can solve more than a few tasks and do that in a systematic way.
The OOP team project was the third team project I had been involved in since starting my education at the Academy. Of the other two only one involved actual programming. (If you are interested you can read more about it here (in Bulgarian): LINK) So, being only the second one, it was bound to be very different than the first.
Our task was to „design and implement an object-oriented application by choice.“… but not a game! We had roughly one month to complete the task and fulfil the requirements, all of which you can read here: LINK The biggest surprise came from the requirement to implement a GUI. For that we had to use XAML/WPF – a technology completely unknown to most students. As it proved later, it was the hardest feature to implement. But now I think it’s time to introduce you to…
- The team
It was the Academy that picked the teams and the students had no controll over who they were going to work with. While not completely random, each team consisted of five students, selected by their performance in previous exams. I got picked alongside Martin Anastasov and Martin Marinov.
- The concept – what we wanted to do
A blank sheet of paper is a dangerous adversary. The program we wanted to create had to be both impressive and relatively easy to develop, having in mind the close deadline and our own limitations as programmers. Unfortunately we went for a plan for something big, not taking into account the difficulties it posed and the sheer scale of the project we had in mind.
The night before our first team meeting I came up with an idea after two days of fruitless thinking. Considering myself an educated football fan I spend a lot of time browsing sites and meddling with statistical data. So I told myself: „Why not try and create a software that keeps information about football competitions and displays information about players and clubs while providing the user with well presented stats?“ When I proposed it to my teammates they accepted it eagerly.
So, to sum it up, our software was supposed to keep data about competitions, seasons, clubs, players, staff members and possibly about matches as well and at the same time provide complex stats analysis and its visualization. Perhaps you’re already getting the idea that such task could hardly be accomplished in time and competently by a team of budding programmers. Nevertheless, we managed to develop a stable program with basic functionality and some nice GUI and in the end we were fairly satisfied with our effort.
- Technologies used: WPF/XAML, C#
- Project management
We used SVN source control system. The project is hosted on GoogleCode. You can find the project repository here: LINK We held a few live meetings, but used Skype as our main method of communication. To organize our work, we assigned most of the tasks in such a way that no more than one person would work on a single one. I worked on the project architecture and made extensive use of interfaces to „shape“ the project’s class hierarchy and functionality. My teammates developed some of the classes and the exception handling. I spent the biggest amount of time studying XAML as neither of us had previous experience with any kind of UI technology and GUI was a required feature of our program.
The final version of „Football Stats“ has the following features:
– creation of players, staff members and referees;
– creation of clubs;
– display of detailed information about players and clubs;
– adding/removing players to/from clubs;
– provision of statistical data for selected clubs;
– save/load to/from text file;
- Classes and methods
Let me explain in short our class hierarchy.The basis of the football world are the persons – players, coaches and other members of the staff. Together they form the class hierarchy Persons. Each person has a name, date of birth and nationality. Players and coaches are club affiliated unlike referees who aren’t. They also have a wage. Each player knows the positions he can play in and each staff member knows if he is a coach, a manager, an owner etc.
The club class is an organization of players and staff (the club affiliated persons). It holds a list of players and a list of staff. In the Club class we put the majority of methods that return statistical data – like average age, average/max/min wage, if the club has an appointed manager or the position is vacant, how many players can play in certain position and so on.
- User experience and GUI
The main window presents the user with four options – to create a new player, to create a new club, to show info about players and to show info about clubs. What they do is pretty self-explanatory but here are some screenshots:
– The Player Creation window requires the user to fill all the fields otherwise an error message would appear instructing him to provide more information. The drop-down menus for player/staff position become enabled/disabled depending on the type of person selected through the radio buttons. After successful creation, the person is added to a static list of persons you can find in the World class. From there the person is visible to all other classes which allows easier access and manipulation;
– The Club Creation window provides a minimalistic interface. The user is only able to enter a name and nationality for the new club. Upon creation, the club is added yet again in a static list in the World class;
– The Show Persons window displays a list of all persons, whether club affiliated or not (referees). When selected, verbose information about them appears on the right side;
– The Show Clubs window is divided into three sections. The leftmost shows a list of all Clubs currently loaded in the program. When the user makes a selection, the two other sections become active. The middle one will show comprehensive stats, displaying the name of the club, its active manager, the total number of players, average wage etc. The right section is reserved for the players currently affiliated to the club. When selected, players can simply be removed by clicking the corresponding button which will remove them from the club’s players list and change their club affiliation to „Free Agent“. The Add button opens a new window. There, all free agents are available for selection and addition to the club.
Changes to the data are automatically saved on almost each action or on closing a window. No dedicated save command is available. The data is exported to a text file. On program initialization the data which is stored in text files is parsed into the memory.
- Project defense and marks
The defense went well. The project received very good marks – 3.6 out of 4. A short note about the program was included in the Telerik Academy Newsletter.
- Personal satisfaction and conclusion
The project started ambitiously, but our inexperience in software development meant that we had to abandon the initial ideas we had and cut a lot of planned features from the final product. Nevertheless, I’m very satisfied that midway through development we realized we needed to create and integrate small but functional features one by one, rather than working on many features simultaneously. Later, when I got familiar with the agile development methodologies I found out that back then we’ve been on the right track, coming to the conclusion by trial and error approach.
It has become a rather long post and I hope it didn’t bore you to death :). Here’s the link to the repository again if you want to take a more in-depth look. Please bear in mind that „Football Stats“ is an educational project which main objective is more the promotion of teamwork skills rather than the development of high quality software. I’m well aware a lot of things could’ve been done better and I look upon this work merely as a small step on a long journey.
Till next time!