Home > Articles > Freelance Developers >Does a Freelancer need Software Engineering?
Does a Freelancer need Software Engineering?
Tarek Negm
There is no right or wrong answer to the question above, this may sound strange a bit but I say that the answer for that question mainly depends on another two questions:
- How big is the project the freelancer is working on?
- Is he working alone?
If the freelancer is working on a small project, maybe taking a week or two max, then he definitely doesn't need software engineering in this case. He probably will waste more time documenting the project than doing the actual implementation. But here I am talking about really small projects, like for example developing a small calculator. Moving to large projects, the developer cannot just go on programming the project. Normally, he will have to break the project into different phases, where each phase will represent a milestone for the client to see. Then to ensure efficient implementation he will gather the client requirements, document it and then present it again to the client to approve it. After approving the requirements the developer will have in his mind the technical specifications of the project (this part is not put on paper by developers usually). Then he will start implementing the project. Actually, by doing this, the developer has gone through some software engineering methods, like requirement gathering and analysis, then preparing the software specifications document, which is the information he has in his head.
Another important thing is whether the developer is working alone or not. If the developer is working with a team then software engineering is a must. I am not saying working alone makes it unneeded, but as I explained above, if the developer is working alone, he may not need software engineering. Instead, working in a team with out having the project correctly managed using software engineering techniques will impose more overheads on the developers. These overheads will be imposed due to lack of fruitful communication between developers; they will probably be engaged in very long conversations that may end up with no result or a result that would have reached in a very little time if they were somewhat more organized. Also, the lack of a common and agreed upon guide for developing the project will be a big problem, to give you an example of this case, consider two developers working on one project and they are developing two inter-dependant modules. If they don't have a prior design to the project, they are most likely to develop conflicting interfaces, as we said before each module uses the other one, so how would anyone of them know what does the other need as an output from his module or what functionality he may want from his module. So they will probably implement two modules that won't work together. Then they will have to revise their code, re-implement it, sit together to agree upon what each one needs from the other (communication overhead).
So to answer the question that is the title of the article I can say that, excluding the very small projects like the small calculator, a freelancer needs software engineering. He needs to ensure that his requirements comply with that of the client. He needs it to organize the project into phases. He needs it break the project down to components. And he needs it for avoiding the overheads described too. Moreover, he needs it to document the project. Documentation is now a primary issue in software industry. Before, people didn't really bother about documentation, but now, it is an important deliverable in the project with the code. This is due to the rapid technological advances that occur each day now, which makes a client making a software worry about how to upgrade it or add to it advanced features in the future.
Software engineering to a freelancer is important because a freelancer is involved in all project phases. He is not only a developer that gets some requirements and codes it; he is also the project manager and the business analyst. Being familiar with software engineering techniques is a virtue to a freelancer. Clients dealing with professional freelancers aware of such techniques will definitely look for them again if they have other projects.
In this article and the following articles I will present a case study of a product I was involved in developing it in a team of 4 members. The product is a News-Ticker program running on the user's machine, displaying news headline from user defined sites. And the user has the ability to launch-from the program- the browser to view the news he wants. The project may sound simple, but as we go into the details you will see how simple requirements like the one above turn to make a big project, with many user features. I will begin by presenting the project requirements in the beginning as we got it initially from the user, then move to the requirements gathering phase in the project, then our analysis to these requirements, then how we put the software requirements specification document, then implementation. In each part I will be explaining the phase I am in, in software engineering and what should I do in it, and what we actually did.
Initial Requirements: When we first met the client his requirements were simple and straight forward; he said: "I want a news-ticker, something professional I can sell, the news-ticker allows me to enter the news sites I want news from, and it displays the headlines of all these sites, and if I want to see a certain piece of news, I want to be able to click on it and open the browser on the its page"
Very simple as we can see in the beginning, but usually the client's requirements are not that straight forward. The client -usually not involved in computer stuff- usually has contradicting requirements. In the above description there is no contradiction, but are these the final requirements? Of course not. The more you talk to the client, the more he adds requirements. This is because the client has an image of his product in his head, but he doesn't express it completely from the first time, any human does this, he may forget some things or adds new things he finds that he needs. That is why a professional freelancer asks the client questions and engages with him in a conversation about the project. He tries to get the most out of him. He doesn't sit with the client only one time to get the requirements, he sits with him as many times as he sees appropriate. When he feels that the product he has in mind is what the client wants, he should start working. The thing here is that the freelancer should not waste the client time with too many meetings, he tries to make his meetings as minimum as possible, by asking direct questions and useful ones. A professional freelancer also should be intelligent enough that when he finds that an additional requirement to the project that the client did not require but he knows that it will satisfy the client and he can easily do it, he should suggest it.
Giving examples of the questions we asked to the client:
1- Do you want the news-ticker as a stand-alone application or you want it in web page?
He replied: no stand alone, this will allow me to view headline without having to open a browser each time.
2- How many news sites do you have in mind as input for the program?
(this may sound strange, but look what you get from the answer) he replied: no limit, I want to be able to add a news site dynamically, each time I want, and I want to be able to categorize these sites (new requirement) so that I have, financial sites alone, sports sites alone ..etc.
3- How do you like the news headlines to be displayed?
He replies: I would love to have two options, scrolling vertically or horizontally (new requirement). I also want to be able to change the font and color of the text by which the headlines are wrote (new requirement).
These were sample of the questions a freelancer should ask. The client usually doesn't have any technical background and he assumes that some things he has in his head will be present in his program by default! So a freelancer must get these things out of his head and put it on paper. The questions should be non-technical at all, just normal questions as the ones above. Simple questions that are made intelligently will definitely get the most out of the client.
After this very first meeting with the client, a freelancer should come out with a general idea of what the project he will be working on will look like. He knows the initial requirements of the client, but all in his head. At this point, the freelancer should go back home, and open the notes he just taken from the client and begins analyzing his requirements and drafting the first use-case model for the project. A use-case model is simply a user-oriented approach to system analysis, where the freelancer will identify the users of the system and the tasks they perform with the system. Also this includes information about each task so he can identify which is most important and should be implemented first.
At this point the project started to the freelancer. So what does he have to do now? The very first thing is to identify which phase is he in and to plan his next three or four iterations.
Last paragraph was very vague, I know, that is why I am going to explain now the important concepts in software engineering that I used in the last paragraph, the first one is "iterations". Every project should be divided into four main phases:
- Inception phase
- Elaboration phase
- Construction phase
- Transition phase
Each phase of the previous phases can have as much iteration as needed. The number of these iterations differ depending on the size of the project. But by the end of each iteration, the freelancer should have a working version of the product he is working on. The iteration is a complete cycle including requirement gathering, analysis, design, and implementation and testing of the product. The goal at the end of each iteration is to have a working version of the product that the freelancer can add more functionalities to; such that, by the end of the all iterations the freelancer will have his product having all the required specifications.
Getting back to phases; in the inception phase you stress on gathering requirements mostly, you try to -as the title of the phase says- start the iteration by identifying what you want to do in it. In the beginning of the project, usually the first two or three iterations involve the client, to get more requirements from him or to ask him for clarification about a requirement, these first three iterations are usually in the inception phase. The inception phase doesn't mean you will not implement or design anything. But the case in this phase is that the freelancer should have a very simple version of the application running with very basic requirements. The iterations in the inception phase usually have very little progress in the implementation of the project. This is of course because the freelancer is still getting everything in his head.
In the elaboration phase there is less stress on requirements gathering and you start analyzing these requirements. You start looking and getting a feel of the project, now you know what you want to do. So how can I plan doing it and what do I need to do it?. These are the kind of questions you will ask your self at this phase. This phase also includes the design of the project. As a result of analyzing and planning the project, you begin the design.
the construction phase, you complete the design of the project and you start implementation. At this phase, programming gets the upper hand. Normally when you reach this phase, you should have passed several iterations in the beginning, in them you finish implementing the basic functionalities. So in the construction phase, you begin implementing the complex functionalities, which is why the stress in this phase is upon implementation. Needless to say that implementation includes programming and testing.
In the transition phases, you should have finished implementation and you are about to produce the final version to the client. In this phase, the implementation is still involved for bug fixing; in case you found a bug before handing in the project. This phase is the one in which you finalize the product before production.
Now, moving back to the case study we are doing here. After returning from the first meeting I mentioned above, we held a meeting to begin work. And this I will discuss in my next article, in which I will apply the above concepts of phases and iterations to the news-ticker program, and show how we divided the project into phases and iterations.
Please, if you have any questions, don't hesitate to send me a mail on the address below.
Tarek Negm
teenegm@yahoo.com
HOW TO SET YOUR FREELANCE RATES - A GUIDE FOR FREELANCERS & CONSULTANTSThere are many factors which business owners must consider on a daily basis as it relates to the running of their business. Things such as how to find good help, where to acquire supplies and how much to pay one’s employees are all pertinent matters which must be addressed. There are a few ways to go about figuring out your rates when it comes to how much to charge the customers.
BlinkList | del.icio.us | Digg it | Furl | Netscape | Onlywire | RawSugar | reddit | Spurl | StumbleUpon | Yahoo MyWeb








