Monday, September 15, 2014

TargetProcess and BitBucket

Using tech to collaborate

and to make your life much easier (and complicated)

Assuming that we have our team, eager and ready to go ahead with coding, 
(you can stop here because i am sure that probably hasnt happened)

There are a few tools that will make your project all that more fancy.
1. A tool to document and display your progress with the planned goals. (TargetProcess)
2. A version control system that will make collective coding much easier. (BitBucket + SourceTree)

TargetProcess:

                                                                  TargetProcess looks like this
It relies on user stories, attaching effort needed to complete each task, and then you can divide your project deliverables and work based on a timeline. It can prioritize your work, assign work to different members, and display all of this info clearly on a board.

Setting this up is pretty straightforward;
Create an account for each member,
Login, and add the members into a single team (max 5 for the free version)
and then the site has all the functions listed in an interactive guide.


SourceTree:

This is the normal interface (with some of my projects) in sourcetree

This allows the members of the team to have an updated copy of the project, and to contribute to it easily.
The normal way that a project goes is; first the project base is created and then is zipped and sent to someone over facebook or email (or the good ol flashdrive) 
Then the other person opens it up and does his changes and zip it back and gives to the next person.
See what is wrong here? its SEQUENTIAL, and is a major waste of time because all the members cant work on the same thing.
Also, the data usage for uploading and downlaoding the full project all the time is a complete waste. Especially with SLT's generous data packages (sarcasm: for the first time in my blog) it is not a good idea. 

With sourcetree, when someone is going to do some coding/contribution to the project, what he needs to do is "PULL" the most updated project files from the cloud. Then do his changes, COMMIT, and PUSH it back to the cloud. Here, sourcetree only updates the CHANGED files to the cloud so that only these files are updated and tracked. If the others do not like the change, they know what files are changed too and if disaster happens, it can be easily reversed to the earlier version by reverting back the files that were changed. 

how to get this working is;
- get an account registered at BitBucket (this repo allows private repositories) 
- register the group members too and make a group
- create a new repo and all the team to it, and fork it down via SourceTree (which you will be asked to install to your PC) 
- when forked, the SourceTree application will open the link and create a directory (preferably empty) in your computer. This folder has all it's files tracked for changes. 
- from there on, all you need to do is create your project in that folder, and then push it. The rest of the team will be able to download/clone this project in their computers as well.

This software is very snaggy at first. But get it working and it all goes very smoothly!
A common problem a lot of my friends had was adding the global account for SourceTree to use.
For this the error message actually gives you the direction to resolve the issue, go into console and add the global.user variable and the name then you're good to go.
It is also a good idea to have the SourceTree and it's working directories in places that do not require UAC.

Empowering the team

Now you have a team,

But now for the real challenge

Making it work

Now that the team is set, (I had to work with 3 other members for this project) the first thing is to set the goals. In detail. 
We were tasked with creating a web-based web builder as our assignment. Something similar to www.weebly.com
So then, the leader is tasked with knowing what the skill gaps are. Therefore, know what needs to be known, and then know what the skills that are already at hand to create the needed software. This is sort of a balance between what can be done and what is to be done. 

So as an example, our site needed to be heavily web-technology-based. I came up with a very very rough idea what to do, just to get the idea of what I needed to KNOW to do my work. We also wanted to learn something new on the web-development side. So, I looked up tutorials for
  • HTML5
  • PHP
  • CodeIgniter
  • CSS
  • JavaScript
  • JQuery
 on good old youtube, and gave the task #1: find better tutorials than these!
Thus within a day the best ways to learn these tech was found.

The videos were divided into the weeks we had to learn (first 40% of the project time) taking a set number of hours a week. A major factor here is to be REALISTIC and PRACTICAL. Setting yourself goals that are just insane (like watch tutorials 2 hours a day) would clearly not work. And the members needed to have a sense of progress so that they are not bored out of doing their work. Motivation is key.

Have little mileposts along the way so that the people can tick them off, and the others can see the progress of the whole team. Communication is essential. Leave room for creativity too, tasking the members with little assignments using the tech that they newly learned. Then you discover the abilities of the team - so that you can use it better.

One big thing that is overlooked at this stage is the facilitation to DO work. Althought it's extra effort on the team leader's side; it is always very rewarding when leader knows all the elements of the team that makes it succeed or fail. Therefore he/she should know the environment that the members work on, the computers, the times they work, and how easy it is for them to collaborate with the others and how they are comfortable in contributing to the progress.

Make sure to tailor the work given to the individual and not from a scope that is judged from your level of expertise or working conditions.

The following pie chart will show you if you are not doing this well, and are not getting the results that you expect:




Details details details.













Picking your team

"There are no Quotes on team selection
- The times of India (http://timesofindia.indiatimes.com/topic/team-selection/quotes/)





Seriously

There is no set way in selecting your team, there is so much to consider. 
The usual way, however; is picking the people with the best individual skills picking your friends for your team.
If the team size is too small, you break the team into two, and then assign the best coders into the respective leaders and continue.

Is this the right way? Yes, and no.
No; 
because theoretically this is flawed. You will never end up with the best team suited for the task. You should get the people that are not onlyindividually good; but people who are ready to commit to work. Who will do work, and are good at being part of a team.

Yes;
because practically this is what will anyway happen. You will enjoy time with them more without working with strangers, and most improtantly of all; you will learn to work in the actual environment. You will never get a perfect team in real life, nor will you be able to create one. A perfect team is one that balances its skills and shortcomings, overcomes what skill-gaps they have and then perform to the maximal output that they are capable of synergistically. 
Just because the team consists of the best coders in the class does not mean that it is the best team around. The team needs to be driven, focussed and the members need to communicate and grow within the confines of the team to be successful. This does not require high levels of skill.

Here is where the value of a leader comes in. There is a clear difference between a manager and a leader and they should know that. Manager has his powers from the position that he holds and he has subordinates. Leaders do not have their power necessarily from the position and they have followers and not subordinates. It shows that all leaders are managers but not all managers are leaders. Therefore for the team to succeed; a good leader should be present to maintain the coherent bond between the team members. 

Realized how I used team team team everywhere instead of using the word group? This is because a group is just a bunch of people grouped together with a set of common interests or traits. A team however is a group of people that is working towards a specific goal. This goal is what the team leader should give to the followers as their ultimate view and motivate them to achieve.

Therefore, never be concerned about the people that are in your team. Take it as a challenge. As experience in working in the real industry








 

INIT

First post!

Why I created this blog? 

Seriously, it really is a waste of space in my opinion. But we are tasked with creating a blog for our Software Engineering Project for the final year at Curtin University. Nuwan sir, the head of this unit told us that this is optional for us. But then SLIIT being SLIIT, a week before the final presentations they say that we need to make one if we need marks. So it's actually MUST that I annoy you by popping up on random google searches. I know I know, it's supposed to be an official blog and one of you reading this might be a lecturer. But if I am going to write a blog, the last thing I am going to do is be pretentious and not speak my mind. Permission to speak clearly SIR.

...not.

What I hope to do on this blog?

I don't know. Really. But what I'm NOT going to do is to tell you meaningful things that you really  need to know, like "The meaning of life", "How to hack your ex's facebook account", "How to get to sesame street."
Now that the intro song to the sesame street is playing in your head, lets continue.

What I will (being an optimist) try to tell you is how I did things. How I solved things. What went through my mind. And stuff. With excessive periods. When I face a problem and I absolutely HAVE to solve it, usually for the sake of marks. The true power of a good software developer is his ability to Google. So this blog will honestly be a dump where most of my findings have been filled to. So it might make your life a little easier, or way more difficult depending on when you are reading this. 

Who is my audience?

I am aiming this blog to the whole world, having completed a degree on management and marketing, and almost completing my second degree on software engineering, I will try to educate the general masses on how to combine these two and deliver good software packages, manage your team and how to market your product well. Most of the time I will be delving into the intricate details of problems and help you solve them by sharing the way I solved things. I will comprehensively.. ok I think I over-sold myself enough.