Ask Slashdot: How To Begin Work In IT Freelancing?
king.purpuriu writes "I'm a computer science high school student, and I'm looking for some work in IT freelancing. I have had a interest in computers and programming for a while, and I began learning on my own before high school. I would like to gain some experience (e.g. what the bulk of the jobs in various markets require, various technologies/frameworks and their usage) and possibly make some money on the side (not expecting too much; at this point, any non-negative amount will do). Key areas are web development, app programming and scripting. What solutions do you recommend? Any tips or tricks of which I should be aware? How should I deal with payment (in terms of fees and commissions; I'm from European country), and what type of work should I seek out? I would also be willing to do some small stuff for free in order to gain experience (small, static sites, small scripts, etc.)."
1. Get some experience not doing freelance (know the tools of the trade) - Dont just default to freelance because you can't find a job. 2. Create a Website with a portfolio of your work. (this does not need to be for actual customers, could be ideas you have come up with and made, eg for web development create some word press sites / joomla or similar, create some sites using the language of your choice, for me that was PHP and the whole LAMP stack. and some sites using a framework like Yii (or what ever). and mingle in some JQuery / JS / LESSCSS. 3. Profit??
I have created whole e-commerce systems for free, and that was ~9 years ago. Really, the market is so competitive right now that the only way you're going to get paid with your knowledge is thanks to everyone's favourite abuse of capitalism: information asymmetry. Find small organisations who have so little clue about IT that they think that abilities like yours aren't dime-a-dozen.
Alternatively, accept that your abilities are tools to enhance a career rather than career-worthy in themselves. Either learn to become a software engineer in the full sense, worrying more about learning than earning at this stage, or find something else that you like, safe in the knowledge that your IT skills will make you a more valuable member of any team.
What people are hiring in a freelancer is experience and skills and experience and ability to hit the ground running and experience. Oh, and experience.
Do ten years in a proper job first to learn this stuff.
Personally, I would recommend that you get a full time job first. After a few years, when you've had time to build up commercial experience and a good couple of names on your CV (resume), you can hop into the freelancing circle.
Freelancers tend to command more money (certainly in the UK a contractor's daily rate will be more than double that of a permanent employee). There are often A LOT of people chasing these jobs, especially these days, and without proven commercial skills and those client names to back up your experience, you could well be ignored.
Start with a full time job first, get the experience and then start offering yourselves as freelance.
THE HONOUR OF THE KNIGHTS - CC Licensed Sci-Fi Novel
When I was in high school, I made web sites for realtors. This was back in the 90s when any sorta webpage would pretty much do. Looking back, there were a lot of areas I was lacking in.
One was simple business skills. First is finding a decent niche to sell your services to. That was pretty much handed to me given one of my parents was in real estate. Apart from that though, is marketing yourself. As a skilled developer, you have the ability to bring value to other people. You have to be able to convince these people of this simple fact. This is a whole different skill/world than development. It's a skill that is equally valuable in life though.
Anyways, a few random tips. Don't undervalue yourself, your skills, and what value you are providing to others. It's probably worth more than you think. As far as payment, work out what is agreeable to both parties. This again comes down to "business skills". Also, a good knowledge of your local laws is handy where as a worst case scenario.
Finally, take what work you can get that doesn't sound horrible to you. Any work is good work. In the "real world", most jobs are not dream jobs. It's one of those sad facts of life.
This, but let me elaborate.
Being able to "program" is a severely minor part of your job as a software engineer (or similar professions). Most highschool kids dont realise this because their projects are usually of a very small scale (php webforms and such) where you can ignore half the job and it'll still look decent. You don't have to deal with complexity of projects, you don't have to deal with other programmers working with your code, you don't have to deal with security at all since noone is gonna be using the thing let alone hack the thing. In short, you really only know a fraction of what you should know in the business, which isn't really a good thing for someone not working for a boss/team.
More importantly though, programming by itself is a bit of a dieing profession. By this is mean, it's kinda like being a typist 20/25 years ago. Back then not many people could work with a computer, and of those who could (a little), most were very slow typers, so they hired typists to do the work. As time went on, more and more people learned to use computers and learned to type adequately. Nowadays almost everyone you'll see in an office will be able to do their own typing work.
I kinda feel like it won't be long until programming is in the same position. Scientists all have a decent enough grasp of programming that they cobble together their own software/algorithms without the need for a software engineer. Small businesses and the like are building their own websites through CMS software packages. I could go on and on, from every possible side, the market for ACTUAL programming work is shrinking compared to the growth of the overall market.
I would say, think about all the jobs that require programming to support it, and consider if you wouldn't like to learn a job like that, and ifso, study in that direction.
What solutions do you recommend?
I assume you're talking about languages and such here? Use whatever fits the bill most. Often nowadays (for generic projects and web projects) you'll run into PHP, Java, C#, C, C++, Lua, and a bit of Ruby i guess.
How should I deal with payment (in terms of fees and commissions; I'm from European country),
That's entirely up to you, you don't sound too worried about money yet (probably living at home), so take advantage of that. Offer a free mockup/preview version for free and tell the client that you expect the project to cost (let's say) 1000$. Tell them that if they like the mockup that'll be building over the next 2 weeks, they have the option of paying 500$ and the other 500$ after its completely finished. Also draw up a quick&simple list of the features that the project should include and ask them if that's really all they had in mind, tell em anything not on the list, which they ask for after the fact might cost more money.
and what type of work should I seek out?
I can't answer that, pick whatever you like the most, or what you're best at. If work is scarse pick whatever you feel you can do without much problems.
I would also be willing to do some small stuff for free in order to gain experience (small, static sites, small scripts, etc.)."
You can, but generally it's not worth it. In my opinion only do this if you feel you either really enjoy doing it, or if you think it's gonna somehow increase your profile with potential clients. Noone is gonna care if your CV says you checked in some code to Wordpress once.
Don't! Your time is better invested in actual studies, where each university credit will lead to a better position in the future job market. Study harder, study more. Writing code is done by thousands of indians and chinese, and you DO NOT want to be in a position to compete with them.
I would strongly recommend you to get out of the programming/IT sector all together. It is NOT a future business in Europe. It pays poorly, and is subject to massive outsourcing to Asia.
If you must work in IT, consider something which is close to the customer: Sales, Management, Relationship intensive design tasks. DO NOT ENTER A CAREER IN IT PROGRAMMING. You will be competing with millions of poorly paid Chinese and Indians and companies will always outsource to the lowest bidder.
I have 20+ years experience in IT, and I've seen 5 companies outsource all European operations to Asia already, and I see it happening all the time over and over again.
Study hard, study more. Study something which can't be outsourced: M.D., Lawyer, anything in construction.
Avoid IT like the plague!!
I could go on and on, from every possible side, the market for ACTUAL programming work is shrinking compared to the growth of the overall market.
Is there any evidence for this? My experience is the opposite to be honest.
Have a BSc or better (normally in Computer Science or similar IT degree), plus several years real job experience. As someone has pointed out, being a significant contributor in Open Source projects may also get you noticed.
It doesn't rule you out of being an IT freelancer, but I suggest you plan an educational and career path, as good pay only comes with good qualifications or job experience.
Donte Alistair Anderson Roberts - hi son!
Karma: Chameleon
Seriously though, if you just want experience, what about helping out some open source project? Pick something you can keep your interest in, and the moderators on the project can suggest how you can improve your code. It seems from the above advice that freelancing is more for experienced coders. This would improve your own code, help the project and look good on the CV/resume.
Having worked as a freelancer for most of my worklife, I can chime in with a bit of stuff.
First of all, personal traits:
Self-discipline, self-discipline, self-discipline. You need this to complete your contracts on time, in accordance with the contract. It means being able to sit down and do everything required to fullfill the contract. It also means being able to work with people you dislike on a personal level. It means maintaining a clean, whole persona. No, it doesn't mean three-piece suit, but it means not showing up in tattered jeans, faded t-shirt etc. It means having the discipline to tell your friends that you can't spend time with them if they have a day off, because you need to stick to your schedule. Discipline enough to hold on to your money, because you never know when you'll have a 2-3 month dryspell.
Also, maintaining separate accounts for personal use and professional use, as well as separate hardware etc
Integrity:
Accepting a contract is your word. You have to stick to your end of the contract, otherwise your reputation will suffer. And reputation is EVERYTHING. Do not accept contract that you can't complete, even if the lure of the money is strong. If you believe it's highly unethical to complete a certain contract, feel free to not take it(This is one of the major perks of being a freelancer, not being a wage-slave). Never ever blindly accept your potential clients estimates of time required etc, always do your own estimates BEFORE accepting the contract. If the client is trying to keep you from doing that, they are out to try and get you to work for free, or at least really cheap. Do not EVER complete tasks/favours asked of you by the client that fall outside your contract. Stay out of the office politics. Maintain customer confidentiality within the boundaries of the law and your ethics. I won't sell out my clients data to any competitor of theirs, but if I become aware that the data I'm working on is evidence for a crime, I'll contact the police. I will NOT make myself an accomplice.
Other things:
Try and go into a niche field. The more general areas are oversaturated. You can't throw a stick without hitting a "html/SOAP/PHP/PERL/JAVA/Social Media "expert"". Comp sci PHD's are becoming fairly common that it's close to employers market. There's a shortage of competent software engineers on the other hand, especially for embedded stuff(counts 40 offers listed on agent's summary, while only one of us who works with the agent is currently available for a contract.....)
ALWAYS retain the services of a lawyer when evaluating and negotiating a contract. It will save you a lot of headaches as clients try to catch you in horrible penalty scenarios in the fine print, or even clauses that are completely illegal. Go for solid but not flashy reputation, preferably one who also wants a long term client relationship. If a client says you don't need to bring a lawyer because they have retained the services of one for you, politely tell them you're not interested, because they ARE out to screw you over.
Likewise, an accountant is a good service to retain, to keep track of your economy and keep you grounded in reality. As with the lawyer, go for a solid but not flashy reputation, and who is interested in a long term client relationship.
An agent is also a good thing to have if you become proficient and sought-after. In my case, my lawyer is also my agent. He receives the contract offers, reads them through according to the guidelines I've set for what offers I'm interested in, and if it's something he thinks fits the criteria, I get them forwarded to me. He also maintains a list of more general offers that any of us who retains his services can inquire about
In terms of payment, I use escrow and direct transfers primarily, sometimes invoices. I NEVER accept cheques, which makes quite a few potential US clients rather unhappy.... The reason for escrow is to make sure the client has the ability to pay, and from the third-party escrow account it's
You say you're from "Europe" (does that just mean you were born in a european country, but have moved elsewhere - or that you are a legal resident and intend to work in a european country? the difference matters and is huge). Assuming you are hoping to get a job in a european country you need to be aware of the employment laws where ever you are.
You cannot expect to say "I've just finished my secondary education .... I think I'll become a freelance programmer". Nobody will touch you. The first thing you need is experience. The second thing you need is more experience. After that, you need to demostrate a good, long, relaible history of producing successful results in sectors that have lots of vacancies.
You will also find that in some european countries, no company will hire you directly as the employment and tax laws could make the company liable if you fail to pay your taxes. The company could also find that i'ts taken on an employee, and that you have employment rights (long holiday entitlements - 25 days paid, min. , sick pay, pension, and/or that you are unsackable if you "contract" there for too long.
The first thing yo need to do is research the laws in your country, get a degree, get some experience and then consider whether the eceonomic situation in 3 or 5 years time is suitable for a freelance worker.
politicians are like babies' nappies: they should both be changed regularly and for the same reasons
When bidding a project, I recommend you split it into two:
1) scope and prototype
- enumerate exactly what the features will be
- create a mock-up of how it will look and function so the client can visualize what the scope includes
2) the actual implementation of (1)
Clients never know exactly what they want. Even after seeing it and using it, often they discover it's not quite what they needed. This causes feature creep--which is the bane of all software projects. You have the conundrum:
a) you charge a flat fee for the project, meaning the client gets infinite features for a fixed rate and you lose
b) you charge an hourly fee, meaning the client feels screwed the more they realize they forgot stuff or didn't originally understand it well enough to tell you "right" the first time
I've found that this approach allows you to help mitigate this. Do (1) at possibly a lower rate than (2), and even do (2) at a fixed fee if you are confident in your estimation of the work involved, but only after (1) is complete and they sign off on everything in the scope and how you've demoed it to look and feel.
There's nothing wrong with starting as a freelancer.
I respectfully disagree.
As a freelancer, you need to be able to operate with a degree of autonomy. You need to be able to take general direction from a client, work out what it is that they need, and provide it. You need to find your own tools, and develop your own skills.
Coming straight out of full-time education, I don't believe anyone has the experience to do that yet. You could be the most talented and enthusiastic person in the world, and perhaps a few years down the line you'd be a great freelancer, but at the start of your career you don't even know what you're missing yet. You can be completely sincere in your desire to do a good job, and still be utterly incompetent without even realising.
Even today, after working in a few jobs as an employee and now being freelance for a while, the thing I miss the most is still the shared experience/peer review side of things. That kind of interaction can be very educational even if that wasn't your original goal, and if you're going to fly solo you need to find a different way to maintain your awareness of the industry and develop your skills. That's difficult even for someone who knows roughly what they're missing, and I suspect it's impossible for someone who doesn't.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
I have worked freelance/contract almost my entire life, despite leaving school at 15 and only getting an Open University distance learning degree in Computer Science.
The most important thing you need is a portfolio of work that you can demonstrate. This is "proof" of experience and counts for more than almost anything else. Having a university degree is a more of a tickbox line item on your CV, at least it is when you have one, though you may have work harder at proving yourself without one.
The trick to building up a portfolio is: find a problem and then solve it. This is the entire essence of IT contracting/freelance work, people have problems and they need help to solve them. The best way to demonstrate that you are in a position to solve somebodies problems, when you are asking them for money in exchange, is to say "I can do this, I solved a similar problem for X, Y and Z, this is how I did it and I can do the same for you". The catch-22 of the contracting world is that it is difficult to get experience unless you already have experience, and even when you do have experience you can get a little stuck inside a niche.
Individuals, charities, NGOs, online communities are all places that often lack money for "professional" help, but may provide an useful source of problems that need solving where you are not going to get out competed by lack of experience. Compared to an individual who knows nothing about computers, you are highly experienced. There may not be much money involved in such projects, or any money at all, but this also gives you the freedom to say "let me go away and play with this for a while and see what I come back with" and deliberately try to stretch the limits of what you can do, rather than being tied to "I will deliver this specific spec by this specific date for X amount of money". Any job or project that you do, even if it is not paid, is 100% valid to go on your CV (you don't need to mention money on your CV).
My first website I built, www.starsfaq.com was a very simple HTML and just a collection of everything I could find out about an online game. Later I had a girlfriend who was an activist and she convinced me to build www.earthemergency.org which required writing slightly more "pretty" HTML and www.sustainable-society.co.uk which gave me the challenge of writing a database driven Content Management System (CMS) from scratch using PHP. During my first "proper" job-interview for a tiny digital agency, I had a 5 page CV of small unpaid projects like this, websites and small desktop utility programs, plus an unpaid job being webmaster and IT manager for a startup NGO www.worldfuturecouncil.org. I was asked to show code samples of my previous work and managed to get the job. It only lasted three months, and I admit to making a few mistakes during that "first" job, but getting fired from this "perm" job was one of the best things that ever happened to me. I put the job down on my CV, added all the agency projects I had worked on to my portfolio list, knocked off a couple of the smallest projects from my portfolio (that now look "silly" compared to a couple of small "commercial" portfolio items) and went right back onto the job boards with a full time mission to find myself another job. My CV now looked twice as good as it did before and I had "recent" work experience in a full time job. Chance then sent me my first "contract" job, doing 6 months of web scraping for www.hotproperty.co.uk getting paid by the hour, the job after that landed me back in a digital agency www.idmedia.com where I got to do my first "big" website, the now defunct www.sugarmagazine.com. A few years down the line and I managed to get big name brands, and big brand money, working at www.ft.com, www.premierleague.com and www.barclays.co.uk
Each contract, usually working 9-5 and getting paid by the day, tended to last 3-6 months and in each case was a stepping stone to bigger and better projects and bigger and better brand names, and bigger and better rates. During the ascendancy of my career,
To be fair on the client side: In many ways we can't know what we want, it's like Jeopardy - we don't have the knowledge to ask the right questions. I've commissioned a few small things here and there, and I much prefer a dev who will warn me if I make a mistake in my wording that entails 500 hours of work, rather than just clunking down to it, only for me to discover "well, my 7 hours of paid time vanished, and the dev didn't bother to tell me that what I asked for could never be completed in that time."
Meanwhile, of course this young guy should continue to study, but actually trying his hand at writing some real code gives context for those studies. Let's say he takes me up on my offer to give him some small things to thrash around on. When he comes up against specific problems in my assignments, then later when he studies, he'll remember "oh, yeah, if you don't do ____ and ____ and ____ when making X kind of program, Bad Things happen." THAT is the fundamental flaw in college - your basic theory might be good, but when it comes time to solve actual coding problems, there's no substitute for having hands on practice.
My first Journal Entry ever, in 8 years! http://slashdot.org/journal/365947/aphelion-scifi-fantasy-horror-poetry-webzine
I have to say that the AC GP post is pure weapons grade baloneyum, and I suspect we both may have just fed a troll.
The typist argument is a bit of a strawman, as most people can easily type, and the quality/recognition of the quality of the product is pretty self apparent. A more apt comparison would be to compare building a website, to building a shed. Sure, you can do it yourself, and if you're a handyman, it might look kinda good. But generally it won't come in at the level of quality, or at the real cost (if you yourself are worth anthing, your time is not free) of a seasoned professional who does it day in and day out.
Building software as a programmer in this analogy starts at building a house. How successful do you think the average person would be at that? And for the really big enterprise projects, you're talking a skyscraper. We even have similar roles such as Architect, Developer, Quality Assurance, Project Manager etc. for an undertaking of that size.
I think the people who believe that software engineering will disappear are the same ivy league management graduates who think that shipping work off overseas to be done by teams of monkeys on typewriters in a sweatshop to reduce costs on what they see as a non-revenue generating, but somehow magically essential to the company service as equivalent in quality, and yet cheaper in overall price. Most companies who are doing this, learn the hard truth on the bottom line, or miss it completely and just mysteriously feel it in their wallets.
To the person asking the question about the industry, it's simple. Do interesting projects. Money will come with talent. Unless if you are in a team, with some really good and/or experienced people who can clean up your rubbish, and hopefully that you will learn from as well, your first few projects will fail. We've all been there. Don't be afraid to do so. Like a friend of mine always says, Silicon Valley was built upon the bones of failure, just don't let them be your bones.
Science advances one funeral at a time- Max Planck
I kinda feel like it won't be long until programming is in the same position. Scientists all have a decent enough grasp of programming that they cobble together their own software/algorithms without the need for a software engineer.
Decent enough grasp of programming? Do you even know what that even means. I work, and I have worked, with scientists and EE majors who write copious amount of code (which sadly I have to deal with), code that looks like this (yes, this is the type of code I've had to deal with from such scientists and EE majors, and to be honest some CS majors, I'm not making this shit up):
do{
if (!condition1){ break; }
else{
if(! condition1_a}{ break; }
else{
}
}
if( ! condition2 ){ break; }
else{
}
if ( ! condition_I_lost_count_how_many ){ break; }
else{
}
while(0);
People who, intelligent as they might be, still don't fucking get why it is important to layer your functions, as opposed to opting for direct access to the same set of pointers spread all over the place. People who tell me they can write a compiler just with a look-up table based search/replace approach. People who tell me programming is nothing but if statements and for loops and that encapsulation and modularity are just academic shit that no one really uses.
Better yet, I've had project managers of a scientist/EE background telling me, and I quote, "we do not need a design, by the time we are in the middle of it, code is different from the design and things changes, so a design is superfluous" (this for critical systems with SLOC counts in the millions.)
It is a meme so consistent across companies it cannot easily be dismissed as a generalization.
You, sir, don't know what the fuck you are talking about, and this mentality is the root of all the evil code monkey shit that we see in the software industry.
I agree with you completely.
One other issue that bosses and clients seem to be unwilling to accept sometimes, is an "I don't know" estimate.
No matter how similar problem A may appear to problem B, quite often the details may be such that the developer cannot really know how long it will take--it's different enough that it's essentially a new problem to solve. Often times, solving a problem is exactly like finding your lost car keys--you just don't know how long it will take you. These scenarios do occur, and they frustrate all parties--the boss/client demanding an estimate, and the developer who is struggling to not be forced to give a WAG and later be called out on being wrong. No matter in which direction he's wrong, both look bad--if it takes far less time, then he is suspected of padding other things, and if he takes much longer, he looks like a bad estimator or worse--a poor performer.
It's a necessary part, but I think it's arguable that it's minor it doesn't comprise most of what a software engineer needs do know and be good at.
In my workgroup, we have a number of people in the software department. They all know how to program. They all carry the title of Software Engineer. But some of them are really just programmers. Here's what makes the difference in my mind (from the perspective of a hardware engineer):
Ability to assess the amount of work necessary to complete a complex task.
Ability to clearly communicate the status of their efforts to technical and non-technical managers.
Understanding and support of the big picture goals of the organization.
Ability to break a large project into tasks that can be executed by several programmers.
Awareness of the methods used in industry generally to solve problems similar to the sort that we deal with regularly.
Awareness of methods that have nothing to do with what we do.
Willingness and ability to do research.
Ability to devise new methods that improve on previous methods.
Production of well-documented work that can be easily reused by other programmers.
The habit of making code designed to be easily extensible and reusable.
Ability to read an electronic component's data sheet and figure out how to drive it.
Ability to advise hardware and firmware designers what it will take to run their software.
Ability to communicate the limitations of their solution.
Whatever man. I'm more than happy with your "rejects".
Yes, 1+1=2. 2+2=4. 4+4=8. Except when it comes to resources. 1 resources that is 10 times as good, is worth more than 100 resources at 1/10th of their ability. At least with the 1 resource, you don't need the QA to weed out the crap that doesn't work, and over time you don't accumulate anywhere near the amount of code debt.
;)
But then again, I guess I'm responding to an Ivy league graduate.
Science advances one funeral at a time- Max Planck