I've been working on a freelance job for the past couple months. I can't get very specific about what I've been doing because of non-disclosure agreements and such, but suffice it to say that it's an interesting project. For someone else, that is. The main reasons I took the job are because I expected to have a little free time between semesters and it was supposed to pay well.
The first strange thing I noticed was that it took a considerable amount of time to get any sort of information about the project after signing the appropriate documents. Never once had it taken that long to get any useful information on a freelance project.
The second strange thing about the job was that the terms of the deal changed by way of compensation. This was excusable because of my relative lack of experience with certain required technologies.
Anyway, after I got the initial requirements and specifications document for the project from the client, I was surprised at how incomplete and unclear it was. I am used to very explicit documents for requirements--at least several times more explicit than this particular document.
Now, everything up to this point was quite strange, but I kept going with the project anyway. Naturally, this project required that I use some 3rd party tools and utilities in order to arrive at the end product. The first week after having received the specifications was spent almost in its entirety trying to get one of these to work properly. Thankfully, this particular utility was open source, so I could freely make modifications to fix it. After a week of off and on debugging, I found the one line of code that I needed to change in order to make the entire utility functional.
The next week was spent working on the basic structure of the project setup. I did what I could with the meager requirements and specifications that were provided me, requesting clarification repeatedly from the client.
It wasn't long after this that there were some hardware failures on the client's end. This effectively stopped all development for nearly a week. After that problem was resolved, I was able to resume development again. I wasted some valuable time just trying to remember where I had left off. Anyway, development resumed.
As I encountered more uncertainties with the requirements and specifications, I attempted to ask my client which direction I should go for various situations. In many cases, I was met with disdain and disrespect. I usually have a good amount of patience in any situation, but all of this put together really frustrated me. It got to the point where I just wanted to pass everything I had done on to someone else. But I kept going.
Time went on, as did development. Things came along pretty well in the last few weeks. However, the client felt the need to change the project requirements on me time after time after time. And still, I went forward. On several occasions, when asking for more information about these new requirements, I was basically told, "Use your best discretion."
WHAT THE HECK IS THAT?! I mean, I'm a freelance developer working on a project for someone out there. They are supposed to know all of the details (as far as features and functionality are concerned) about their own project, and they're telling me, "Use your best discretion!" Come on folks! You are in charge of coming up with things like that.
To go along with that, today I was asked to implement a feature that was in the first revision of the requirements but removed from the second revision. When I asked for more details about the feature (the original specifications only had two short sentences pertaining to this feature), again, I was met with something like, "Use your best discretion." This time, though, I went on to request more information, explaining that it wasn't my place to determine this information.
I asked my client a series of maybe 20 questions pertaining to the requirements of this feature. It seemed as though my client had never actually considered the questions and situations I was wondering about. I told them to thoroughly consider their feature request, write something formal and detailed up, and send it to me when it was done. At that point, I told him, I would review the information they provided. Then I would respond with any questions or comments.
For anyone out there who has recently considered hiring a freelance developer: do yourself and the developer a favor. Think things out thoroughly and have details prepared for when the developer begins working. Detailed requirements help guarantee that the project will be as close to correct the first time, thus making projected timelines more reasonable.
In summary, if you're looking for a freelance developer:
- Have things ready on time: taking a long time to give your developers material makes time for the developer's situation to change. Maybe they won't have the time they were planning in order to complete the project if you take too much time to get requirements and specifications.
- Know exactly what you want beforehand: developers work better with concrete requirements. If you're not sure about something in particular, you'd better be sure it's not high priority and that it can maybe be done in a second version of the project.
- Don't change requirements after development has begun: If you do your part, you should not need to change requirements in the middle of the development process. Changing requirements only causes the development timeline to shift and makes the developers frustrated. Developers, as a whole, are quite testy and do not like having to redesign their entire code base.
I'm sure there are other bits and pieces of useful information I could add, but this about completes my rant for tonight. I hope you enjoyed it.