View Full Version : Advice for Aspiring Independent Programmers

December 20th, 2007, 02:39 AM
Previously in this link (http://ubuntuforums.org/showthread.php?t=640764), I discussed being a programmer for a company and the pitfalls with that. Now I'm going to be a little bit more upbeat, but realistic, with tips for the aspiring independent programmer. This is where you mostly work from home, and complete web development and database projects you pick up from the web.

It can be fun. The day job employer isn't skimming off 30% of your salary anymore. No more bozo project managers. There are no cubicles with regular walls or half-walls. There's far less distractions (at least until the kids get home). You have time to catch a laugh at YouTube or browse the news or your checking account without getting punished for that. You're not walking on eggshells. If you come in late to work, no one writes that down or gives you a funny look. You don't have to fight over a parking space or walk half a mile in the rain because all you could get was a space near the security entrance gate. When a project ends, you don't have to sit on your thumbs waiting for the next one and can do your own personal development (training) or find new gigs. So, unlike a company where they pay you a set rate during slack times, you can increase your income during slack time by finding more gigs. You can save gas. You can use the lighting style you desire for your home office, give yourself a better desk, LCD panel (or three) or computer, add plants, put yourself by the window, talk to a pet or a fish, and make your environment plush and comfortable. You can stop wearing suits and any kind of clothing you don't like. When angry, you can stomp off and take an axe to wood or drive off real fast without annoying the boss.

Your debt must be controlled. If you have a second mortgage, a boat you're paying on, fees to a club, or more than two vehicles you're paying on, I really don't recommend this lifestyle to you because you need to keep things as lean as possible until those things become mere trifles. The ideal candidate would be married (for some income to fall back on) and have nothing but house and vehicles in addition to the other bills. If you have other credit issues such as several credit cards or one credit card over $10K, then you're going to have to come to grips with that first. Use the credit snowball technique (google that) and a variety of other techniques to try and pay down that debt as fast as possible.

You need a spouse. Sounds funny, but I'm not kidding. You need someone else's cash to fall back upon if times get rough. You never know if you end up in the hospital or grow terribly sick, and every day you don't work, that's devastating to your income.

You need a supportive spouse. Your spouse needs to realize that this is the best thing for you, your personality type, or the family, and that if done properly it could yield potentially far more money than what a normal day job employer would skim off the top.

Get ready for chores. By being home, you're the guy that's going to be given the chores. You'll have to do the laundry, vacuum, shop and prepare for dinner, clean up afterwards, and do everything else with the house. You're going to have to deliver the kids to school and get at least one of them ready with your help. This kind of goes along with having the supportive spouse behind you. Now, your supportive spouse may say no, that making money right now is more important, and that can be cool, but be prepared to have to do the chores.

Don't quit the day job just yet. A day job is a great place to hit all the items in this punchlist which are possible -- paid for, if you can swing it, by your unknowing day job employer (if you're careful). You also need to have in savings at least 2 months salary and not be behind on any payments. In fact, you should always have that in addition to resigning on the day you've paid your current month's payments and have a new paycheck coming in. One person who found out I quit and didn't have this lined up like that called me "Absolutely Stupid. LOL." And you know what, I needed that swift kick in the pants. He was right.

It's going to take about 10 years after college before you're ready. In this field, you really need to have a career for two years as a Linux sysop, especially in a web environment with a web farm and a database cluster, two years as a fly-around consultant, and the remainder of those 10 years as a web developer. You can do them in any order, but you'll need all three in order to understand this market. You also need that college degree and the job experience to understand the true meaning of professionalism. Your future clients will demand it.

Get ready for long hours, initially. Yes, look forward to 80+ hour weeks at your computer, furiously typing away. It sucks in your first couple years. Eventually after that you can begin to slow down, but it sucks at first to have to put in all that work.

How fast can you type? If you can't touch-type fast, you better get darn good at it, and be very accurate as well.

Linux rules. Sorry, Microsoft, but the corporate world is trusting your products less and less for reliability, scalability, and innovation. All three of those things have been moving steadily or have moved or were already built into Linux, and the brainshare for server room stuff has been moving steadily to Linux for a few years now, especially since the year of the Blaster virus. Do you remember how Steve Ballmer on YouTube kept screaming Developers, Developers, Developers? It's because he's freaking out, realizing that the brainshare of the world's developers are moving at a rapid pace to Linux. And if you don't believe me, go look at the stats on various sites on what the most popular computer languages are, and what the most popular web server product is. And you have to move down to #5 or so before you see something that runs on Windows. Many developers in the Microsoft environment have steadily grown annoyed because they have to keep paying for MSDN subscriptions and downloading beta products, then reinstall their OS like 3-4 times because they keep messing with the DLLs while working with beta products, and then being annoyed to have to relearn APIs that were slower than last year's APIs and have new names but not much more functionality. So, anyway, if your skills are not with Linux, then do it now. Since you're reading this here in this forum, you're well on your way, but how well do you know Linux server products and, if I may plug Ubuntu -- Ubuntu Server?

No more than two simultaneous gigs. Two is about all your brain can handle without getting completely confused. I say two when you could probably handle three, but, instead, I suggest you heavily invest the other third of your time in Affiliate Marketing and Web Design/Web Hosting work. This is because it's quick, easy, is right up your alley in a sense, and can generate residual income to ride you through dry periods.

You're not just a web developer, you're an internet marketer. Again, this is because it's quick, easy (for you, at least), is right up your alley in a sense, and can generate residual income. There are many non-programmers out there in the internet marketing field, who would kill to have your skills and have to outsource all their needs. And several are making a killing right now, such as $5K a month with barely 20 hours of work every week.

You can pick your language and stick with it (for the most part). Remember all I said about being a programmer at a regular company and having to work with languages you don't like? As an independent, you don't have that problem at least with the programming language (for the most part), but in database API, you're going to need to learn several (and mostly free ones). So, which language? Well, to start with, you definitely need to know at least C (from college), get used to working with GCC to some minor degree, Bash, some minor Perl experience (unless that's going to be your focus), Javascript and DHTML, and then pick a favorite language. As for a favorite language, my suggestion is to see from the list of languages out there what's the most popular for the past 5 years on the Linux platform, and what the job postings are requesting. Try 3 or 4 for awhile until you find one that doesn't drive you crazy, and then know that language backwards and forwards. I don't suggest focusing on two main languages until you get a few years under your belt as an independent, or if you see the market turning unfavorably away from your favorite language.

You need to bring up a F/OSS site or two. You need to draw interest to yourself. You need to bring up a Free, Open Source Software site or two to show your work on a project that you strive to make popular, and to also put demos online for smaller things to demonstrate your design skills, database skills, presentation layer template skills, and so on. And don't focus on making the F/OSS site a tremendous success with people willing to pay for your consulting, tech support, or purchase the media for your software. I wouldn't even recommend doing SaaS work with that software because that can be a rat's nest and a lot of high expectations that drain your time. Instead, the F/OSS site should really be something that is the means to new ends, not the ends in itself. You can often reuse some or all the F/OSS project code on various gigs (depending on the agreement). If the product becomes popular enough, and you gain marketshare, then you might actually have your company acquired and you can move on to another project. Last, if the product does indeed generate profit from consulting for it, tech support, or media & documentation purchases, then more power to you -- it's rare, but fantastic when it happens.

Web Design/Web Hosting pays more. Sad to say, but making pretty web pages, sticking someone's content on it, adding a routine for signing up for newsletters and contacting the staff, and linking in paypal connections (extremely easy, trust me), then getting the product virtual hosted somewhere and appearing as if you're the web host when you're actually a reseller -- this sort of stuff pays more than web development. It takes far less time and gives more bang for the buck. It pays more, but you need to do both web design/web hosting AND web application development in order to ride out the tough periods.

Flash, sad to say, is extremely important. I know it's proprietary, but for now it's still sadly very important in this field. If you want to get design gigs or even keep up with the latest web application development, you're going to need to get good skills with Flash.

AJAX, JSON, XML, Javascript, DHTML, XHTML, Page Templates (Smarty, Symphony, etc.) and Shopping Carts. Those 8 things are critical to being a good web designer and web application developer in today's market. If you don't know those extremely well, don't quit your day job just yet. Hold on there, little fella.

Test on everything. Unfortunately in this multi-browser world, you're going to need to test with, at minimum, Firefox, IE, and sometimes Safari, and also test on the Linux, Windows, and Mac platforms. Every project needs to go through that cycle. Sure, start your development on Firefox with Linux, but then go bring up your page templates on the other platforms to see what's broken and fix it.

You'd be surprised by the people who call you. So far, I've been impressed with the knowledge, professionalism, and coolness of my clients. Instead of working around no-nothing bozo project managers and other annoying people, my clients have been 180 degrees in the opposite direction. My clients often have skills that far outweigh my own but in other areas that I do not focus right now, such as Asterisk. Perhaps that's just my luck, but that's what I've seen.

Think in three-week segments if you can. Every three weeks, you want to be lining up gigs for the next three weeks. And every two days, you need to be putting feelers out in that three weeks for the next three weeks' worth of work. Sure, projects may run a month or three, so you may have to deny a project offer, but I've found this system works well for most stuff that's outsourced.

Clients come from everywhere. I've had clients come to me from forum posts, one of my various blogs, or from my F/OSS project sites. Then, I've gone hunting for them too on Craigslist and various project sites. I've also gotten leads from many friends, or friends of friends.

You don't have time to focus on what you're not good at. If you've focused on one of the top 5 programming languages in use today, you don't have time to focus on picking up some Microsoft Access project, shifting your brain 180 degrees in another direction. There's just too much work out there doing work in the top 5 programming languages in use today.

Know about your foreign competition. Your foreign competition may be a person who grew up in a slum and will be willing to say anything to get in the door and land the project at a development center, stealing away that sales lead away from you. That's why you need to be a lean, efficient operation.

A lot of developers out there lie, but don't you be one of them. I've seen a lot of developers out there lie in that they can conquer someone's project in two weeks when they can't, or that they have skills with something when they don't, or way underbid something when they can't. On many freelance project sites, you often sees replies from these liars. Good thing for you a lot of those liars are ignored and found quickly, never called. A lot of those replies from these liars are just there to discourage you from even trying. A lot of the lying is because if the small development company doesn't lie, then they have to put developers back out on the streets into the slums and these guys would rather kill themselves then go back to that. So, when you're honest, you actually stand out from the pack. Now, don't get me wrong -- I don't mean you need to be so transparent as to expose all your fault in a blog, but I do mean that, if you're going to screw up a project if you say you can do something when you can't, then honestly say you don't have enough experience (or any experience) in that field, and offer that you're a fast learner if indeed you are.

You don't have time to work onsite. This is the modern world. There are just too many gigs out there, and telecommutes for independents on very small gigs, right now where you don't have time to be wasting it commuting back and forth to a job site.

Stick with the small gigs. The long-term gigs often mean being onsite for part of a month, and they are so massive that you can't keep updating your skills or focus on getting more work. Stick with the small gigs because you can get paid more with these than the long-term gigs in most cases, and they're less of a hassle.

Stay healthy. Now that you're home, you can make decaf tea for yourself or sipping filtered water instead of hitting the vending machine for a Coke. (Trust me, I fight with gout after years of Coke drinking. And I'm only 40!) You can prepare and eat cheaper, better-tasting, and healthier foods. You can have time to exercise or perhaps curl some dumbbells while listening on a conference call. Also, in the winter, if you exercise regularly, you find you can decrease your heating bill because you will feel warmer.

Yes, do power naps. Sounds funny, but it's now surprise how much more refreshed you'll be, if, every 2-3 days, you take a quick nap for 1 hour around 1pm, should you have the potential to swing it.

The key word is DOING. Unless you're behind schedule or heavily mired down in a project, spend 1/3 of your work day doing research, and then the other 2/3rds should be spent DOING something, such as bringing up another Affiliate Marketing site, finding a new client, learning a new essential skill, or working steadily on your client's project.

Don't look down. At first, being an independent programmer is like tightwire walking at the circus. Don't look down because it's a long, long way down. Down there you can count on being depressed, or losing your house or an SUV, or having to take out a ridiculous loan and more risk, or bouncing checks at the grocery store, or worse -- getting divorced. So don't look down, whatever you do. I hate to sound so harsh, but take your fears, think of it as a deer, and run over it with your SUV. There is no time for fear, only functionality. Sometimes it takes the memory of the cubicle HELL you put up with in order to be an independent contractor. If you have fears, don't ever forget what a terrible few places you just left and why this was all necessary. You wanted to be the master of your destiny and not have that destiny guided by some fool. So, every morning, go to YouTube and begin your day with a motivational video, and then find one on Affiliate Marketing or some other important topic critical to your job.

Skip daytrading, initially. You may think, hey, I'm sort of good at stocks and bonds, I'll just daytrade to offset the ups and downs of being an independent programmer. Think again. It can be very distracting. However, as you get through your first couple years and you think you're okay, then sure, give a little daytrading a little bit of a try. But be prepared for the risks and have a good amount of emergency savings, just in case.

Get over yourself. You may think you know web design and web development, but something new comes out every two months that changes everything. You have to constantly stay on top of your game. So don't be arrogant and think you're a hotshot because you're not. In this field, no one is except for perhaps a few months before their skills become stale to the next big thing again.

Don't let success make you arrogant. It is so EASY as an independent programmer to become cocky after a few months of success. This is then exemplified by the fact that you have a lot of quiet time and may actually forget how to speak politely, or carefully craft what you are saying, as you speak to people. This can annoy existing or potential clients. So, every day when you look in the mirror, say "HUMILITY" to yourself and think about that, as well as reflect on anything stupid that you said or did the day before.

The right answer is Yes. Well, sort of. You want to be honest and realistic, but don't discredit yourself too soon or say no because you talked yourself out of a good opportunity out of fear. Again, fear is a deer on the road and you must run over it with your SUV at 100mph.

Fear makes you humble and realistic. Fear is important. Sure, I've been harping on killing your fears, and that's important especially in the first year, but you need to continue to be humble, realistic, and polite to everyone you interact with. For instance, you should continue to show your client how flexible you are, because, after all, they're paying you to sit in your jammies and flip-flops. So, if you're sitting there crying one day, you've already failed yourself. Turn those fears into motivators.

Creativity vs. Eccentricity vs. Entrepreneurship. Sometimes you begin to realize, as an independent, that you may feel you have a problem sorting out whether your reasonable entrepreneurship is creative or eccentric, or just flat-out insane. Again, this is where the humility and realism comes into play. Looking in a mirror and thinking can help a lot. Visiting sites that impress you can make you feel humble again. There is transcendence and it's wonderful to rise above imminence, but it's imminence that makes the transcendence real, not fantasy.

Every day, get out there and communicate. Sales leads don't just come to you automatically. Get up early and start communicating in forums, emails, and phone calls to make it happen.

Use your friends and relatives on commission. Got a relative with a home-based business where they daytrade and do housing rentals? Got a neighbor who sits at home doing odd chores in town for a regular paycheck? I highly suggest you approach them with a pack of your cards, show them your websites, and say that if they generate any sales leads at all that go through, they can get a very nice commission for that work and all future work with their gem of a client.

You need a brand, some business cards, some branded golf shirts, and some branded oxford button-down shirts. You need to make it clear for people you meet about who you are and to make them ask, "What's that company logo you have there?" These things are easy to come by and they really do drum up business.

By your third year, you need a change. By your third year, you should be thinking of getting the gigs and outsourcing some of the work to others, and working hard on making your Affiliate Marketing more profitable as well. If you're still slaving away at 70-80 hour work weeks, something's wrong and you should either go back to a regular day job to fix some of your debt problems, or work harder to make the next year what you should be experiencing in your third year. There are many Internet Marketers who only occasionally dabble with their previous sites because they have volunteer forum moderators, or profit sharers, who participate for them. And they're making money hand over fist.

Time management is important; time is your enemy. You need to get an agenda started, probably paper-based so that you can free up all your screen real estate, and budget your time so that you do a little bit of everything that's important in your day in order to stay afloat, not just picking a particular day to focus on a particular need. That is, unless you're behind schedule or mired down in code. Make time in your day for humility, motivation, research, sales leads and follow-ups, DOING something, more motivation, excercise and eating healthy, house chores to make the spouse happy, and sleep.

Don't sleep in. Instead, go to bed earlier. This is because your spouse is probably mired down in a day job that works like that. It's so easy as an independent contractor to stay up late into the evening or have all kinds of crazy hours. Sleeping in also sends a message to your spouse that you're lazy, and that's not what s/he wants to see with you when they're taking all this risk. And that can lead to a confrontation or, far worse, a divorce, trust me.

Only one of you, your spouse or you, can afford the independent contractor lifestyle. Unless you have like zero debts except a small mortgage payment, it's too much of a risk to have both you and your spouse as independent contractors.

Motivating others about you will be harder than motivating yourself. You may have thought that motivating your spouse might be easy, but motivating yourself everyday would be hard -- well, it's the opposite. Motivating yourself is easy. You'll find that it's hard to motivate others to use you sometimes, and at least for the first year you may find it hard to motivate your spouse that you've made the right decision.

You need a desktop, a laptop, two large flat panel screens (19", minimum), a wireless mouse, and a really quiet keyboard. The desktop is because laptops are noisy and generate a lot of heat to work with, day in and day out. Laptops also have slower hard drives, typically, than desktops, and can slow you down either initially, or after a few months. The laptop, however, is for driving around to clients to demonstrate your work, or when you need to sit on the back porch for a few minutes. The two flat panel displays are important because you need to have research pages and the website view you're working on with one, and the code, email, and chat on the other. Those displays should also be square, not wide screen, because you need to see more lines of code, not less. The wireless mouse is just easier to use. The quiet keyboard is so that you don't keep up your spouse at night, or make loud typing noises when working with a client over the phone.

You likely may need about 4 decently fast PCs besides your desktop and laptop. This is for server projects for multiple clients at the same time, or for running Windows or Mac, so that you can accommodate special needs.

Deliver key results every 2-3 days. Ask how often your client wants to see results, or suggest every 3 days. Don't try and work purely on the backend without front-end results in a substantial way, especially early on in the project -- you'll turn off your client really quick.

Know what to take. When building the project plan for what you will do, know what you will take and if something smacks you as ridiculous to achieve in such a tight timeframe, politely and very gingerly ask if it can be put into another phase for follow-up work, paid separately. And as you do a project plan and work the code, take notes on how long something takes so that you know it might take just as long on your next project.

Some projects are toxic. Of course, you want to take every project you can, but some projects smell from a mile away and shouldn't be done because you'll be setup for failure. As you proceed in this career, you'll realize more and more what the signs are. So take the toxic project, try to politely reason with the client to make some items in the project in follow-on phases, and try to see if that floats. Otherwise, don't touch it. Don't set yourself up for failure.

Never admit to doing more than one client at a time. Sure, you need more than one client at a time to stay afloat in this business, but never admit that you're doing more than one gig at a time -- it's not looked at very favorably. If hard-pressed about it, however, be perfectly honest and say that one project has overrun in time and bled into the time used on this project, but admit you're working nights and weekends as well on this project to overcome the loss.

You're going to lose a client or not get paid here or there. Sad to say, it's a reality as an independent that you're going to lose a client or not get paid sometimes. I suggest you try some follow-up a couple times, but don't waste your energy on them. Just learn from it and move ahead. Remember, with each project you do, you learn something new, and can take that knowledge on the next contract. So, consider it like a training budget.

At first, let the client set the payment options. When you're first starting out, let the client set the payment options -- whether they pay you in two chunks via PayPal, or cut you a W2, or pay you all at once with a check, or whatever. Until you get used to what clients like, you should dictate to them your preferences.

You're going to need a functional specification and statement of work for each project. You can't always get a functional specification or statement of work, but you'll need one and you should try to very gingerly try to extract one from the client. If they can't give you anything but draft, then take it and offer to tighten it up and send it back for review. This is a difficult part of the project, and some clients can be stingy about this, but you live and you learn on how to request it without getting your head chewed off, or to even ask for it at all.

Know your databases and SQL. It goes without saying that you're going to need to know your databases, especially the free ones like MySQL, PostgreSQL, and SQLite. Then, you're going to need to know Oracle, MS SQL Server, and a few others. Get used to SQL, stored procedures, database replication, database clustering, and performance improvements. Know the difference between normalization and denormalization, and when it's better to have one style over another.

There is no magic. Regardless of what someone tells you, there's no magic to this. You could learn all this and still get it wrong. There is no silver bullet to make it all better. There's only persistence, luck, patience, and your own momentum.

I've said it before. I simply must say it again. There is no time for fear except to motivate you to fix what's broken. You're going to need a plan, and to identify what's broken in your life, and prepare your life before you take this leap, and then you need to DO IT and don't look down, consistently, every day. If you're depressed, or sleep in and don't know why but think it's because you're depressed, or watching too much TV, or visiting UbuntuForums and Reddit and Digg or YouTube too much, or even find yourself sobbing in a panic -- you've already failed yourself. You can do it because others have done it on far less than you.

February 13th, 2008, 08:47 AM
Latest Update

Web developer, but still a sysop occasionally Glad I've gotten a bit of Linux sysop experience behind me, otherwise I'd be a dope in this industry as a PHP Freelancer. I mean, tonight my client expected me to work on CentOS4 (which comes with PHP4) and get it working with PHP5 + MySQL5 + Apache2 + MySQL5 integration into PHP5. I had to figure out Yum and then the special add-on repositories that are poorly documented for CentOS. There were no ifs, ands, or buts on that -- I either knew it, or I don't get his lucrative cash offer. (And man oh man I wish everyone would simply host Ubuntu Server -- apt makes it so much simpler.)

More than one client at once Sure, you can triple-book yourself in a month and reap the reward, and you can't get that kind of reward when you work for someone else as their programmer. However, that's extremely hard work, my friend. I mean, client expectations are very high, they want everything yesterday, and although they often have nice cash (like $4K-$5K per project), they commonly want their task done in 2 to 2.5 weeks. So, right now I'm double-booked in my week, and both clients are suffering for it because it's the tail-end of one project (and it's running over in time) and the other project is dragging along slowly with the client wondering when I'll actually have something started that I can show them. So, I've come to realize that I really can't handle more than 2 clients a week, max, if that. I bet that will be about your limit too, as a programmer freelancer. However, as a web designer or a "chopper" (who takes PSD and converts to XHTML) or a Flash artist, you have shorter gigs and can take probably 3-4 clients a week.

When all you have are IM, email, and a rare phonecall, it's hard to pick up on how customers are feeling I've learned that even the most subtle hints about your performance are important to look out for.

Functional specs are tough So my client gave me a 1000ft level functional spec like I asked, along with some rough draft mockups in a paint program for the screens, and I was able to make a quick timeline that was interim. I then asked him to make a 500ft level functional spec and I gave him a project timeline. Unfortunately this project timeline was waaaay off. Why? Because I kept assuming I could pull certain things off rapidly, such as a treeview control in Javascript, or eCommerce. Instead, I should have read the functional spec more closely and given a more realistic time estimate. I'm also keeping notes on my performance so that I know how long I'll take on the next go-around. As always, if I figure something out that's hard, I'm making my own knowledge base.

What to do when the customer balks at price First, break it up into phases and shave off things out of phase 1. Second, if necessary, offer to do phase 1 for $5-$10 cheaper per hour and if they want to continue more phases, they will have to pay full price. Of course, if they choose that option, you'll want to let them know that you'll have to shave phase 1 down a bit. Third, let them know you're a good communicator, that you give regular status updates with realistic news, that you have a careful attention to detail, and that you want to genuinely continue your involvement in their project for follow-on phases. And if they don't like any of that, then forget them and move on.

Windows sucks!!!! I had to break down and purchase Windows Vista so that I could do browser testing of my apps. It started with me wanting to test IE 7, but then I'd have to get XP. So I look up XP Pro (which has the Terminal Services feature) and it's unbelievably expensive still. I thought for a minute and realized I need a laptop occasionally, so I might as well get the cheapest laptop I can find and find one that comes with the OS already on it. And when I compared prices, it was only a couple extra hundred beyond the price of what I would have had to pay for XP. And sure, I could have used that trick to install IE 7 inside Linux, but it has defeciencies I cannot handle, such as lack of IE 7 conditional comments, and doesn't use the same font sizes as Windows for it, which is crucial for browser testing and CSS style sheets. Moreover, when I was done with this, I had to bring up W2K Server so that I could test IE 6, and lucky I had an old MSDN CD for that.

IE Sucks Serious. When you compare, feature by feature, Firefox to IE 6 or 7, you can honestly see how much better of a browser it is and how much more compliant it is with W3C standards. IE 6 has these terrible pixel positioning problems, and you also can't put a DIV on top of a SELECT field! They fixed this in IE 7, but there are still quirks with IE 7 that will drive you nuts all day. Moreover, Opera is used by much of Asia and some of Europe, so I had to install that stupid browser with its own quirks too. If only everyone could just stick with variants of the Gecko engine, we'd be getting somewhere.

You don't just build websites for your client, you build them for yourself It just seems practical that as your building these great websites for your client, the gears in your mind continue working on great ideas and you'll want to knock out websites for yourself as well. And Affiliate Marketing is a big part of most of my ideas. AM is just a natural progression for PHP Freelancers. Besides, most of my clients are AMers.

What happens when the USD exchange rate is not so good? Sure, I've got clients now and I'm overloaded with work, but what happens when the US Dollar goes up and I'm not as cheap anymore? That's a day I worry about.

Outsource the XHTML Until you get good at all the new Web 2.0 looks and DIV placement, outsource the XHTML to services that advertise "PSD to XHTML". And let your client manage that and feed you the page templates unless he's too confused about that process. However, once you get the XHTML and analyze it and experiment with it, you might just pick it up on your own. If you do, you can do PSD2XHTML work all day and make more money with less hassle than you could with PHP development, or you could use it to fill in the gaps in time between clients.

Clients take awhile Clients will take a good week and a half to iron out a functional spec with you so you can get them a timeline, and also get the PSD drawn up and chopped up into XHTML. So, knowing that, you need to be looking for your next client one week before you wrap up with your existing one, or try to start advertising for your next one the moment you're finished on the first one.

Advertising pays You'll be surprised how well a $10 ad for your programming talent, along with an attractive website for the landing page, along with a blog geared for customers and fellow programmers -- you'll be surprised how much all that pays off in landing you new clients. It works.

Kill Reddit In this business, you'll need to curtail your use of other time-wasters like Reddit. Sure, you need to keep up on the news, but you need to filter it and spend less time looking at it. I personally have a serious Reddit addiction.

Backups are critical As a freelancer, you need to have backups to the backups. I mean, you need spare servers sitting around to back stuff up to and to use when your system crashes during a deadline. You need UPSes and surge protectors on everything, including your phone equipment. You need to pay for extra ground protection on your house. You need good clean power, systems to use during deadlines, and tape and/or disk backups of your stuff. Most of these things are cared for when you work for a big company, but on your own, it's all up to you. So get serious about it.

February 13th, 2008, 09:05 AM
IE Sucks Serious. When you compare, feature by feature, Firefox to IE 6 or 7, you can honestly see how much better of a browser it is and how much more compliant it is with W3C standards. IE 6 has these terrible pixel positioning problems, and you also can't put a DIV on top of a SELECT field! They fixed this in IE 7, but there are still quirks with IE 7 that will drive you nuts all day. Moreover, Opera is used by much of Asia and some of Europe, so I had to install that stupid browser with its own quirks too. If only everyone could just stick with variants of the Gecko engine, we'd be getting somewhere.

I really like this thread and your advice, but I have to nitpick here:

Firefox, while a great browser, really isn't that w3c compliant. Opera and Apple's Safari are much better in this category. Does this mean that they are without quirks? Hell no. But they are better than Firefox, which has really terrible css support in certain cases (only an eyelash better than IE7, imho). And please, the gecko engine? That's what I hate about firefox... It's just too slow and bulky to be useful.

Ok, I'm done complaining. Please keep these up, there's a ton of solid advice here.

February 13th, 2008, 04:10 PM
Paypal sucks (but that's a thread of its own). Customers want PayPal, but they don't take into consideration how much Paypal sucks. Their PDT process is far easier than their IPN process, but it's too complex to set up. Now, something is wrong over at PayPal and the PDT process isn't even working. The sandbox generates system errors and/or times out. If you get the thing to work at all, it doesn't come back with a 'tx' parameter like it should. And if you don't turn on AutoReturn (which should be turned on by default), customers may click the X on the PayPal window and they end up getting charged but you never know the transaction went through! When I contacted tech support, they said it was a bug and have fixed it. However, all my warm fuzzy feelings about safely running transactions through them have bled out of my body and I don't have a shred of hope for them anymore.

Meanwhile, on the web, we read the eBay CEO stepped down. eBay owns PayPal. As well, they have a class action lawsuit against them. Plus, Google gmail consistently stuffs my tech support emails from PayPal in my spam folder, and when I mark as non-spam and open it in my inbox, Google has to comment at the top of the email that this might be a phishing attack. It's not, of course, but then you can't exactly blame Google because the reply-to doesn't go back to PayPal, but goes back to some other domain! And that's only on their tech support emails. So, since PayPal is the pariah of broken mail filters, that also kills my warm fuzzy feeling, and PayPal doesn't help it because sometimes it makes its own reply-to go to a different domain. About the only way to trust the email is because it's addressed to me with my accurate full name.

So, for now, I'm handling PayPal transactions like so:

* We're going the email route. If the user clicks a PayPal button, they first go to an intercept page that sets their transaction in a table for me as "Pending PayPal", and then goes on its merry way to PayPal for a payment. At that point, I have a return page to say thanks, and I will use AutoReturn on it, but I don't anticipate the end user will get there. Then, the site's owner will use a manual process of checking emails from PayPal to confirm the payment came in or not, and switch the transaction status in an admin moderation queue to "PayPal Paid".

* As for subscriptions, I don't have a warm fuzzy feeling that PayPal will not fire off subscription emails at the prescribed times. No, based on the buggy sandbox issues, I have a funny feeling they'll fire it off early, or twice, or simply forget the subscription at all. Instead, we're going to handle that process ourselves by, upon login to the admin system, it checks for monthly renewals that need to go out, and prompts the admin to send these out. They click a link and off the emails go. (This is because we can't install cron jobs on virtual sharing hosts.) The emails will give the user a link to go back to the site, and then they can click a BuyNow button from there.

....so, anyway, I'm seriously contemplating Google Checkout. For one, Google is spending millions of investment dollars to make it reliable and better than PayPal, and Google usually has a certain polish to the things they do. I bet Google's Checkout sandbox never has system errors and stays up most of the time. My faith in Google is 100x higher than PayPal. Also, once you get listed in Google Checkout, I read that your AdWords blocks change so that your Google Checkout button appears in them, and people have been bragging how this has increased sales. You don't get that with PayPal.

February 13th, 2008, 04:30 PM
I really like this thread and your advice, but I have to nitpick here:

Firefox, while a great browser, really isn't that w3c compliant. Opera and Apple's Safari are much better in this category. Does this mean that they are without quirks? Hell no. But they are better than Firefox, which has really terrible css support in certain cases (only an eyelash better than IE7, imho). And please, the gecko engine? That's what I hate about firefox... It's just too slow and bulky to be useful.

Ok, I'm done complaining. Please keep these up, there's a ton of solid advice here.

The facts show that Firefox has higher marketshare than Opera or Safari. I think it's better to encourage Firefox to speed up Gecko and try to pass the new W3C ACID tests, than to bet on horses that can't hit the finish mark because they don't have marketshare.

Fighting with DIV placement, CSS quirks, and testing in the various browsers is an extremely frustrating task as a PHP Freelancer (or any kind of web developer), and it can take up a whole couple days, at times. So I'm a fan with sticking with the top 2. Unfortunately, though, Microsoft is the brat that doesn't like anyone playing with it in their sandbox, and thinks only their sand castles are the prettiest and most functional, when it's not. I mean, for one thing, the whole IE 7 interface is just flawed from the get-go and one has very little recourse to skin it or move things around.

February 13th, 2008, 05:18 PM
I've found there's money to be made in designing corporate intranets for SMBs... Up until recently, I've consulted for some law firms who had aspirations of going digital. IOW, instead of keeping documents upon documents lying around, they'd set-up scanning stations and convert EVERYTHING to digital. Court docs, contracts, invoices, yadda yadda. Instead of buying fast capture 35pps scanners, they'd use existing high-capacity photocopiers to send to PDF. Okaym that's the part I worked on, anywho, most of them were working on an HTML-based corporate intranet where they can have a page dedicated to info about every member of the organization, a page for new policies, etc, etc. Some are even adding some of their back-end accounting software to work via web browsers to eliminate the need to update client-based applications on each and every workstation when a newer version comes available.

February 17th, 2008, 07:54 AM
Asking for more time and more cash

In the last project I had, it was fixed price and for too little cash. It also had monstrous feature creep. So in this project I'm on now with a different client, I raised my rate, which was successful because several potential clients still contacted me and I had to turn some down. I also told my client up front that I believe it's going to take me 3 weeks, I'll hope I get it done in 2, and that I won't overbill for more work -- I'll just stop.

Well, phase 1's are tough. They are always ambitious even when trimmed down, and until you get your fingers in there to really feel the project, you can't really make accurate timeline estimates. My wife made me realize now that I actually make good timeline estimates -- I'm just off by half. She says I need to double all my timeline estimates from here on out, and then if clients won't like that, to just negotiate to get certain items trimmed out of the first phase. Meanwhile, one thing I do know is that usually phases after the first couple phases are slimmer and take less time.

So, unfortunately, I had to ask my current client for two more weeks at my regular rate. It's a tough thing to have to do, but unfortunately we need to pay our bills too.

I think what I should have done is to divide all projects in half such that halfway through a project, I can post a site with 50% of the phase 1 features implemented in a /build/ area on the website. That way, the client gets a good feeling about me and if I need to ask for more time at the tail end of the first phase, I can use that as a bargaining chip.

Asking Client Questions
I hate to say it, but when you are stuck on a vague feature in the functional specification, where you could implement it a couple different ways, it's really not going to go good to ask the client which one he would prefer, with pros/cons. The reason is because my experience has shown that this jogs the client's memory to think of adding more work into the phase, and then they'll go and justify why this is necessary. Another thing they do is go with the one with the more cons than pros, and then justifying this.

Instead, I just make a note in the functional spec, keep on chugging along and make the best decision for the client. Then, at the end when I hand it over to the client, I email them the functional spec with my added notes (in blue highlight) to the spec, explaining things. And if they don't like how I made a choice on someting, then at least I'm paid and I can come back in a later phase to make it work a different way.

Everyone Wants AJAX
AJAX has changed everything. So far, every single one of my clients except one wanted AJAX in their project. So, if you're an aspiring web developer and you haven't learned JSON and AJAX, then you need to get with the program and like super fast. Start by learning how to make one listbox update another listbox (like major and minor categories). Next, learn how to make live editable fields. And then you'll have to learn how to make dynamic treeviews and the most difficult one of them all -- the dreaded drag and drop.

Making your own framework
I've found that it's better to make your own framework than to use a bloated version of someone else's framework. In the PHP world, this is why I don't use Zend or PEAR. However, I do use Smarty because it just makes good sense. Sure, I have to recreate the wheel sometimes, but I also don't have a massive learning curve to get over to learn someone else's massive framework, and my code runs leaner and faster and with less installation dependencies.

That said, as you go, you learn that you repeat things over and over again, and that's time-consuming. You'll never get ahead in this business, making the money you really need to make to survive on, unless you start using some degree of OOP and start optimizing your code such that you can snap pieces together. For instance, I'm always drawing forms in my projects, so why don't I have a forms class in PHP that I can reuse?

February 22nd, 2008, 04:21 PM
Affiliate Marketing Is Hot
I recently got the opportunity as a PHP developer to travel to have a meeting with a wealthy Affiliate Marketer who is one of my clients. They cut a deal with me to pay half my salary and keep me on retainer for the year. After the flight they paid for landed, I got the royal treatment. They sent a stretch limo to pick me up, and then stuck me in a hotel room that was like an inexpensive condominium, and the back of the door said it cost $400 a night. I was told, charge food, laundry, Internet, whatever to the room -- it's paid without question.

In the morning when I visited their offices, they kept showing me screens, or I'd see one when looking over someone's shoulder, where it was yet another website that paid for ads and they had earned $2500 per day. So, over and over again, they were bringing in $2500 per day per ad network. My goal there was to use PHP/MySQL to build them a tracking system to give them a competitive edge. And they found me by surfing some Affiliate Marketing (AM) forums. AMers use PHP guys a tremendous amount, and a few PHP guys I've met eventually focus on their own AM projects and stop seeking new clients.

The client's strategy didn't seem too complex. Anyone could copy it. At first, they struggled at the bottom of the AM ladder. However, for free, they give you a representative at these AM ad networks (like cpaempire.com) and that rep will help you increase sales if you follow his/her instructions. So, they figured out that there's more money in ads that work with things on your mobile phone than things that work with your credit card. Don't know why -- just is that way. They got good at rapidly building landing pages from scripts, then "paying for traffic" as they called it by paying for ads on Google, MSN, Zohark (that's a new search engine gaining popularity fast, I guess), and Yahoo. They said that eventually they learned that you have to pay to play in this game, and it's a gamble with a lot better odds than the stock market.

Another thing that gave them the edge was that they scanned forums for successful people already in the AM industry, then offered them lucrative deals to join the company. And part of that deal was to have larger sums of money to invest in ads and to get systems online to scale their operation further than they could do on their own.

Last, some of the offers they host themselves. For instance, they kept doing ringtone ads, like many AMers, but then they wondered what would happen if they saved up enough AM cash to purchase two ringtone companies. So, they did it and it has been extremely profitable for them.

So, from all these techniques, they actually could take a week off and earn money in autopilot!

So, the experience showed me that AM is a huge, wealthy business, and it's exploding with an influx of new users, and we aspiring independent programmers (freelancers) can take advantage of this in multiple ways. First, we can leverage this influx by building their websites for tracking tools, landing page generators, landing page redirectors, and pixel tracking systems. Second, we can learn from them for free on what makes them profitable, then (as long as we follow our NDA) turn around and make our own AM projects. Third, we can gain so much experience in AM that we can help boost the AM capabilities of existing clients, or help new clients realize the potential of AM, and then when they make cash, they have more cash to pay us for projects. Fourth, eventually we can migrate from freelancing into AM work. Fifth, AM is not rocket science -- it's cheap to get started, you get free advice from the ad networks, and eventually you learn you have to pay for advertising, systems, and network bandwidth in order to make money from advertising, and it's a gamble with better odds and higher profit than the stock market.

February 22nd, 2008, 04:28 PM
I read the MS sucks, IE sucks, Windows sucks, Linux rules stuff and I just have to say - It reads more like advice from a Linux fanboy/MS troll to aspiring independent developers.

February 22nd, 2008, 05:18 PM
A bit off topic but in reference to backups.

I already backup the backups and the final backups go in a firesafe but can anyone recommend an online backup service?

Carbonite is currently not Linux compatible. I have been thinking about Amazon S3. Has any one tried it or has any other suggestions?


February 22nd, 2008, 06:00 PM
I read the MS sucks, IE sucks, Windows sucks, Linux rules stuff and I just have to say - It reads more like advice from a Linux fanboy/MS troll to aspiring independent developers.


And I guess I'm scratching my head wondering why you're visiting a Linux forum?

February 22nd, 2008, 06:26 PM

And I guess I'm scratching my head wondering why you're visiting a Linux forum?

Because (k)Ubuntu is my primary OS. And I also use XP, Vista and Solaris. But fanboyism/trolling just turns me off.

February 22nd, 2008, 06:40 PM
What the hell? I'm not trolling. If I were, I'd be making short little smart alec comments all the time in my posts and never leaving anything of worth in the forums. My posting history shows nothing of the sort.

I'm sharing these facts here in this thread just as a way to get it off my chest and organize my thoughts about something new I've learned or discovered. And that helps me capitalize on my knowledge. Plus, in other forums, I get useful suggestions in feedback, such as to try something new.

Besides, what little I said about M$ compared to everything else I've shared in this thread -- it's so insignificant, that for you to pick that out, it sure does sound like you're the pot calling the kettle black?

February 22nd, 2008, 07:57 PM
Sorry. I just find the "Windows Sucks!!" attitude annoying and got carried away - Some of the tips in your post are really good!!

February 22nd, 2008, 10:05 PM
From DSL (Damn Small Linux) it's a guide for how to make a living online when you come from the open source world.


by the way, great thread!


Another option for some people could be to move to a low cost land and work from there, Easier to make the wheels go around when you don't have so much expences.

February 22nd, 2008, 11:21 PM
From DSL (Damn Small Linux) it's a guide for how to make a living online when you come from the open source world.


by the way, great thread!


Another option for some people could be to move to a low cost land and work from there, Easier to make the wheels go around when you don't have so much expences.

The DSL F/OSS software business is a great link for some. For me, I tried my own F/OSS project and only had a bunch of happy downloaders and about 4 gigs that started to sound like they were going to go through, but fell through. Instead, the customer went on without me. However, it did manage to get someone to give me an unrelated gig and for me to get started as a PHP freelancer.

Regarding the country comment -- you are absolutely correct. If there's any way you can break things down to the barebones when getting started as a freelancer, I recommend you do so. I mean, if I weren't married and didn't have children, then I would probably be moving to some place with great food, great women (ha!), stability, safety, and cheap prices. Funny thing is -- the only thing I've found with all that is the USA.

The great thing about a web dev freelancer is that you can basically set up shop anywhere you can get an Internet connection and a mobile phone connection, and sometimes not even that (such as a local web server on your laptop). So, if I want to work at the beach, I can do so. Sure, it helps to have other systems to test things on and host projects of your own, and bigger screens, and more stable keyboards that can handle daily pounding, but if you want to break it down to its basics, then a laptop and a mobile phone is all you need.

February 23rd, 2008, 12:07 AM
if I weren't married and didn't have children, then I would probably be moving to some place with great food, great women (ha!), stability, safety, and cheap prices. Funny thing is -- the only thing I've found with all that is the USA.
Isn't that a bit too broad? Where in the USA? Have you really checked that out or are you being lazy?

In some European countries, self employed workers do have unemployment subsidies and public medical insurance that will help a lot if you fall ill or have a bad time with no business coming in (even if you don't have a dime and can't pay any taxes, you get full medical care in Spain). Of course you won't be able to live a long time from subsidies but at least you don't need a spouse to rely on her/his income for the hard times.

I also dislike very much the "Microsoft sucks" attitude and replacing the S with the $ when talking about MS. That sort of things are childish and make an otherwise brilliant post less reliable (especially when you declare you're in your forties). Consider respecting your "enemies" to gain credibility.

February 23rd, 2008, 12:26 AM
Sounds like great advice for an aspiring programmer like me. :)

March 1st, 2008, 05:22 PM
Staying Focused When Behind Schedule I've found it's harder for me to stay focused when I'm behind schedule. It's like hopelessness compounds itself and one just gives up. I then rage against that attitude to keep fighting on. I'm in a very tough project right now that's hard to finish. AJAX and heavy Javascript stuff can be pretty frustrating. So, if you're wanting to get into this industry, you'll probably encounter the same kinds of issues.

Admin Pages Will Drive You Nuts After a few runs of doing this now, I've learned that building admin pages are something I always underspec too much as far as time, and I keep having to do them as custom things, which is extremely time consuming. I've had enough! And so now on my next project, I'm going to create an application in a wizard interface (next, next, finish, etc.) that analyzes a database, asks a few questions, and builds at least 75% of the admin interface complete with database calls, AJAX search and lookup, forms, and so on. Then, I can turn around and write the last 25% of the business rules to finish the admin interface.

So You're Popular, Now What? So let's say a couple clients are extremely enthused with you. They think they can get the customers, design the website look and feel in Photoshop or Gimp or Inkscape, build the functional specification, and then outsource the rest to you. It's a pipeline. Trouble is, you may find that the average project takes about 3-5 weeks to build. Now what? It's a conundrum you'll be faced with eventually. You could get your client to agree to let you outsource some small pieces of it and then its up to you to blend them all together. However, don't be surprised when you hear a no, not only because of the increased cost, but because he trusts your work, not the work of others. You could get your client to look for other guys like you, build up trust, and so on, but then you could potentially end up with some serious competition that's more skillful than you. So, in the end, you'll find you can't keep up with the demand of your clients and someone is going to have be told yes at the expense of saying no to others. What I do is build a pool of guys I like interacting with, and like the way they code, and so I then refer clients to these other guys when I'm too busy. For one, I hope that they reciprocate one day back with me. For two, I like leaving my potential client on a positive note, not a negative one, because I've at least found someone else available for them. I also don't like to form partnerships with any other guys because that just complicates things -- the cons outweigh the pros. I mean, I don't like a lot of complicated tax and business paperwork. I keep it simple.

March 28th, 2008, 05:58 PM
Learn jQuery. I've done a lot of thinking about time-killers on projects, and the biggest one is delivering fancy effects in the browser and then the cross-platform testing and tweaking that needs to occur after it. To that end there are Javascript frameworks out there to take the pain out of cross-platform testing. If you look around, you soon find that the richest platform, and the platform with the largest players behind it, is jQuery. With jQuery, its lead developer works at Mozilla Foundation, which is an extremely well-funded organization thanks to cooperation between Google and Firefox. What's also interesting about jQuery is that it is not just a framework of pre-built, pre-tested ooh aah components for the Web 2.0 clientele -- it's also a new way of doing Javascript that uses far less lines of code. So, if you're looking to make your Web 1.0 products move into a Web 2.0 direction, or if you're simply looking to optimize time, jQuery is a highly recommended framework for you to invest your time in.

Be Careful about Being Too Chummy with Clients. Working with clients sometimes feels like a teacher and his students. As a teacher, you can't let your students get too chummy with you or you can't control bad behavior. Clients like to get a lot of things for free, or to ask for add-ons that are half-priced or free near the end of the project, and that's a difficult thing to put the foot down on when you've built up too much friendliness with your clients. Saying this, though, if you're building a portfolio still, then of course it's good to get chummy with a few clients and give them some freebies or half-priced work near the tail-end of a project. Also, if you are trying to lose the game to win the greater good, such as giving away a few freebies here or there, or getting too friendly with a client, because you honestly think it will guarantee you a slot for more work on other projects or later phases, then it might be something for you to be flexible with.

There Will Be Down Months. There will be months where you're doing cheap or free add-on work that consumes a lot of time, and poor time estimates that carry you into another month, and so you need to be prepared for this shock and have a plan. In a couple months, for instance, I was bringing in $10K on projects (although working extremely hard + nights and weekends). In my current month, however, cash has dipped down to $2500. It's not that the cash has dipped down because I wasn't looking for client work -- it's because of bad time estimates and longer bug cycles than anticipated that I was too busy to work for other clients. So, after projects complete, you'll need to do a Lessons Learned for yourself to determine the time failures and bottlenecks, learn to optimize, and you'll need to have something on the side to help give you a cashflow even when time is tight. One opportunity is to put out a Google AdWords ad to try and catch just one client who will pay you on retainer on a 6-month or 12-month contract for like 1/2 to 1/3 your regular rate. Luckily I didn't have to do that because that proposal came to me first. However, if I ever lose my retainer client, I'll definitely be using Google AdWords to find my next one. Another opportunity, which of course is a natural for many web developers, is Affiliate Marketing since many of our clients are AMers. Last, there's also small stuff you can do like PSD to XHTML conversions, and use ads on various sites to bring in your traffic for that.

Two Clients A Month Is Great, Three Is Tough, Four Is Impossible. I think you'll find when building websites for people that two clients a month is great and a little tough, but three clients a month is going to be so tough that you won't have any kind of social life. At four clients and beyond, you're moving into insanity. The only way to get those kind of client months is to outsource chunks of projects, such as the admin functionality, or use canned projects (or previous sites) that you pull off the shelf and customize.

Yes, You Can Work from The Beach. Recently my wife had an opportunity to take a spring break at the beach and we rented a beach house. I was actually hoping to have my work ironed out for me to take a break, but I was not so lucky. So, I stayed back home one extra day, but that wasn't enough. Since investing in your wife and family is extremely important as a freelancer, I knew I had to hit the beach. Luckily with this new career I could take my laptop and catch an occasional free wireless signal when I could. Many cafes and even McDonalds have free wireless, but I found I was oddly lucky enough to catch free wireless from the comfort of the beach house for some odd reason, and I wish the same luck upon you. It was simply amazing to be right there on the beach in a chair with the ocean waves, doing occasional work that earns me cash rather than reading a spy novel. Other relatives who arrived to meet us at the house were fairly jealous -- there lives are in long commutes, 9 hour days where they have to be in the office, and they don't get to enjoy life very much.

April 3rd, 2008, 06:36 PM
Hit The Ground Running. Once you get into the last stages of debugging on a website, where you begin to start talking data migration, that's the time to hit the ground running and look for your next client. Usually when you start a project with a client, you start doing a lot of freebie work like email interaction about design, ground rules, rates, a review of functional spec, getting an NDA notarized, and stuff like that. So, if you're going to have your first week free with a client, better to intersperse that work with work you're doing on one or two other clients. And if you don't have that next client lined up, go pay for some cheap advertising in all the usual places like eLance, SitePoint, various Affiliate Marketing forums, and Google Adwords.

Learn Blueprint CSS. In my ongoing efforts to try and optimize time, I've learned that it's best to outsource my initial XHTML/CSS work to a pro, then customize whatever I get back. However, sometimes there are times when you just have to start things from scratch, and to do that you need a good CSS file because there are many browser quirks that you have to understand and work with. To that end, I found out about Blueprint CSS. It's about as revolutionary as jQuery is -- it gives you a starter CSS to help you get things lined up properly without much fuss.

Make Your Portfolio Website Sensational. I've visited the websites of my competition. I see a mix of extremely good, to slightly good with some oddball quirks, to complete LOL about why they even want to claim that website as theirs. Even though one may be focusing on web development, and not necessarily design, you still need a good-looking website because you want to show the client just how good his website can look. And I recommend using XHTML, DIVs + CSS for page formatting instead of TABLEs, and dazzle them with jQuery and AJAX. If you want some examples, just visit webcreme.com and click Next, Next, viewing each of the portfolio sites you see. And I don't think web developers get into the heads of their clients enough to see things through their eyes. They need to ask themselves, "What do my clients want to see when they visit my website and only have a few seconds before moving on?" and "What kind of content can I serve up on the home page to make them want to bookmark it and come back regularly?" I also see some oddball stuff on websites like:

- "We have Texas values." What the heck does that mean? And, to someone in Europe or elsewhere, this might actually have a negative connotation, as they swing liberal and Bush, who's from Texas, swings conservative.

- Ancient animated GIFs from like the days of the early web.

- Links that don't go through.

- Statements like this being a subsidiary of some other holding company, references to "us" for a one-man startup, and fake pictures of what your so-called offices look like. This is complete newbie stuff that you'd expect from a pretentious startup, and there are thousands of these out there -- a complete turnoff. When a client can do a whois on your site and get your house address, or when they email or call you they only get you and no one else, it's quite obvious you're a one-man operation. Trying to be anything other than that is actually a deterrent and will turn off clients.

April 9th, 2008, 05:45 AM
Why This? Why Here?
Some ask me why do I write this here, and why at all. Well, for one, it helps me organize my thoughts and relax and get a load off my chest like therapy. For two, blogs are lonely -- forums are not. For three, I believe in karma and a pay-it-forward system. I have a mentor who has been very inspirational to me, pushing me to go farther and to be more efficient, and to make more cash. He asks nothing of me and just provides great advice. He has talked perhaps of a partnership, but that's way off in the future. So, in a pay-it-foward way, I seek to help others just as I have been helped, but only if they are serious. And why help developers on another platform besides Ubuntu? I love Ubuntu to death -- might as well help that platform as much as possible. I'll probably have an Ubuntu CD in my casket when I die! Some knock Ubuntu with just bias and no facts, while others have good facts. We should listen to those who criticize Ubuntu, and seek to help it overcome these difficulties.

It's Hard To Satisfy Most Clients. Clients who do not see you face to face every day will be hard occasionally to be satisfied with your work. They'll expect to see you work for them at least half your week, and then they'll criticize how little you did for them in that half when you think you've done so well. Many clients are young and immature and don't have families, and don't realize the burden this puts on a programmer who has a spouse and children. So when you get into this business as a freelance developer, you'll have to learn careful diplomacy as part of the trade.

I have one client who pays me on retainer, and I had to request that I bump my con call with them to Friday instead of a scheduled Wednesday call. They pay me on retainer for half my week, and told me I can choose which half. However, the main guy then criticized and asked why I had to do this, and whether I was committed enough to he and his team for half my week like I promised.

Well, when you get a case like that, the first thing to do is pick up the phone. Stop the online chats, the emails, and get some live talk. But wait before you talk. Think carefully what you're going to say. Diplomacy is an art and takes careful skill. Don't get ready to make a whiny defensive pitch because that will definitely fail. Take the high road, feel confident in yourself, lower your voice to a normal pitch, watch your language and tone, and provide solid facts that show what's going on.

The next thing I did was show him what positive things other team members have recently said about my work output, and I reminded him about how I have other clients and what quality work I have done on their issues. I showed him some links to my other client projects, told him how much I made on some, and told him how many hours I spent. I impressed him and showed him that I can do that kind of work for him, and explained what the hold up was -- a quasi-vacation I took for a week because of my wife's Spring Break, and the fact that I had low incoming cash in March because I had a tremendous project overrun where I gave another client freebies as a means to make the client a "portfolio client".

However, I have played those cards, and many clients have a mentality of "what have you done for me lately"? So, I won't be able to play those cards again for my client that I have on retainer -- not for awhile. This means that, if I want to keep my retainer client, I'll have to work extremely hard this month to convince them beyond words and beyond sharing my portfolio as an example of my quality.

In the end, this worked fairly well tonight, and I do plan to work hard this week to make this client happy.

Portfolio Clients. Obviously, you'll need to build a portfolio when starting out, and then freshen it with one new client reference every year, if not two. This means finding a client you like and almost feel like being a friend with, and give this client lots of freebie work at the tail end of a project, or spend a lot of free time at the start of the project so that the design is just awesome. Remember, your clients will be most impressed with the way a site looks most of all, not necessarily the server-side code. So, jQuery and AJAX and the graphical design is extremely important in impressing new clients, but some will then ask for the server-side code and this needs to be good as well.

Retainer Client. I recommend that everyone who starts out as a freelance developer find one retainer client. This is a client who pays you half your normal rate, but guarantees to pay you throughout the year for half your week's worth of work. The idea is that, no matter what, your retainer client will always pay you when you're having a down month with other clients. Luckily, my retainer client found me, but if I ever lose them, I'll be certain to find another just as fast as possible. So how the heck do you get one? Well, I recommend every avenue that you can, but I can only speculate that two places where you'll be most likely to find them are with a series of Google AdWords ads, or perhaps a posting on a board in a university. I mean, getting you at half your rate is quite a deal for them, and it can be quite a deal for you.

Consider Making A Job Board. If work is a little slow, and advertising and forum posts on freelancer sites don't bring in more work at the rate you want to be paid, then consider making a job board site of your own, and getting first dibs on all the lucrative deals. If you make it great enough with good uptime and scalability, and use jQuery and AJAX to impress people, the project itself can help sell what you're capable of.

April 9th, 2008, 07:26 AM
SuperMike - thx for posting this.

Its funny - i've just started to apply for full time positions again after 18 months when 2 contracts fell thru. The worst one was 60% thru a 600 hour project having spent <40% budget - new CEO comes on and does a complete 180 - stop development... just came as such a shock.

i fully agree with the "need a partner working" bit - currently we have a 2yo and a 4yo so it does make it harder to keep money up and stress down. But even if i go full time again for a while it has been really nice to get to spend more time with the kids when they are little for the past 18 months.

if you can be disciplined the independent life is good :)

April 9th, 2008, 03:57 PM
Your blurb on day trading is funny. :)

April 9th, 2008, 10:44 PM
Charging Customers. If reading this forward in time, realize that I'm writing this in the USA in 2008, that the value of the dollar is at an all-time low, and that we in the USA are very lucrative to UK clients right now because they have a 1:2 ratio on our dollars. I don't plan to explain what to charge your customers, but I can give you a good rule of thumb that very few one-man-operation clients won't pay more than about $9K (max) USD in a two-month period on a project. They'll also want to see a project split in half where you provide some kind of working, admin-able thing that they can interact with at least after 30 days as clients are often impatient and don't realize that quality work usually takes about 60 days for a fresh, interactive, AJAX/jQuery kind of site, minimum, if not 2.5 months. Now, as for clients who are more than one person in their company, you often (but not always) have a lot more dollars to play with -- you can probably get away with $18K-$20K on a two-month period on a project on the upper end. However, their projects will often come under more peer review of your code, and you might be required to use strict sourcecode rules, sourcecode checkin/checkout, and may be required to work on a team project.

I'm also only talking about custom sites. For canned sites, you can probably knock off 1/3 off to 1/2 off of these prices.

Note that I've discussed prices in the max, good luck range, and with easier scripting languages. More than likely your rates will need to be lower to get the business you need, and you may need to add 2x as much to the price if using a difficult language like Java, which isn't particularly used for rapid development like one needs to do when knocking out customer starter websites for people.

I also recommend that you change rates up or down based on how desperate you are. Contrary to what you might think, if you had a dry month, you'll need to actually lower your rate in the next month to make up for the loss, rather than increase your rate. This is because an increased rate causes people to pause, which eats up valuable time, and a decreased rate increases the odds that you can get started right away. So don't lock your rate in stone. Publish your high one, then make the customer feel like they're getting a deal when they see you plan to give them a lower rate.

As for how often to collect, I think when starting out you should collect payment no longer than 2 weeks, although, after you've established your business profitability after about 6 months, you might be able to start to take clients you trust and move them to a 30 day pay cycle. With foreign clients outside of your country, it is very important to keep payments down to a two-week cycle. I mean, can you imagine the trouble you'd have if you did a month's worth of work, the client claims he sent the payment by wire transfer, and you never received it? What do you do then? Show up in court? Not easily. It's easier to write off $1.5K or $2K than, say, $6K - $9K.

April 10th, 2008, 08:41 AM
SuperMike - thx for posting this.

Its funny - i've just started to apply for full time positions again after 18 months when 2 contracts fell thru. The worst one was 60% thru a 600 hour project having spent <40% budget - new CEO comes on and does a complete 180 - stop development... just came as such a shock.

i fully agree with the "need a partner working" bit - currently we have a 2yo and a 4yo so it does make it harder to keep money up and stress down. But even if i go full time again for a while it has been really nice to get to spend more time with the kids when they are little for the past 18 months.

if you can be disciplined the independent life is good :)

Obviously you have to do what is best for you and your family, and to please your spouse. However, I would like to encourage anyone who can handle the discipline to strongly consider the independent life. It's just like a commercial I saw recently -- am I a hamster on a wheel or do I have the power to make my own destiny? And think about the boss owners who hire us in mid-sized companies -- did they want to go work for someone else, or did they want to start a company? They wanted to start a company. And that's what I want to do. I've worked too long for others, hated it finally, and felt I was tired of the babysitting -- I needed to forge my own destiny.

Is it tough? You bet it's tough. There are days where I wonder how I can cleave more time into my schedule so that my client won't be upset with my work output. There are days when I kick myself how I goofed off on slack time on the previous week, only to let it bubble up on the current week. There are days when I just spent all day going down the wrong rabbit hole, only to find the task can't be done that way, and I have to let my client know I need to see if they can pay me, anyway. Time, dead ends, getting payments, and contract and client diplomacy -- these are tough issues at times. And they're even tougher when you are up to your eyeballs in code and realize that you have to be all parts of your own company, including accounts payable, accounts receivable, developer, marketing director, graphic artist, president, security expert, salesman, client representative, and so on.

As for shock, if you had perhaps created a buffer zone for yourself of cash, such as the ability to borrow on a retirement account and put the money back before your tax revenue service charges you a penalty, or actually saved money -- if you had perhaps had done this, then you might be able to ride out the bad news, have a little downtime while you find a new client on the web, and just move on. However, hindsight is 20/20.

So, perhaps this full time thing will just be a temporary thing, you can build up some buffer cash, and go back at it again.

To conclude here, let me share with you something that happened to me. I used to work in a sysop job for awhile, doing web development occasionally in the office for small projects. Anyway, I would kick off a job and would find myself with free time. So I would hop on the news sites and start reading. And time and time again, I would read about some young guy working from home, working anywhere he wanted where he could get a wireless Internet connection, earning the same salary I was earning while slaving away in a boring cubicle. And I approached my supervisor with this news and asked when I would get a raise, and he kept saying the budget was frozen, and I just got sick of it one day, overworked and underpaid, and just put a resignation letter on my supervisor's desk and walked out. And now my motivator every week is to think about that job, and how I hated it, and how if I don't keep moving forward I'll end up back in that old job again, the one I hate. So I move forward.

April 11th, 2008, 06:15 AM
Sometimes you have to fight for it. Unfortunately, there are a lot of people who want to bring up websites out there and this is like their first or second one. The naivety means that they'll have all these grandiose ideas, and think they can get away with it for 1/2 your normal cost and/or time estimate, simply because there's a lot of liars out there who snatch these people up and feed them a line that sounds delightful to them until the client gets their first dose of reality. There will be time overruns from these liars, mismatched functional specs, and communication issues.

The competition out there is brutal. They will cut you out of the game usually within the first 4 hours by providing all kinds of ways to communicate with them including live chat, which I found is most desirable to clients but not very good for the developers. Then, they'll be interacting with rapid fire short questions about the project while you're taking your time carefully, trying to figure out the right way to state or ask something.

Most often, the competition will be reading about a site proposal, rapidly classifying it as a "site type", and then pulling a site script off the web that they've already learned and used, or could purchase and use, and then customizing that to serve the client's needs. Sometimes that works, and sometimes that creates spaghetti code, and situations where you "can't get there from here", and the customization can seem to have a bolted-on feel that just doesn't mesh well.

So here are my tips to fight this:

* Judge your client. If they seem like the type that would love the non-custom kind of system where you take a canned site script off the shelf and customize, rather than build from scratch, then go for it. And if they don't know better either way, remove your ego from the project and just go with the canned site script and customize.

* Interact just as fast as you can in short little bursts of questions, and preferably with online chat, to get your questions answered about the proposal so that you can provide a faster estimate than the competition. When you see that proposal land in your inbox, don't take a cigarette break or catch a meal or do anything else until you have gotten all your questions answered and then delivered a project estimate. Clients these days want their estimates just as fast as possible, 24x7.

* Remove your ego and don't add any other parts of the functional spec that you think should be there simply because you've done these before and know it will need to be in such a kind of website. Only give them what they ask for.

* If you think it's going to take more than 4 weeks and/or more than $10K USD (2008 prices), and it's a starter site for someone, then odds are your bid won't go through. Your competition knows this. So what your competition does is keep it down to 4 weeks or less, no more than $10K USD, and they write a very slim functional spec that promises major points a, b, and c, and says if the client wants x, y, and z, it will cost an additional set of hours at an hourly rate.

* Clients who just finished a starter site as a phase 1, and now after a few months want to work on another major 1 or 2 phases -- these clients are often going to be low on cash. Most of the cash that is usually doled out is in the first phase, unfortunately. Your bid needs to be prepared for this.

* Your competition is probably going to have the leg up on you with rates. We're all aware of situations where people will work for peanuts, while you actually want to pay your bills and make a nice profit. In some of these countries, the guy you're competing with either doesn't get fed that night or he competes against you. So, as much as you realistically want to raise your rates in order to pay your bills, I can tell you that this isn't the best strategy for you. You need to be leaner than that, cutting down time and cost considerably with optimization techniques and just outright chopping away at the project schedule. Remember, you need to eat too. It's either you or him. So, to make up missing cash, catch it in the follow-on work, and double or triple time yourself in a week with more than one client, or get some other money-making projects off the ground -- anything to hedge your bets, especially if it can either give you residual income that you have to work for, or, even better, residual income that makes money in the background while you do something else.

* Learn from your client successes. Did they have a project that took off well with income coming in, much to your surprise? Fine, take the concepts of that site (not the source), throw it on a whiteboard, rework it the way you would like it, and get it on the Internet just as fast as you can in order to hedge your bets for dry income spells.

* When applicable, let a currency exchange rate, your communication skills, or your maturity give you an advantage over your competition, and remind your client of this. And market yourself to clients where their currency exchange rate is favorable to them and you.

* It's far easier to keep an existing client and get repeat business then it is to keep searching for new clients. So constantly work on that rapport, even when you have to bite your tongue, and always be encouraging of your client's ideas even when they are hoky -- just go get the repeat business.

* Decide how hungry you are, or will be next week if you don't have work, and set your rates and timelines accordingly.

* Keep interacting with a client a little bit even after they say no, that they have found someone else. There still may be a chance that the client hasn't thought of something to look for in that freelancer choice they made, and that if you lower your rate slightly but can show you are far more efficient, they just might bend your way.

Now, out of all this, the sad reality is that yes, if you beat out the competition, you will have to work 10x harder and will likely have time overruns, yourself. There are no simple answers for that except to do a Lessons Learned after each project and make changes to optimize for the next project.

April 13th, 2008, 10:37 PM
Bad client ideas, but still a great client. I've had some oddball website proposals come across my desk. One was for a guy who thought I would build my own world wide search engine for him for like $2K, and it would host on his little shared hosting plan. Now, before you laugh at such a potential client, perhaps telling him to go ride his tricycle back home because you think his mommy is calling him, take a deep breath and go into teacher mode. I mean, after all, the guy has $2K in cash in his hands that could transfer to yours, right? It's so easy to laugh at the client and reject the proposal, then move on, and lose that whole sale. But don't be tempted to do this. Cash is cash.

So, on proposals that you know just won't fly at all, where you could end up with some client being upset with you because you can't build him a nuclear warhead for $2K, you merely need to break it out for the client in plainest terms possible on what he's asking for, and let him know that you would be interested in his other ideas he has.

For today's freelance web developer, your #1 client type is going to be an affiliate marketer, or AMer for short. You may also see this listed as IM, or Internet marketer, although IM also stands for Internet Messaging, so people prefer the AM or AMer term. So, when I get a fresh new AMer who's got cash burning in his hand and wants to use it, and comes up with oddball ideas, I try to cool his heels and give him suggestions on other web market ideas.

I usually pitch them on the concepts of tangible products and services or intangible products and services; whether to have an inventory, not to have an inventory, or to be a reshipper; and how much risk and time one wants to take on initially before it can be outsourced to inexpensive labor while they go chase their next big idea.

So far, so good. I've steered two clients into better ideas.

So why don't I quit and do AM work, myself? Well, AM work has risk and requires capital and time, and takes tremendous volume in order to generate decent cash. I make more as a web developer for AMers than I do in my own AM efforts, currently. But does that mean I shouldn't do any AM on my own? No, not at all. It just means that I need to watch what my clients are doing, and how profitable their ideas seem to be, and then whittle away on my own AM projects based conceptually on theirs, or inspired by theirs, while not sharing source code with theirs, and do this over a period of time until something engages. In freelance web development, there are ups and downs, month to month, and one needs to hedge their bets with other project ideas of one's own. There's nothing like the cool feeling of waking up one morning and finding $10K added into your bank account from a bunch of "bling" doodads your website just sold on the web for the MySpace crowd while you were sleeping.

April 14th, 2008, 06:36 PM
Between projects is gritty downtime. I find it difficult between projects. It's a lot of wheeling and dealing with sales and marketing and potential clients, diplomacy, bug fixes for previous clients, company management stuff for your own company, and training. It's confusing and requires fast interaction and multiple client discussions at the same time which you cannot get confused. It's anything but programming, and that can be frustrating for a person who is like me and would rather be programming. And this can go on for about 2 weeks at a time before something engages as a real project with a real schedule. I've found that in these downtime periods, I can't take vacations or mini-vacations (ones where I still code on a project) because I'm glued to the deal-making and need to react too fast in a day. But when I finally get into code mode, I can take a vacation and bring the laptop with me and get a good stretch of programming in at night or in the morning.

April 14th, 2008, 10:23 PM
Thanks for the articles.
We have a lot more in common than just our first names.

The first post was like a diary of my first year as an independent - 1992.

Some of the things you mentioned are exactly what I do some aren't and I do some things you haven't mentioned. I will investigate them thoroughly. Keeping abreast of technology is harder when you are a one man band.

Some things you touched on that I might elaborate further by describing my experience.

My kids were born in 1990 and 91. I was there for all the milestones when they were young. That alone was worth more than 10 hours a day in a cubicle.

We did it tough for the first 3 years. The only thing that got us through it was more work. My wife took a job working long hours and I had the kids. We had a nanny a few days a week until school started. Apart from a few phone calls during the day my work hours were 6pm - 3am.

1995 was the year I became more established. I had 14 days off that year, weekends and Xmas included. At least 6 of those I worked 36 hours non stop.

These days I have a couple of stable clients. Risky but at the moment it suits me.
Broadband technology has brought me plenty of freedom. I live on a 120 acre farm less than 2 hours from a major city. I live where most of the country want to come for holidays.

I do a bit of traveling but I can handle that.
My youngest finishes school next year so after that we plan to reevaluate our entire lifestyle then.

It is a very good life but there is one question you have to ask yourself an answer honestly before you start;

"Am I good at this?".

I am good at my job. Very good.

That is how I get by.

I have never had to advertise. All my work has come from word of mouth recommendations.

I am not pissing in my own pocket here, it is a very important point. If you don't have the skills, especially at handling people, the stubbornness to finish what you start, and the ability to write off an occasional $5000 bad debt to experience forget it.

Thanks again for the posts.

April 15th, 2008, 06:17 AM

Thanks for the response. I too live on a farm. My wife inherited 20 acres, and that's huge, so I can't even imagine what it'd be like to have 120 acres. And unlike you, I don't have the advantage of a major city. I'm an hour away from a very large beach town, but that's about it. I haven't gone down the avenue of putting out cards for customers there yet, but that's going to happen soon. I imagine the #1 client I'll get when I do that are real estate companies, which sounds fairly lucrative. I'll post back to here if that's the case.

I think I would shrivel up fast if I ran my work on word of mouth. Advertising on the web is fairly inexpensive and extremely effective for me. However, I often get about 25 responses, and half need a "re-education" on what it really takes for a project, or how to come up with a profitable idea, and then 1/8th are actually projects worth taking.

Because I'm posting this in an Ubuntu forum, I also want to say that I try to make the pitch any time with my clients when I can for Ubuntu solutions, and that I only use Ubuntu on my workstation when building these sites.

April 15th, 2008, 06:43 AM
Learn a Good Shopping Cart Product. One of the first things I recommend for every freelancer is that you find a good client opportunity, even if he pays you only a meager $500 on a fixed bid, and learn a good shopping cart product. There are dozens of free ones out there that then charge for various things. You really need to make a product matrix and evaluate the pros and cons of each, and interact with the tech support or community support, and download and install several until you decide which one you like. In the end, I think you'll find that the most popular ones are actually fairly "old school" now, and they need a good modernization and a good dressing up. There are many more modern but not yet popular ones out there, and you should strongly consider these as well.

I do not recommend you build one from scratch unless the guy is very picky on how he wants it, only has less than 15 items to sell, and/or you feel eager to make one yourself.

And even if you learn a modern commerce package, you probably still should learn the most popular commerce package as well just so that you can grab more of those customers and steer them towards the more modern package, or at least take those customers and use the most popular one. For instance, Magento Commerce is a modern eCommerce package, but osCommerce and Zen Cart are old school and more popular right now.

In fact, learn a category of sites. I'm beginning to realize that my client sites most commonly fall in the following categories:

* MySpace knockoffs.
* Vertical Vendor Directory -- browse, search categories, and have free and paid vendor listings in a vertical market
* Catalog/Cart
* Real Estate Listing Site with Google Maps integration -- comes in two versions: one for rentals, another for houses, both of which have different needs
* Forum w/ PM, live chat, and CMS-style homepage where forum articles can be published to the home page
* Tracking systems
* Doctor site -- schedule an appointment, request a prescription, etc.
* Professional site -- a content site, mostly, with an online newsletter option, way to email the person/company, calendar of upcoming and previous events along with photos and event journal entries available to the public, and gallery of photos. Is also a great site for politicians.
* Survey sites (rarely a demand, but some demand)
* Mashups (http://en.wikipedia.org/wiki/Mashup_%28web_application_hybrid%29) -- especially ones that utilize Google Maps.

So, I recommend that freelancers go learn how to build these, eithe r doing the "paid training" route by using a flexible client and trying out a few packages and then customizing, or building these from scratch, or using a product for 50% of the project and building the last 50% yourself. Sure, you'll lose quite a lot of cash opportunities while you learn these sites, but think of how much of a better performer you'll be when you can take on more work and turnaround things much faster because you know how to turn these out rapidly.

If you can keep your day job and learn these things at the office or at home on nights and weekends, before you actually become a freelancer, then that's even better.

April 15th, 2008, 07:03 AM
Getting Paid. Some developers want to use an escrow service (http://en.wikipedia.org/wiki/Escrow) for a project, but I think that's a lofty idea. Few clients have the extra cash to pay the fees on that, and if they didn't, then it eats into your profit. I think they also don't like the hassle. If its a huge project to the point where you even think of needing an escrow service, then you're probably taking on too much risk, anyway, by not getting paid in $2K increments, anyway.

Now realize that freelancing is a cash risk. You could very well not get paid. However, remember that your clients give you passwords to things when doing projects, and they need you or someone terribly to make them a success, so the cash risk is minimized somewhat because they need you, have shown that they trust you by giving you passwords (such as to their hosting provider and database), or they suffer a loss as well. Still, you could possibly not get paid and you need to be aware that it's probably harder to chase down that cash then it is to just mark that client as bad and move on.

So, if getting paid as a freelancer has some risk, you need to minimize that risk. I recommend on projects that you get a check either every 2 weeks or every $2K, whichever comes first. If fixed bid and under $2K, then take it one lump sum at the end of the project if the project takes less than 2 weeks.

And then there's how to receive payment. There is foreign and domestic.

Foreign. My experience has shown me that getting a check from a foreign client over regular mail (even certified mail) is a VERY BAD IDEA. It'll get tied up in national customs for a good long while. The best option is something like PayPal, but if that won't work, and if you can wait a bit, have the client drop a check in an insured, certified cardboard envelope from UPS, FedEx, Airborne Express, Puralator, or other service like that. Never use your national postal service route**. The last option is wire transfer, but I've found that it eats up $50 on your client's end (max, usually), and then about $35 on your end in the process of traveling through banks. I've also found that a foreign wire can take as much as 5 days (max, usually) to process.

Domestic. PayPal is the best option, but if not that then go the 3-day private service option with insurance and require a signature.

** As far as the national postal service, I've found that this is a bad idea. First, it's terribly slow, especially during tax season and other high mail seasons. Second, it's terribly unreliable. So, go with a commercial vendor over a government-owned/subsidized one.

Meanwhile, there's the frequency of payments. Once you establish your company and don't have a lot of cash risk eventually, you can have your repeat clients, or more reliable clients, pay you each month. It's easier on them and you don't have to invoice them as often. I do not recommend the month option, however, with new clients until time has passed and you feel more confident with them.

April 16th, 2008, 02:39 AM
Tread Lightly on Design Advice/Comments. You may have had a previous client where you might have said, "Hey, I know you want me to work on rewriting your site, but would you consider some design changes as well?" And by that, I mean the look of the website. And this client might have been delighted to collaborate with you on a new look for the site, and may be well-pleased with the output. Okay, that said, don't take that optimism and foolishly think that unsolicited advice or comments will work with the next client.

I did this once and got a terse response back that the client didn't think we would work well together, and that was that. Get it? He was very upset with me. So, the lesson learned here is that you should either tread lightly on design advice or comments, or not do it at all. Otherwise, you could get the client very cranky.

Clients can be cranky. Potential clients can be quite cranky. Sure, it's very hard to read them by email, to know how to communicate with them effectively, but we must try the best we can. In this business, you can expect potential clients to blow their top at you over the slightest thing because it's easy to do so -- they know it's a big world out there and won't be seeing you again. Also, unfortunately there's a lot of dev amateurs and dev liars out there who give them good reason to be cranky, and there's a lot of devs out there who have bad communication styles in the first place. So, when looking for your next sale, get ready for some serious diplomacy if you're hungry for the sale, or get ready for some rejection because you're going to get a lot of it.

April 19th, 2008, 03:56 PM
Great thread Mike, wish I could have this a year ago.

I thought I would chime in as well. I can't believe how much having a retainer helps, its not 1/2 my salary, but its close. I strongly recommend trying to obtain one when starting out. I have found it gives me time to look for more work.

I too found myself frustrated at times when I felt I was "goofing" off but later learned that you can't work 24/7 and with a family sometime its more important to take an afternoon off and spend time with them, even if you have to work twice as hard the next day....memories are priceless and far more important than any client is. I know they pay the bills, but I found it helpful to think this way.

Also, I have a part time job, only working about once a week, but its nice to have guaranteed money, even if it only pays the car bill...its one less thing to worry about.

Keep up the good work.

April 20th, 2008, 07:14 AM

Because I'm posting this in an Ubuntu forum, I also want to say that I try to make the pitch any time with my clients when I can for Ubuntu solutions, and that I only use Ubuntu on my workstation when building these sites.

I started pushing Linux about the time Red Hat 6 came out. As Linux has gained momentum my early adopter clients have won kudos from tech-savvy business associates.
I admit that I have very little loyalty to any particular distro. My most successful server was a Red Hat 8 that ran Hylafax with an 8 port modem card and sent an average of 250 faxes a day for 5 years based solely on an application of business rules on the client's database.

My opinions on Ubuntu probably differ from the mainstream here but I see it as first becoming interesting sometime around Dapper and possibly ending its interesting phase now. That will depend on whether the community can avoid the temptation of trying to be everything to everyone and building a bloated unreliable system.
We will see.

I have spent many hours since I read your first post investigating some of the technologies you mentioned and I expect that process has a little to run before I finish it.

Thanks again for posting your insights. I am finding them an inspiration. Perhaps it will be the spur I need to re-invent my career (again).

April 21st, 2008, 07:42 PM
Dealing with Yourself. Freelancing is a solitary business. That's the beauty of it, but sometimes it gets troublesome when you have dry periods and you panic about cash flow. Sometimes it gets depressing. You might find yourself having this problem sort of like vertigo where every time you think about the problem, it gets worse and worse. But there's a way out.

First of all, recognize that YOU are your own worst enemy in this situation. Your thoughts become circular, and then spin more and more rapidly, as you fixate on this problem. Yes, the problem needs to be dealt with, but not the way you might have been handling it. What you need to realize is that the panic is based on facts you currently have, not new input. I mean, it's a big world out there, and plenty of opportunities if you stop the panic, think rationally, and go seeking the work on the Internet. If you have to, lower your rates a bit for a month, or do crazy fixed bids for low rates, just to get something moving. And if you do the low fixed bids, then multiplex a couple of these to make it worthwhile, and trim the functional spec back a good bit as best you can, then work out the details with the clients on the tail end about why you couldn't complete every little thing for that low $300-$500 pricetag. Most often the clients will understand, especially if you have given them at least most of what they wanted or slapped together a couple canned products together and customized.

Second, I've previously mentioned a few things to you in this long thread about what could help you avoid this situation in the first place. I've explained how to optimize, how to have marketable skills and to continue improving them, and how to have emergency cash to borrow from when necessary. I've also explained that it's a good idea to have a client on retainer for half your normal rate just so that you get a minimal paycheck. And I've explained that you need to be looking for your next client when you feel you're wrapping up work on your current client -- hit the ground running, should I say.

Third, software and websites do not write themselves, and neither does the marketing for your next gigs. It depends on you, and it requires action, not worry. So, sleeping in, being depressed about the situation -- that's 180 degrees in the wrong direction and you'll fail.

Fourth, if you're only looking to the Internet for your sales, and that's dry for a month even after trying, then consider printing up some nice cards and several card holders, and drive around your closest big town to pin up your service in grocery stores and other places where allowed. You might get told a whole bunch of "no", and "you can't pin that up here", and "no soliciting", but then again you might not. Shrug off the "no" like a good sales guy and move on. Leave your email address and your website and there's no real need to post your phone number in this case.

Fifth, if you only do web development freelancing, then consider also branching out and doing design work, testing, and a few other opportunities as well.

Sixth, go start some web projects that could potentially bring you residual income. For instance, make some kind of website that helps people schedule their rental properties for lease, and connect through PayPal or WorldPay, with the deal on the pricing that it's affordable to install for users, but that you take a small percentage on the lease transaction. Or start a free dating site that makes its money on ad revenue and gifts. That's residual income, my friends.

May 14th, 2008, 06:13 AM
Time Starts To Run Together. As a freelancer, you will start to notice that time starts to run together. This isn't because you're in some office, away from your family, and called at all times of the day and night when home to the point where you children never see you and you lose track of time -- no, not at all. That's a daytime job in a cubicle. No, instead, as a freelancer, you lose track of time because you get up when you darn well feel like it many days, work as late as you want, work on weekends when you're bored and often enjoy it, and are generally available to meet any appointment on short notice with your kids. So, time starts to almost have no meaning to you. It's an interesting phenomenon. But don't let it get out of hand -- your clients will hate you for missing their appointments or missing your promises on turnaround times.

Billing on Negative Tasks. I haven't had much success when I'm asked to do something and then find that the only answer I can give the client is that I can't do the task as they wanted at all. I mean, let's say they alot me 20 hours for a conversion of something, and you tell them that the risk is that you might not be able to convert something but still want to be billed for the time spent researching and attempting it. So they agree. But then you find, after all, that you spent 15 hours and couldn't convert the thing. Well, good luck on being able to bill for those 15 hours. At most, you'll be lucky to get away with billing for 6. So, as a rule of thumb, if you achieve something, you'll have a lot of luck usually in billing for your full rate of time. But if you don't achieve something and still want to get paid, you'll be lucky to bill for even half of your time spent. So tread carefully here.

Recent Upticks in Packages. I've already sung the praises of jQuery, Smarty, and Blueprint CSS for improving the quality and turnaround time of your work, but now I'm seeing an uptick in Magento Commerce, Expression Engine, and CodeIgniter. Watch out for those and see if they would be of interest to you in order to optimize your work.

May 15th, 2008, 06:58 AM
Project Management. Before you even get started as a freelancer, I highly recommend you either purchase, build, or find an open source project on the web that can help you interact with your clients in a more organized way. It will help you in staying focused, planning your project timelines, and keeping you from getting completely confused. You need a project management tool, but a specialized one. In particular you need a bug tracker, a todo list, document management system, a calendar, and perhaps a shared addressbook. If you're able to swing it, add a comment system, although I think my clients and I prefer to comment on stuff via email, instead. And these things need to be shared between you and your client.

Looking around, a likely choice is trac because it's free. However, a lot of people prefer Basecamp, although you have to pay for that. There are a few others, but they just weren't simple enough to use or weren't flexible enough to be used for many things.

For me, I'm just too picky, so I'm building my own. It's sort of like a slimmed down version of an old Notes database with tabs, categories, and items you can stick inside that store fairly much anything you want to store.

Errata. Previously I claimed that you really shouldn't have more than 2 clients in a week. That's still sort of true, but realize that things happen. I mean, you could have a couple of down months with sales quota, so you go hunting for gigs. When the gigs come in, however, they often put you on hold for two weeks while they iron out a web design. So, in that timeframe, you have to hunt down another client and knock out something quickly. But if you go over in time, then you end up where the other client wants to engage work with you finally but you're still working on another client's project. Now compound that by having 4 irons in the fire and then they all engage at once. So, yeah, a project management tool is really necessary.

May 26th, 2008, 01:46 PM
This has been an interesting thread to read. Going through college, I used to do a lot of web work as an independent, but I never really considered doing it as a full time gig.

I'm only 2.5 years into my professional career as an embedded systems engineer, but I'm already bringing in a six figure salary and I only work 40-45 hours per week. I rather enjoy going to the office. My commute is only 15 minutes to work, and there are a number of other talented engineers with whom I work and I can often gain valuable insights from them on challenging projects.

While I won't be making $200k, $300k, etc any time soon, I make plenty and have the stability that I think is great.

From reading your posts, it sounds that business is a bit erratic, and you have a lot to juggle. At this point, I prefer the simpler lifestyle that I have.

Again, it's been interesting to read your thread - some good insights into the life of an independent developer. Keep up the good work and best of luck to you!

May 27th, 2008, 08:30 AM
Great CMS. When you get in this business, at least from the PHP perspective, when it comes to CMS (Content Management System), or a task that obviously means a CMS -- you're pretty much looking at two kinds of clients. You'll either have a client that wants you to customize WordPress, Joomla, or Drupal, or they'll want you to make a site for them that's about as easy to manage for them as WordPress (again, not knowing this means a CMS). On the latter, it's tough because they give you a generic XHTML template that they had chopped up, and you're stuck trying to figure out how to get it to work in Joomla. Well, it won't work very well that way. I did, however, find a great package out there called TextPattern. With this, you drop tags in any kind of XHTML template and it automatically makes a website. Okay, but the drawbacks were that it lacked a WYSIWYG editor or even a BBCode editor -- you had to ask your clients to code in a markup language called Textile. That's a no-starter. Also, the admin interface was sort of easy, but lacked polish.

Well, both those drawbacks have now been solved -- there's the Aeron admin theme and hack_tinyMCE, which, put together, make TextPattern into an awesome CMS for many needs. Here's a beautiful admin screenshot someone posted:


The Freelancer Lifestyle. supirman was correct (last poster) when he said that it was very erratic. I won't kid you here. There's many ups and downs. You have to multiplex your client work in order to stay afloat and pay your bills (if you have a house, two SUVs, kids, etc.), not just work with one client at a time. Sometimes you'll be working with 4 clients at a time, doing very short projects, and having to go hunt for new clients every 3 days. And meanwhile, you need to work on your own site projects and affiliate marketing projects for yourself every day or they'll never get done. Last, you need to be constantly marketable, so a vast understanding of several products (Joomla, CodeIgniter, etc.) is important, and then zoom in on the most commonly discussed ones.

The <*clear throat*> Industry. I need to mention this here. This is something I won't venture into, but yes it's tempting and yes I've been approached at least once every two months to work on a site like that. I turn every one of those down because my general impression is that guys who own these businesses are some seedy characters. I would imagine that extortion, harassment -- you name it -- might come easy to these guys. If I got involved with this, and I ever got the client riled up, there's no telling what would happen. Heck, my name might end up in the papers with a leaked story about it. So, you freelancers out there -- hear my warning. Don't get involved in this, no matter how much money is thrown at you. It ain't worth it.

Another Way of Looking at Freelancing. I tell you, until you do this and it's sink or swim, you never really get serious and train yourself on the kinds of things in this field that are important to your customers, and you never really focus on how to optimize your time. Looking back over the half of the year here, I can say my resume has definitely fattened as I have been learning so many things and working with all manner of projects. You also don't focus on things like marketing, sales, running a business, paying business taxes, and so on, unless you take the leap. Surely that will be something valuable in the future if I ever decide to go back into the workplace.

If Things Were Different. You know, if your life was really simple, such as not having any kids and not being married, and then not having a large set of $4000+ USD payments to have to fork out every month, and you did everything else you could to save cash, and moved to a country where the currency was far less than the US Dollar and was a stable country -- you might just actually make ends meet as a freelancer. In fact, you might earn enough on freelancing alone to buy half the payment of an old house after 4 years. And that's not even with your own site project ideas or your own affiliate marketing work on the side. Something to think about....

Learning To Move On. You may find that clients are excited about you. They may be excited to find you, find that you can speak English very well instead of werry vell, and tell you that something's in the pipeline and if you'll just hold on a bit, they'll have some work coming back from the page designers for you to work on. Yeah, yeah, I hear this all the time. That's a client to be nice to -- very nice to -- but move on. They'll waste your time if you park like 4 of these and think they'll call you within a month. They often won't. Not that they don't have work -- it's just often not as ready to hand to you as they want, or the cash isn't there yet to pay for it. So, now I have the approach of parking those clients and moving on. If I can't get someone who's ready to go on the day I'm looking for them, then I'm not going to interact that much with that new client. I mean, I just can't -- I have a business to run and bills have to get paid.

August 9th, 2008, 12:39 AM
Estimating Projects
I've changed somewhat now on how I do web applications for clients and how I estimate them as well.

I usually take about 3 to 4 hours per CRUD, which stands for Create, Read, Update, and Delete, and usually you can break an application down into a series of CRUDs. There's CRUDs in the customer facing website, and CRUDs in the Admin website. Each CRUD group is something I call an "entity". So, when pouring over a project estimate, I count the number of entities I see, consider the admin entities as separate from customer facing entities, multiply times 3 or 4 depending on site complexity, tack on 1 to 2 weeks for testing time depending on complexity, and tack on 1 week for design integration and tweaks. Most of the time my clients balk at this estimate and complain, but then again most of my clients are new at this and need a reality check. So, I go back and explain why this is. If they don't like it, well, nice knowing them -- I move on and find another client. I think that's fair.

One argument with the customer is, "Do you think you don't like the estimate by the hours it takes, or just the cost per hour?" If they come back with cost per hour as the problem, then tell them that you're not the right person for the project -- that they need someone closer to their financial expectations. If they come back with time estimate, you can tell them that, (a) you base the timeframe on realistic analysis of previous projects, and (b) this is a preliminary number and once you do (the next step below, called "grey paging"), you'll have a better target timeline. I also conclude and say, "If I finish the project faster than my expected timeline, then you win -- you get a discount on the price." If they're still too stingy, then, again, let them know they need to find a developer in their financial ballpark and kindly wish them a nice day, at no offense.

However, this has been terribly wrong on a couple projects. This is because I need to tack on about 2 hours for every exception in the CRUD, such as yeah, a user's going to update a record, but we're going to throw in 3-4 if/then's to do some extra things, and mail a user, perhaps update 3 other tables, and so on. And too often I have skimmed functional specifications and not caught the subtle phrasing that, when you inquire more about it, lead to these discovery sessions where these exceptions are brought to light as being necessary and were assumed.

So now I do two estimations, and I tell the client this up front. I build them an initial estimation as best I can and we move forward on that. But here's where things go differently now. Now, while the designer is off in la la land doing his artful thing in candy land, drawing up the eye candy, I'm building what I call "grey pages". I start building the website pages for the customer facing site as well as the admin pages, based on what I read in the functional specification. These grey pages don't do anything -- they just represent what every page will look like and include phony text. I don't style them that much except to position things on the page much like the initial Photoshop images or wireframes I'm given for a site. So you might see me using SPANs (columns) and DIVs (rows), using float left and float right and centering, and in general just knocking out ugly grey pages.

Now, obviously some grey pages are not viewed unless you click Submit on a form or something, so what I do is put a temporary hyperlink in the footer that one can click to go see that other page.

As I do this process of grey pages, I get these advantages:

- I discover the functional spec gotchas much sooner.
- I understand the functional spec better, and the client can discover holes and fill them as well.
- I'll need to build these pages, anyway, so I haven't lost much time.
- It's far more fun to connect pages like these to a database than to slowly build each page at a time -- a page where normally I would be drawing it, styling it exactly, then connecting to the database, introducing functionality like at an inchworm crawl. So, now I can move much faster it seems.

So, after all this, I present this to the client fairly rapidly, which actually pleases them because they have something tangible right away to show the work and to show that I am attempting to grasp their concepts in my mind. We walk through the pages and I listen to the client saying how this or that must be changed. We get this right.

Once that's achieved, I then look over my project timeline yet again and make another revision on a final prediction of hours to complete the site. If it's something we can do, then I move forward. If major gotchas are introduced that blow the time estimate way off, and if the client can't deal with that, then unfortunately all I can do is bill for my time on the grey pages, hand them over to the client, and move on -- that is unless they don't mind breaking off some things into a phase 2 and we can shave this phase 1 down a bit. It's kind of brutal that I must do this, but then again it's brutal to me when I have to work 120 hour weeks for a client because I had a project estimation way off -- no one benefits when a developer is overworked.

Speeding Up Projects
On the sites I do now, I'm now doing this series of steps:

1. Preliminary project timeline estimation, but let the client know that you'll be doing a more thorough one in about a week's or half a week's timeframe once you complete the grey pages, but that you need to be paid for the grey pages.
2. Outsource the design or the client does that for me.
3. If the design is back but not chopped up, I either outsource that or the client does that for me.
4. It takes awhile for a design to get chopped up properly, and there are often times it needs to be re-chopped a couple times, so I waste no time here and I begin on "grey pages".
5. Walkthrough the grey pages with the client and have a little more discovery about the functional spec.
6. Do any risky proof of concept stuff, such as using a new search engine that you might be uncertain of.
7. Do my second and final analysis on timeline estimation. If the client refuses the new estimate, oh well.
8. Build the database tables.
9. Decide and build the entity objects for each of the CRUDs with the database. This means that most of the meat of the site is done and put into these reusable objects. By being objects, these methods can be overloaded and subclassed eventually, if need be.
10. Build the glue code that glues the objects to the page templates. Start from the admin pages first, actually, and then move to the customer facing website. (That is, unless the client has a preference that he wants you to start from the customer facing website first.)
11. Integrate the chopped design XHTML with the existing page templates.
12. Present the sort of buggy end result to the customer and tell him it's bug testing and fixing time.
13. Finish the testing and bug fixing.
14. Roll it out.
15. Lessons learned.

As well, as I go, I keep a work log -- one personal and one for the client. This helps me figure out how long I'm taking to do on certain tasks. Also, in my Lessons Learned, I think up new ways to automate and shorten my times on turning out work.

Leaving A Project
Every once in awhile, you'll get into a bad situation. Here are some examples:

- You pleased the client and perhaps his partner or manager, but then he introduces a third partner or peer to you (perhaps labeled more senior to you) who is extremely technical and wants to knit-pick your time and skill-level. I call this guy the "time and motion studies expert". If you can work with it, great. If eventually this causes you to miss deadlines unreasonably, or you end up waiting on him because you've been told to do so, then a thought runs through my head -- if this guy is so important on the project, contributes very little except criticism, and seems to be highly technical -- then why doesn't he just build the site and I stand out of the way by quitting the project?

- If the client keeps harping on wanting you to use spaghetti code from a previous project in order to build the new site because supposedly he thinks this is easier.

- If the client keeps comparing you to some bad experiences he's had with offshore developers and can't get off that point, and which you think is entirely uncalled for.

- If the client keeps harping on something being tremendously easy but yet you find it's easy to explain, but time-consuming to build, and it's now getting to the point where the client relationship is not working well.

- If the client starts to cuss or become unprofessional in any way -- there's no point in enduring that. I mean, after all, you're a freelancer and you more than likely left an abusive workplace in the first place, so why put up with it at home -- there are too many fish in the sea.

- If the client keeps asking for freebies and you give him up to 2 unpaid weeks of these and you feel it's time to draw the line.

So, when I get these, I start with something subtle and nice, to hint at this being a discomfort that is unproductive. If things get better immediately, I move on. If not, then I readdress this more formally in a very short two paragraph thing by email, followed by a conference call you can can between you, the client, and perhaps someone else involved. If that doesn't help, then unfortunately you do what you can to find a decent cut off point. For me, what I do is knock out at least one whole piece of the site, such as just the admin, or just the customer facing part, or just the grey pages, or just the database design. I then bill my last invoice for at least half what I was expecting and say that I want to be off the project because of reasons previously stated. If they want to get all nice and all and fix this, then great. If not, then I bail on them pretty harshly, I'm afraid. Now, they might not pay me my last paycheck, and may even be rude about it (and often are), but I just move on.

Now, it may hurt your feelings to feel that as a freelancer, but realize when you had a cubicle day job, your sales guy and project manager endured this pain for you, and so now you, alone, must experience it. It's a fact of life that not everyone is going to agree, that some people are going to be unprofessional and immature, that some guys will think they are hotshots when they need to get a clue, and that you can't please all clients. However, balance this with wonderful clients you will meet or have already met. There are truly some wonderful clients out there that will blow you away with professionalism and friendliness. The pain hurts sometimes. Heck, you may have to ceremoniously deal with the pain by doing yoga, meditation, prayer, boxing, karate, swimming (punching and screaming under water, likely), or perhaps dig a hole, write your angry thoughts down, burn them, and bury them. But you deal with it and you go looking for the good clients out there. Otherwise, you can trade your wonderful lifestyle for the dark cubicle day job you once worked. And once you get a taste for successful freelancing, and finally an immensely profitable year, you'll never want to go back.

I'm now earning in half a year as a freelancer what I used to earn in an entire year in a boring cubicle day job. I have more time with my wife and kids and they speak to me more often (even when I'm working). The secrets are:

* You can automate, use templates, and learn new frameworks to speed up your time.

* Pay for Internet advertising, but only in small sums. Most often, it works.

* Don't sit on your laurels. Hit the ground running just as soon as you can at the end of one project and when you can catch a breath.

* Budget your time and control the OCD, ADHD, ADD, THC -- whatever acronym or baby blanket blocks you from being productive. When you beat time estimates -- that's the time for the OCD, ADHD, ADD, THC, or whatever. If you can't control it, then anonymously blog it, get it off your chest, and move on as fast as you can.

* In a boring cubicle day job, the Man can work you 3x as hard. He can fire two of your peers, give you their jobs, and pay you the same or only $2K more. Woo hoo! Meanwhile, the Man pockets all that extra cash and buys himself another yacht or an addition on his house for his home theatre that seats 50. (Actually, no joke -- in my last day job, my boss's boss did this to all of us and pocketed a ton of money from the sweat of our backs.) Or, you can be a freelancer, stick it to the Man, and when you work 3x as hard, such as working more rapidly than normal for one client, or working 2 and 3 clients at once, YOU BENEFIT, not the Man.

* Visit with a CPA. You'll be amazed what tax deductions are possible and this is the single most way you'll beat the salary of your cubicle day job. Some CPAs are expensive, while others are affordable -- look for one with good references that you can afford. In my case, I got a good reference from my lawyer and I use the same CPA now. And, if you don't list yourself to the revenue service as "web developer", but as "affiliate marketer" (who also does web development), you can write off entire vacations (call them business research for travel writing) that you can blog about on a site you put up about vacations, collect ad revenue, and show to your revenue service that this is a business expense towards an income source for you and therefore a tax deduction.

* You save on fuel. This became an even larger reality now than it was even just 6 months ago. I laugh at my former manager in my cubicle day job. She was a brainless moron/slave driver with 4 kids, driving a huge Ford Expedition, often driving it just by herself. Think of the expenses she has!

* You save on food -- without the daily influences, vending machines, and smells of fatty foods around you, you find you don't need to eat as much, nor eat as much bad stuff.

* Your health improves because of lowered stress, so you spend less on healthcare needs, less on psychological/chiropractic/massage/physical therapy, and you have less colds because you aren't around the constant churn of new faces all the time.

So...anyway. I hope you enjoyed this update. Have a nice day.

August 29th, 2008, 05:47 AM
Stuff You'll Need
It's late and I don't have a lot of time, but I'm unwinding here before heading off for the night. I won't be able to cover everything, but I thought I'd offer some advice on things you'll need to build if you want to speed up your web dev freelancing.

* jQuery. I'm a little biased here about this one over other Javascript libraries, but in general you need a Javascript library to help you cut out time and reduce all the need for cross-browser testing you do. Doing pure DOM Javascript is for the birds, I tell you. And it won't take long to learn jQuery if you already know Javascript a little and know a programming language.

* jQuery Forms API for AJAX. If you're doing complex AJAX stuff, you really need to see this. jQuery Forms makes using AJAX almost as simple as doing ordinary HTTP form posts.

* Get used to AJAX and get good with it. AJAX makes sense, especially if you use jQuery and jQuery Forms API, which makes it easy. Let me give you a good example. If you have a select box that needs to trigger another select box without a server refresh -- that's implemented best with AJAX and it's a common need. And almost all your websites will need an admin system. Trouble is, those admin systems will be hosted on perhaps a slightly slow server, the admin has a lot of clicks and forms to work with, and he doesn't want those menus redrawn with every click. The fix is to keep the page static and use AJAX calls to swap out all the content besides the menus.

* Build an admin system. Consider something where you login, have certain roles, and then see a menu system. When you click items in the menu, one of the panes on the screen (just a DIV, not a FRAME or IFRAME) are swapped out using AJAX and jQuery and a web page hosted on the server.

* Find or build a multipurpose, jQuery and AJAX based grid widget, complete with search functionality, column sorting, row selection, and selection checkboxes. I can't tell you how many website projects you'll have that will need one of these.

* Find or build a jQuery calendar control. It needs to handle just dates, just times, dates and times, a range of dates, or a range of times. You'll need this usually in the admin pages of practically every website you build.

* Build a mini-CMS. Sometimes using a CMS like TextPattern or even screwing around with WordPress just won't cut it. Part of the problem with big CMS packages is that they are, well, big. And they also seem to want everything to run through them. What if you already have a layout engine for the website and just want to insert CMS widgets into the pages and have an easy to use CMS on the backend? So, my advice is to learn the TinyMCE tool on the web, learn how to do image file upload, and then to compose your own mini-CMS. You'll be surprised how many countless websites you can do for people once you have this thing written. You can fork as necessary. For instance, if you have a page on a website where someone wants to post news events, you can fork the CMS into something that can handle that context.

* Learn TinyMCE or other richedit widget. Once you learn it, you'll be using it on every project you build from here on out.

* Build a mini-Product Catalog. There's nothing like knowing your own code base under your fingertips. Many product catalogs try to have everything under the sun. Sometimes you want it simple but still capable. You'll want at least categories (2 to 4 levels) and then tags. You'll want the ability to upload images. Start with something simple and then add features as necessary until you have something that's a fairly decent reusable codebase that hits about 70% of your needs. And tie it to both Google and PayPal's free Add To Cart buttons and Checkout buttons.

* Learn how to send SMS messages with a third-party service. This is the wave of the future -- get ready for it. More and more apps will start to integrate with mobile phones. SMS has been around awhile, but now it's picking up steam because now practically every kid in the Western world has a mobile phone with SMS capability. And when you accomplish sending, consider receiving responses back as well.

* Build a classified listings site. Do this one for yourself and make a bit of income from ad revenue and subscription revenue. However, along the way, you'll have something ready for a client who needs something similar to this built for them. So far I've had 3 clients approach me to build one of these and I took the first one and forked it to make the other two.

* You need a project tracking system. Eventually you might get a partner or two, so you'll need something you can jointly use over the web to collaborate on client projects. Or you'll want a system to share updates with your clients and store all the project's files or simply to zip up the source every night. Or you'll want something just for yourself. Some use Arctic, others use Basecamp, some use ActiveCollab -- there are many to choose from. Personally, I think ActiveCollab has the best deal.

* Build a contact form with all the bells and whistles you need, and that has a captcha. I get this request all the time and it's a great way to get larger work by starting on something small.

* Build client-side, self-data-validating fields for all kinds of purposes.

* Learn how to integrate with 1 to 3 popular PHP/MySQL (on Linux) based forum products, such as having your mini-CMS publish companion articles in phpBB and when one clicks Comments they go directly to that article in phpBB. Word of warning here, though -- they're complex animals.

* Take the mini-CMS and build a canned kind of reusable starter website for low-end clients. Sure, it won't handle everyone, but there are a lot of clients who want something cheap and cookie cutter, but yet looks elegant and has a few styling options. And then you can sell this super-cheap as a canned template kind of thing to low-end clients who fit the mold. If they want something more, that's a separate add-on. And this is a good way to get repeat business and to start from something small and make it into something big. Clients will also like an easy-to-use admin interface where they can post their own page updates, so your mini-CMS makes it a lure for those low-end clients to consider this canned template kind of starter site.

So, if you can build all this and have this ready BEFORE you quit your cubicle job and head off into the world of freelancing, you'll be able to hit the ground running very well.

August 29th, 2008, 05:58 AM
When Cash Is Tight

As a freelancer, you may have some panic modes where you're waiting on an invoice to get paid, or stuck behind schedule, not able to produce satisfiable work before you bills come due, or you may have to abandon a lunatic client (and we hate when those occur).

There are things you can do, however:

- Turn out cookie-cutter starter sites by forking WordPress, removing the Posts capability and sticking with just Pages, and flipping these very cheaply for low-end clients. And once you get a pipeline going and an agreement on what you will and won't do with these low-end clients, you can perhaps turn this over to a spouse or relative to flip these for you, sharing the profit. If so, then that frees you up to work on larger gigs.

- Grab a new project and ask for cash up front.

- Learn Inkscape and Gimp really well, along with those plugins and scripts you can download for these. Study design effects from Webcreme and the various tutorials on the web too. Try to duplicate these effects. Start a subsidiary website to your main business of web development, and offer to make logos for people. You won't get a lot of cash, but it helps fill in the gaps and perhaps gives you interaction to horn in on a larger project deal. Plus, after awhile, you just might get darn good at it, get quite trendy, and can turn these out at high speed for easy cash.

- Borrow from your retirement account, if all else fails. In my case, I'm a USA citizen and so I have a deal where I can borrow from my IRA without trouble from the revenue service if I put the cash back within 60 days. I've had a couple close calls, but I've survived.

- Don't let yourself get into this rut again. When a contract is failing and you plan to resign, hit the ground running for another large project -- don't dally. Get your reusable code base up to the point where you can tackle practically any kind of website need in a short amount of time. And get your own residual income projects out there with affiliate marketing and subscription income so that these make money while you sleep, making it such that you don't need to work 100 hour weeks and can come closer to 40, or perhaps, if you're lucky, down to 20 hour work weeks.

September 6th, 2008, 11:35 PM
What about learning a new language or get help from someone so that knows a different language so you can expand your business? I know that spanish and portugeese are very fast growing languages on the interwebs.


September 8th, 2008, 03:09 AM
Certainly, learning another language besides English, especially Spanish and Portuguese, is going to be a big help towards your freelance career. In fact, if you could relocate there for 6 months of the year to Brazil or some place in South or Central America, you might not only save money, but you'll immerse yourself in the languages and get to mingle with people to cut deals. Portuguese is especially important because of Brazil's corporate and government climate has had a huge move towards open source, Linux, and computing in general. In fact, one of my mentors from a few years back was from Brazil, and I wouldn't be where I am today if it weren't for him.


On a completely separate thought, I wanted to state that over these last few months, I have found that it is easy to get clients in the door and to get cash. The hard part is time, which as a freelancer starting out you will find you never have enough of it. However, given enough code that you collect up, you can fork it conceptually and reuse on other projects. For instance, I just knocked out a captcha that I like better than other captchas. It's secure, looks better, and is a snap to install into my framework. So the next time someone needs one on a form, I already have that in my personal bag of tricks. And I've now got a small CMS-like tool, ajax form submission with data validation, and many other tricks. So I can hit the ground and deliver these faster.

September 8th, 2008, 03:18 AM
ActiveCollab I just wanted to say that my partner and I just installed this for managing projects, and it was well worth it. What an incredible piece of software. Not only is it pretty to look at, but it seems to have just about everything I would need for collaboration.

But in general, a web-based project tracker with shared document storage, secured areas of shareable and non-shareable stuff with your clients, and a place for threaded discussions, tasks, code check-in, and group calendar -- these are the kinds of things you'll need once you get rolling. You can probably find open source equivalents for all of these, and then just create a homepage that has links to each one, but it's nice to have a concise package that brings it all together. And for that, and to have it intuitive, it's well worth the expense. Just take the expense and pad it across 3 contracts and you'll be covered.

November 1st, 2008, 06:43 AM
Latest Views

Simplicity over normal sites. Like Facebook, but easier.

PostgreSQL over MySQL. But only for high-volume sites that do lots of reads and writes.

Silk and Tango icons make a site look great when used appropriately.

The guys who make Freelanceswitch.com and their related sites. These guys sure do attractive web design that the common guy desires. Fantastic stuff there. An inspiration to us all.

Use a thin ORM instead of parameterized SQL. Something like Outlet ORM, or roll your own.

Someone came up with something new called CCAPS templating. It's a variation on something old. I love it.

Not a fan of MVC anymore. Am inspired to do something even better. MVC was interesting, and I learned about something called Separation of Concerns, but after awhile it was time for me to move on to something even better. I just think that MVC does some things great, and other things terribly.

jQuery is wonderful. Don't know how I lived without it. And it used to be jQuery versus every other Javascript library out there. But now, I clearly see jQuery gaining tremendous momentum over the others as more and more plugins are being created. I just discovered, however, that not all these plugins are posted on the jQuery site yet. Sometimes you have to google to find the other cool ones.

And if you like jQuery, then you'll love jQuery Forms API. It will replace the way you currently do all your form posting. You'll see the benefits of AJAX on form posting and you'll never want to do it any other way again.

Roll your own mini-CMS. It will pay off in the long run.

Roll your own product catalog publishing system and integrate with PayPal's shopping cart system (which is free). It will pay off in the long run.

Roll your own flexible admin system that you can drop in with any project you do in the future. Take your time on this and make everything about it adaptable and easy to integrate with very few code changes. It will pay off in the long run.

Learn TinyMCE backwards and forwards. Yeah, it's buggy, but it's got its benefits. You can learn to create workarounds for the problems.

I'm not impressed so far with alternative payment systems besides PayPal. Sure, PayPal has had a few glitches, and mostly in their sandbox system, but lately, if you haven't checked them out, they've gotten a lot better. And they appear to be listening to developer advice now. Protx was a recent alternative I looked at and I was not impressed.

Know your limits. After awhile, you begin to know whether you like working on a team, or inheriting code from a previous project, or using a framework, or using MVC. Or you might not like many or some of these things. As a freelancer, you'll quickly learn, trial by fire, which of these you shouldn't do because they only create problems for you with your personality type, style, or knowledge. Do only what you think you can do. Otherwise, you may have some cashflow problems as you over-promise and under-deliver, or get frustrated with the type of client you're working with.

Some clients don't understand terms like bug, warranty, and unexpected results that do not mean a bug under warranty support. They require an education and unfortunately sometimes it's our task to educate them, painfully. Oh well, it beats having to work all the time in a boring cubicle.

November 30th, 2008, 07:45 PM
Tools Advice

Before freelancing, I recommend these steps:

1. Get your passive income projects online before you even consider freelancing. You don't have to have all of them thought out and lined up, but you need to be well on your way and have a steady income of at least $300 to $500 USD a month from these, minimum.

2. Learn jQuery.

3. Learn how to get a jQuery-based image resize and crop tool going. There are a few image resize tools out there. This is becoming a common client need.

4. I used to think one should go with OutletORM or some other thin ORM, but now I think people should just roll their own because then you don't have to wait on bug fixes, or have to wade through reams and reams of difficult code in order to fix it yourself. Basically you want to convert SQL SELECT, INSERT, UPDATE, and DELETE into class methods, and make records into objects. For anything else, give your ORM a Query or Run method for more elaborate needs. I also recommend making the ORM class talk to a DB class. That way, you can swap out DB classes based on the database backend that you choose. An added plus would be to have the ORM automatically convert object property naming conventions such as $oRecord->FirstName into db column naming conventions like first_name, or $oRecord->FKIndustryID1 into fkey_industry_id1. Another plus would be to have it be smart enough to interrogate the table and identify whether something needs to be wrapped in single quotes or not. Other than that, keep the lines few, add to it only when you feel the need, and keep it simple.

5. Pick a favorite blog package and learn it inside and out. Learn how to convert the blog package into a simple website generator by commenting out code for comments, posts, leaving behind pages (aka sections) and the image gallery. The simple website generator can be used for certain low-end clients who want something quick and easy on a very low budget.

6. Learn a forum software package in and out like PunBB or FluxBB. Learn how to add a rich editor into it like TinyMCE or FCKEditor. Learn how to make other site pages that then have a Forums tab which then go to this page, and make it such that one can login to the homepage of your site and automatically log into the forum as well. This is a common client need.

7. Build an admin CRUD scaffolding generator that handles like 50% to 80% of your needs. On the left is a menu system and on the right are the forms. Use AJAX to reduce the need to repaint each of the pages so much because this is important for your clients on slow connections to their websites (often on overloaded shared hosting plans). Make it that you just point a script at your database tables, and it creates a CRUD system for every table as best it can by guessing. Then, from the pages it generates, you can customize the remaining 50% to 20% of the code left to do. Make it use your ORM and DB classes as an added plus. Make all TEXT fields have the option to use a rich editor control or a text area control -- if you don't want the rich editor, just comment out the code on that page that loads it.

8. Learn jQuery UI sortable API and other drag and drop API with jQuery. This is now a common client need.

9. Learn jQuery's animate API for neat visual effects, or use visual effect plugins. Another common need.

10. Build your own mini-CMS. Too often you'll get a web designer to send you XHTML pages and want you to connect them together rapidly and make the pages editable with an easy admin interface by the client. To use a full-blown CMS means a large learning curve, the chance you could get hacked (because hackers like targeting common CMS packages), and having to struggle to get your XHTML templates to fit into its design. But if you build your own mini-CMS, you can just rename the templates into PHP (or whatever language you use) files and then insert <? drop in ?> code inside to pull from the CMS.

11. Learn a really good HTML web mailer tool like SwiftMailer.

12. Learn CCAPS templating or some other thin templating tool for your favorite language.

13. If MVC is your thing, then learn MVC in your favorite language. If not, then drop it. Experience MVC, though, to see if it's right for you or not. There are people on both sides of the aisle on this topic.

14. Fork your mini-CMS into a mini-Product Catalog. You'll find you can do just a few changes to that product catalog to add in a PayPal Add To Cart and Checkout Now buttons -- extremely easy thing to do!

15. Build a form-generator script that you just feed it field names and field types, and it draws for you optimal, attractive form code that you can cut and paste into your site. Make it include the option for Captcha and use Malsup.com jQuery Form API (what I like to call JFI).

16. Learn Blueprint CSS at first so that you understand how to position things on the screen. But eventually you can learn the tricks and can stop using Blueprint CSS so that you can make your CSS a lot thinner. I've finally weaned myself off Blueprint.

January 2nd, 2009, 02:09 AM
Getting Started with MVC

Before I explain MVC, let me explain a natural evolution for web developers. I also have to admit that I was slow to MVC at first.

XHTML and {Insert Language Here}
On really large projects, you may find yourself doing some organization of the directories and so on. Eventually your evolution will involve moving the pages into page templates so that you don't spray XHTML all over your PHP (or other language). Now you have XHTML in a separate set of files with insertion points inside, such as {FULLNAME} or <?= FULLNAME ?> and you can let your PHP insert those values.

Next, you will find that spraying SQL all over your PHP isn't good either, so you'll abstract that into a DB class and perhaps load SQL from a configuration file, fill in the parameters, and send it on its way. The DB class also lets you swap out database backends easier because you won't be making native DB calls from the programming language, and because you can do repetitive stuff in your own handy functions. But it bets better.

Eventually you evolve into realizing it would be nice to have your most-common SQL statements generated on the fly from a kind of object language in your code, so you build something called an ORM. (You can google that if you're new to it.) This keeps you from having to type all the long, drawn-out SQL syntax all the time, and also makes your code a little easier to read. I mean, by pushing all your SQL into that conf file, like you might have done before you learned about an ORM, you kind of hide what's going on and one has to go back to that conf file to see it. And you don't always have to use the ORM -- it's just handy for 80% of the work.

This evolution then continues where you move to one level of abstraction over your ORM such as creating an object like Users, Accounts, Banks, Payments, etc.. The advantage of this is that now you don't repeat those ORM tasks like pulling user records and doing a common task on them in various parts of the app. Instead, you call a User object and do the updates on that. This also gives you the advantage that other developers on a very large project can do things consistently, or that a fixed piece of code can benefit all parts of the site that use it.

Normally in the past, web developers made subdirectories and then files in those, and what you saw in your URL in the web browser expressed that.

Not anymore. Most senior developers these days think in the context of improving Google Search, MSN Live Search, or Yahoo Search Page Rank (aka "PR"). To that end, it's best to create paths like:


rather than


The one without the .php, the ?, and the id parameter -- that's what we call a handsome/pretty URL. These are not only easier to remember, but make your site look more professional, are easier to email to friends without getting munged, and also drive up your page rank, or PR.

Anyway, the path you have is called "routing". So, for instance, the route for your site from the first link (above) would be:


...and what is key is that this need not be an actual physical path to the file.

So, if that file doesn't really exist, how do we map those routes to real program tasks? Well, the trick on various web server platforms is to do URL rewrites. I'm only familiar with Apache, so in that we use an .htaccess file in the directory of the website and then you'll need to read up on something called RewriteCond and RewriteRule. Using those, you can direct all unrecognized URL requests to one single file such as index.php. Here's an example:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [QSA]

From there, you can then use something like:

// PHP example in your index.php file
$sRoute = trim(urldecode(preg_replace('@\?.*$@s','',$_SERVER['REQUEST_URI'],1)));

...to determine what was typed.

Okay, so what you get with this in whole is the realization that by your own evolution in development, you're repeating the MVC framework, even when you think, "I heard about these MVC things and I think they stink!" This stands for Model, View, and Controller. When you were splitting out the XHTML, you were doing one step towards a "View". When you were doing your page routing, you were doing a "Controller". And the levels of abstraction from your database calls were parts of a "Model".

Typical MVC
So, your typical MVC framework includes a front controller and subsequent page controllers. What this means is that you first go to index.php, or front.php, or whatever your web server has been told to direct unknown requests to, then you are calling a front controller. The front controller receives the request, parses it, and then routes it back out to page controllers for the given route. Usually a single page controller will handle a single route.

Next, your page controller's job is to handle I/O (request and response), but the response is pushed through an object library that handles the "View" (where you call up a page template, stuff it with variables, and then display it or email it or send it to some other web server over a web service). When starting out, a lot of developers make their page controllers fairly fat, making it do work that should have been put into the models. A model is going to be a class that abstracts things like Account, User, Job, Task, Plan. The model then calls your helper classes like your DB, your ORM, and so on, to do the database interaction.

I think it's okay to have fat page controllers starting out when you have a time crunch. But it's good practice to have subsequent phases where you do a process called "refactoring". This is where you move stuff (that deals with repeatable logic and doesn't involve reading in fields or writing out data) out of the page controller and into the models. To this end, you use something called a "design pattern". You already used a design pattern when you used an ORM and a database layer, but then when you introduced MVC, you used another design pattern. But when you start thinning your page controllers and fattening your models, and making models that depend on other models -- that's where you need to curl up with a good book on "design patterns" to think about the best approaches to this.

Now, your typical MVC framework will come with libraries to help you do your controllers, models, and views easier. A minimalist one will do simply that and then stop. But a lot of MVC frameworks either start minimalist and grow, or are big things already. And what these other kinds of MVC frameworks are doing are adding in the kitchen sink. You'll see them adding in various DB abstraction classes, an ORM, a cookie class, classes for web services, PDF generation, XML parsing, AJAX handling, JSON handling, YAML handling, and so on.

I don't actually prefer using the fatter MVC frameworks because they are interesting, but I always end up missing something, or don't like the way the framework implemented it, or find the interface to using it in the MVC a complete pain.

So, for me, I liked creating a minimalist MVC framework on my own and then pulling bits and pieces from the libraries and utilities of other MVC frameworks that suited me, and adapting that.

Bad Rap
I think a lot of MVC frameworks may get a bad rap. You may find like 10% or 20% of the developers out there avoiding an MVC framework. But if you analyzed their code and asked these same developers what they would do to make their projects even better, or come visit them a couple years later, you'll find them doing the DB class, the ORM, the routing and pretty URLs, and the page templates. Wow. They're already on their way to MVC even when they thought that they would avoid it.

One of the big turnoffs, you see, are that MVC frameworks have learning curves. No one wants to slow down to learn that. I for one, sure didn't want to do that -- I just didn't have the time. But there are easier, more minimalist MVC frameworks out there, and they can help you get your feet wet with a shorter learning curve. And no one is stopping you from going through F/OSS-based MVC frameworks, pilfering through their class libraries, and pulling out pieces you like and including them in your projects in your own style. And, no one is stopping you from building your own minimalist or fat MVC framework using your own coding style.

One More Advantage
I've already explained many advantages to using an MVC, but my largest one is simply the subdirectory organization. Now you won't have 100 files in a directory, or a bunch of files named the same, if you used your MVC properly. This makes it easier to handle in your project editor (aka IDE).

One Big Disadvantage
One big disadvantage with MVC, which really applies more to OOP than it does MVC, is that you end up with a complaint that Linus Torvalds had, which was explained here:


(BTW, it's funny how the URL says C sucks, when the article was more about C++. But they had to do that because + means a "space" in a URL.)

So, the complaint is a steep learning curve to use a crappy object library with bugs that don't get fixed that well and then giving up on it, swapping it out with another object library, and having to refactor your code. That's the scenario one can have with too much OOP, or when you rely on popular, albeit buggy or less frequently patched, components.

Therefore, when doing OOP refactoring of your projects, or including other third-party tools, you need to be wise about the impact that Linus complains of here. Try to prevent some of these problems as much as possible. Keep it simple, my friend, but yet simple enough to solve the problem and be adaptable in the future -- a tough problem to solve sometimes.

So there you have it. MVC in a nutshell. Using it can keep you more organized, encapsulate an evolution you may already have been doing in your programming style, speed up your project delivery as well as (sometimes) improving your site performance, and get you on the path to using design patterns so that you can refactor your code so that it's more intuitive for new developers joining your projects.

January 3rd, 2009, 08:54 PM
Great advice...

In 2009, start the year by reviewing what the most well-known bloggers in your favorite programming language are saying about 2008 in perspective, and what they predict or want to see in 2009. It really can make a difference with your freelance business. Podcasts are also great.

You see, I think a lot of people never read these 2008 year-end things, and these bloggers seem to put a good amount of work into them, perhaps because they are bored at some Christmas with the relatives and they plop down with a laptop to blog. But in 2009, you won't often see people going back to find those year-end 2008 blog items and reading them, and they would be missing some key points that could give them an early lead in their business in 2009.

For instance, here's a useful link at least for PHP freelancers:


January 8th, 2009, 03:44 AM
OMG I cannot +1 enough to what Mike says about jQuery. 5 lines of jQuery totally saved my day in a phpbb site. They broke the "opens links in new windows" and after 4 or 5 hours googling and mucking about in the php, I couldn't get it sorted (the <a href is built in a number of places). 15 minutes later, I was debugging my jQuery solution, which was to add the target="_blank" attribute to all a tags with http: in them...

Btw, the *clears_throat* industry is pretty seedy, but my colleague came from that world and what I've gathered from his stories is that you need to get paid upfront and be prepared for anything "unstable", like the boss ODing or disappearing for a while to hide assetts. They seem to leave us geeks alone and are more about the secks, drugs, and rock&roll. His big complaint was having to always be moving the site from one ISP to another and always having 3 or 4 more hosting gigs lined up.

Me? I did university to get a degree then a couple years of embedded c/c++ and now run my own e-commerce gig. Sometimes, freedom from The Man isn't worth the poverty...


January 8th, 2009, 09:38 AM
Earlier Advice Revisited

I decided to look over this entire thread and counter (or restrengthen) earlier opinions I had.

- I'm Not Rich. For those of you who think I'm rich, I'm not. Growing a family, taking big risks and failing, I immersed myself in a good bit of debt. However, as a freelancer, I make a good income at least most of the time, although I can admit it is a rocky road. It's just that when I bring in the big bucks, they are sucked right out the door to pay the bills. Financially I am better now than I have ever been, and because I've been a freelancer, my wife and I have actually started to think seriously about this debt issue for about two years now, trying to tackle it with the Snowball debt program. I don't want to be rich -- I just want to have things down to one house payment and one SUV payment, and then I'll feel "rich". But there's another richness -- I have far more time here with my family than I ever did. And when I was working in a cubicle day job, under all that stress, that hour long commute, that traffic -- my health was declining pretty fast. Now, however, I have recovered 100% from the gout that I had, oddly enough. And -- don't laugh -- the eye twitch I had from the stress has gone away now for one full year.

- Passive Income Means Survival. I cannot stress enough -- before you get into this business on your own, get your passive income sources going on their own so that you can make at least 4 mortgage payments on that income a year. So, keep the day job, take a little bit of your dough each month, and outsource some projects for people to sign up and purchase stuff like T-Shirts, or click on advertising, or fill out surveys, or any kind of other digital subscription income you can think up. Or, if you don't outsource them completely, code some of the work yourself.

- Flash Is Less Important Now. We now have jQuery (or other Javascript abstraction library) and AJAX in the mainstream here in 2009, and dazzling effects with those are like 2 and 3 lines of code. It's also only a short matter of time before Canvas and SVG become possible in all the browsers, as well as Ogg for sound and video.

- Project Estimation Is Hard. You will learn logarithmically as a freelancer. Returning to older projects will frustrate you because you'll want to rewrite them in new frameworks and better designs. And burnout will occur sometimes when you have a low budget month and need to recover the debt burden you put yourself in. So, keep a work log to help you judge your time, get better at reviewing functional specs (or helping your clients write one), and at best it's just black magic to figure out how many hours something will take.

- Magento. I may have mentioned in the past some positive things about Magento product catalog. Well, I'm not a fan of it anymore. It's slow when you load in a lot of data. It's hard to extend. It uses Zend Framework, which I grew to dislike versus other MVC frameworks that run faster and are lighter weight. I probably shouldn't have mentioned any products at all in this thread because the market keeps changing. The one thing I did like about Magento, however, was its intuitive and modern interface, not just from an admin perspective, but from and end user usage. Kudos to the page designer.

- Got ADD or ADHD? I didn't know I had this. But when I focused solely on an Internet-based job, and working from home without a manager but myself, I started to realize, gosh, I have a problem with distraction. Researching this on the web, I found it was called ADD. When I saw the symptoms, I realized I had 90% of those symptoms. Wow. Time to start dealing with this fact. Part of dealing with it is to just express yourself, iron out your thoughts, do it as rapidly as possible, and move on. So, this thread was a part of that. Anyway, if you have ADD or ADHD, being a web developer or a web-based job may be rough for you because a web job compounds this issue. And if you don't know you have ADD or ADHD, you may learn this about yourself when you decide to become a freelancer. And if you are plugged into the web every day like I am, you may simply find yourself having ADD tendencies even if you don't have clinical ADD.

- IE6 Is Almost Dead. With this latest round of exploits for IE going on in the wild, and with M$ telling people they won't patch the older browsers, it's only a matter of a few months, not years, before IE6 is dead. I predict Q4 2009 that IE6 will be dead. You'll see the stats drop off dramatically -- mark my word. I'll revisit this in Q4 2009 to see how right I am. But anyway, the good news is that if we can kill off IE6, then the web will be so much more of a better place. I cannot tell you how much stuff I have to make special just for IE6. (I don't focus on IE5 or IE4.) I only have to do small tweaks for Safari and Opera and IE7. About 90% of my tweaks are for IE6. Sure, jQuery can help, but it's not perfect on that IE6. And most of my problems with IE6 are not Javascript-related (now that I have jQuery). Instead, they are CSS related. The CSS engine in IE6 sucks. And when IE6 truly goes dead on browser stats -- it will literally be a day of rejoicing in the streets.

- Paypal Got Better! In 2008, something miraculous happened. PayPal got the message -- their products needed to be improved. They had this enormous developer survey and they upgraded their service, their documentation, and their tech support. They made their systems more stable. So, I gave them another chance, and I was surprised how much easier and better it was for me to work with that system. Now, are they perfect? No. But the competition seems worse. Google Checkout is coming up close, but as of 2009 they still don't have Canadian merchant support in Google Checkout, which is a huge, obvious market for Google.

- Blueprint CSS. I'm no longer a fan of this. It's great if you want to storyboard some demos with a client, but in the end it's better to learn how to get a good reset.css and learn the ins and outs with the various browsers (and get a good test bed going with multiple browsers). It will make tighter CSS. I'm glad IE6 and IE7 have conditional comments, and that there are simple hooks you can do in your CSS to catch Opera and Safari and do an @import of more CSS based on that.

- Why Blog? I see a lot of developers blogging out there, and non-anonymously. I don't get it. First off, blogging on development stuff won't get you that many gigs. Second, you may annoy someone by something you say as you iron someting out, turning off a client. Me? I prefer being anonymous and doing a forum post, not linked to my business. And if you haven't noticed, there are lot of blogs out there with like zero comments.

- Retainer Clients. I avoid getting these now. Clients will be paying you just a trickle of cash, and they'll suck up 50% of your time, let's say. They'll argue with you on whether that 50% is well-spent or not. And with the problem that web development timeline predictions are so hard to figure out, it's hard to back up your points to these clients.

- jQuery. OMG -- can't stress this enough. Best 55K you ever downloaded. Ever! And also check out jQuery UI and ThemeRoller.

- Avoid The Adult Industry. I've now been approached by like 10 people now to join them on various adult industry projects. Sorry guys -- I refuse 100%. I mean, I guess I could think of it medically and financially, lock the doors while I work so that my kids don't see this mess, and just rake in the cash. And as a PHP/MySQL/PostgreSQL/jQuery guy -- it's oddly a skill in demand in this industry. But the problem is simple. It's called extortion. Read enough crime novels about extortion and you'll easily see that working in the adult industry is a house of cards. And think about it. If you were in the mob, what industry would be you be involved with? So, your client that hires you here might not be related to that, but what about his boss, or his boss's boss, or his client? Too hard to tell. Easy to cross the wrong tripwire. Well, not me! And I can just see the hilariously frightening scenario where I'm awoken with a pre-dawn 4am raid by a SWAT team, flashlights, guns, and shouting, because the client decided to claim they had nothing to do with the website and that it was all me. Oh great!

(Sidebar on this -- I helped a young kid disconnect from an adult industry gig that he was doing, helped him see the light on the whole extortion thing for the rest of his life, and who knows -- I might have saved the kid's life and his career too, if not his soul. He'll at least not go bald. Haha.)

- The "I Don't Do Javascript" Crowd. Yeah, I was there once. But 2008 was a crest of that. jQuery came on the scene, evening out Javascript on all the platforms and doing its darndest on IE6, and everything before IE6 has now about dropped off the planet in the browser stats. And since jQuery is only a 55K download (as of Q1 2009), now more than ever is the time to embrace Javascript. And why? Less page repaints, that's why. It becomes important on admin pages for your sites, primarily, and especially on shared hosting plans. This is because admins are your clients, and they are usually impatient, and don't have time to do a bunch of admin chores that require full screen repaints, especially on slower, shared hosting plans. But there are other reasons. Universally, all of my clients in 2008 wanted me to do tasks with Javascript in addition to my work. Not a single one said, "I don't want any Javascript on this site." And think about the advantages you get with inline modal and modeless dialogs, inline field validation using AJAX and Javascript, and fancy effects. Last, your competition will be doing it while you avoid it. So, in 2009, this is the year to give up and start putting Javascript and AJAX into your site because it just makes sense. And you'll find far less bugs using it across platforms if you use a Javascript abstraction library like jQuery.

- My Money is on PostgreSQL Over MySQL. I predict in 2009 or 2010 that people will become really annoyed with Sun as they take more of the freebies out of MySQL and push them in as pay-only items. Besides, I could give you countless links where MySQL is really oddball and PostgreSQL is sensational. PM me and I'll share. And on smaller projects, also consider SQLite because it might fit the bill.

- Ignore The $4/hr Freelance Requests. I see people saying, "I don't want to freelance because I see $4/hr (us dollar prices) for projects and they want me to make a custom, streaming video site!" Well, think about it. If I was a bad guy, and I wanted to discourage you from getting into this business so that more of the work is here for me, don't you think I would be putting out these fake ads? I think perhaps 20% of the stuff you see out there is like that. The other ads are from morons like HR recruiters completely disconnected from the project, they see they have a need and a ridiculous budget, so they go fishing, hoping to find someone willing to take the bait. And last, there are literally people starving in parts of this world and who know how to make a web page, and they would be quite happy to take that $4/hr to sort of fake it and make a lousy website for you, kind of half-interpreting what you need and piecemealing together a bunch of different products to save themselves time. It will probably look like Franken-site, but it might hit like 50% of one's goals. And with that $4/hr, they might be able to keep warm at night for a couple weeks on a bag of coal, or feed themselves for a month. So, among all this -- hogwash -- just blow it off and take the other gigs. There are good ones out there. But, saying this, I want to remind you of the Ubuntu aspect of this -- always donate to F/OSS products that help you, and do consider environmental and poverty assistance that you can do with your donations, if not your presence. But Ubuntu can also mean paying off your own debts and getting food on your own table, just as well.

- Shared Hosting Will Go Virtual In The Background. I reason to bet that a lot of shared hosting plans out there are now converting over to Virtual Machines, but they're not telling you. This is not good because it could potentially mean an even slower site as web hosting providers will stuff even more clients on to the same server. So, if you see your site slowing down, and you're on a shared hosting plan -- COMPLAIN and get it fixed. If enough of us do it, we might get the web hosting providers to come clean and be more transparent on their policies, as well as fix the problem.

- VPS Solutions Are Cool. If you want to bridge the gap between shared hosting and dedicated hosting, consider VPS. It gives you the best of both worlds. But I recommend one with a decent amount of burstable RAM, and you -must- have SSH command line root access at least in your own VPS space or it's no better than shared hosting. The only downside is that you never know how many hosts your web hosting provider is stuffing on that VPS. So, you could sign up and pay very little versus dedicated hosting, and have a zippy site at first, but give it a year -- how slow will the site be then when all the other hosts are added in?

January 8th, 2009, 09:58 AM
...phpbb site...

Stop right there. :)

Been there. That thing is dead. Who's fixing it? Who's making it better? I think they are eternally stuck in 2.x mode, and they still haven't converted over all their 1.x themes to 2.x yet. The tech support is also lousy. And phpBB has the strangest theme system out there. And once you theme it, good luck migrating it to another server and keeping the theme intact.

I switched to FluxBB and I'll never go back. The source is easier. It's not MVC, but it's still a pretty decent piece of code. It runs fast, has good XSS blocking and stuff like that, looks professional, has a few good plugins, and is extremely easy to re-theme it with your own CSS or add in your own links, menus, etc.

January 8th, 2009, 10:23 AM
Hahaha, well, I definitely won't argue that phpBB is better than anything else, but it is up to 3.0.4 and they have built in automagical updating. I transitioned from 2.x to 3.0.3 in an hour or less ... from one site to another.

There were a few hours of making the users happy, but it wasn't nearly as painful as when I worked on setting it up. imho, this was so easy -- it's ok if something else has an easier entry, but this transition was really quick. (well, and my linux-foo and cli mysql-foo is a bit stronger now, too)

I guess the one point I would argue is a reiteration of above: stuff changes wicked quick! And for any "thing", there are going to be at least 5 points of view. :)

:) Chris

January 8th, 2009, 10:34 AM
Earlier Advice Revisited
- Got ADD or ADHD? I didn't know I had this. But when I focused solely on an Internet-based job, and working from home without a manager but myself, I started to realize, gosh, I have a problem with distraction. Researching this on the web, I found it was called ADD. When I saw the symptoms, I realized I had 90% of those symptoms. Wow. Time to start dealing with this fact. Part of dealing with it is to just express yourself, iron out your thoughts, do it as rapidly as possible, and move on. So, this thread was a part of that. Anyway, if you have ADD or ADHD, being a web developer or a web-based job may be rough for you because a web job compounds this issue. And if you don't know you have ADD or ADHD, you may learn this about yourself when you decide to become a freelancer. And if you are plugged into the web every day like I am, you may simply find yourself having ADD tendencies even if you don't have clinical ADD.

I've got ADD, and have to agree, doing a job while on the net makes distractions so easy to come by.

January 8th, 2009, 11:23 AM
Didn't know that about phpBB, cacycleworks. I'll have to research that some more. So far, though, FluxBB has been very suitable and very theme-able without much fuss. Don't know about upgrades, though.

January 13th, 2009, 01:27 AM
I'd like to point out this bogus Craigslist listing. Hopefully it will still be there in a few days.


Remember what I said about the potential for bad freelancers, who want to discourage good freelancers, from jumping into this business? This is a classic example of this. I highly doubt that this Craigslist posting is anything short of a scam by a freelancer who wants to discourage other freelancers to jump into the business.

There is no way on Earth that a site like this can be built for less than 30 days, if not 60 or 100 days. Not unless you can cut and paste from a "sitescript" (many are available on the web for low fees) or you have already built a site fairly close to this one in the first place. But even then, look at how bizarre the wording is -- it should have a big red flashing warning sign on this post telling you to walk away from it.

Oh, and word to the wise -- experience has shown me that very few good leads will come into you from Craigslist. In fact, for me, a total of zero good leads at all.

January 13th, 2009, 02:09 AM
What if you're still a teenager in highschool, but that wants to make a few extra bucks and you know all the languages and are still in school. Do you think it would be worthwhile to work on 1 or 2 projects a month and how would I be able to do this?

Oh and I'm still a minor. How would I be able to make some money of of it?

January 14th, 2009, 05:07 AM
Earlier Advice Revisited

- My Money is on PostgreSQL Over MySQL. I predict in 2009 or 2010 that people will become really annoyed with Sun as they take more of the freebies out of MySQL and push them in as pay-only items. Besides, I could give you countless links where MySQL is really oddball and PostgreSQL is sensational. PM me and I'll share. And on smaller projects, also consider SQLite because it might fit the bill.

After evaluating both of them about 10 years ago I ended up using Firebird (Interbase as it was then) It seems to play a bit more agnostically with Windows apps as well as Linux. It is time to revisit.

It does pay to have good knowledge of as many databases as possible (including MSSQL).

I also agree on the ADD thing. It is very easy to get sucked into a black hole. Setting daily targets helps overcome this a bit even if it means a few hours at either end of the day.

I too overcame the Javascript / AJAX hurdle this year. My web apps are clean multi user systems with interfaces I could have only dreamed of 10 years ago.

January 14th, 2009, 09:07 AM
What if you're still a teenager in highschool, but that wants to make a few extra bucks and you know all the languages and are still in school. Do you think it would be worthwhile to work on 1 or 2 projects a month and how would I be able to do this?

Oh and I'm still a minor. How would I be able to make some money of of it?

I've known a teen in highschool who did it. Was making $2,000 USD his first month, and $4,000 USD his second month. I taught him a few tricks like you see here in this thread on how to get started. However, his good luck was for a reason -- the kid was a furious coder and typed extremely fast. I thought I was fast, but man, this kid blew me out of the water. He was an avid reader and knew some things more about PHP and MySQL than even I did. Not in everything, but a few things. I did, however, teach him jQuery and AJAX.

Not that you asked, but I think it's important to tell you something else about this kid. Well, after he did this, he took it to an extreme one month and landed a deal with an adult entertainment guy. It's easy to do -- they are in desperate need of web developers and web designers, and they prowl in the forums. In the past two years, I've been propositioned by at least 10 of them. Anyway, the adult entertainment guy gave him a small jQuery task to make mouseovers animate some GIFs, but was going to pay him a good bit of money and then see where to go from there. Well, as soon as I heard this, I had to talk the kid out of it. I told him to do the task since he already had been paid 50%, but get the heck out as fast as possible and cut off all communication with the guy. I also figured that if he were to not do the task at all, that would probably annoy the guy, deadline wise, and that would get the client angry. So why did I tell him to get out of such a lucrative gig, even if he could do it with one eye open and think about it financially or medically? It's called extortion and it can plague you for life. You can read about it in many crime novels and it's the truth. Been happening for centuries.

So what became of this kid? Well, after making a ton of money doing PHP development for about 8 months, he returned to focusing on his grades to get into an Ivy League college. Not that he needs to even go to college with $4,000 USD coming in each month for not even trying that hard -- but his parents wanted that. He then found he could make a ton of cash doing stuff in Objective-J (or is it C++) or something like that -- but doing it to make iPhone apps. He said it was more fun. To me, it looked more of a hassle on that platform, but that's just me.

As for a minor -- yeah, that was definitely a hassle for the kid. He had to use his dad's LLC for the checks. But one client he had, a guy from Canada, jerked his chain when he found out the kid was 16. He decided he wasn't going to pay the kid, that the kid was a minor, and therefore there was no legal jurisdiction (at least he thought) that the kid could hold over him. So, the kid lost money on that gig and had to walk away. However, like normal 17 year old kids who get annoyed -- he besmirched the client's name secretly all over the web to get even. I told him not to, but he wouldn't listen. It's one thing to get cheated by a client, but then you lose all your legal clout when the client can charge you with libel, defamation, etc.

Anyway, what I need to summarize here is that freelancing is self-employment, and it means running a business seriously, along with all its pitfalls, taxes, legal decisions, sales negotiation, business insurance, bookeeping, etc. Adults, more than young men and women who are minors, seem to take it a little better and more maturely when a client rips them off. They build in protective measures to kind of soften that burden, and to have the know-how and gall to either negotiate their client into proper behavior, or to know where to take this to the next level, legally, or whether to walk away. This is not child's play -- it's serious. And the guys who have a better chance of surviving this have either learned all this from the school of hard knocks, or they've taken some business classes or workshops to know things like minimizing taxes, choosing lawyers and accountants, setting proper contract terms, setting fair prices, keeping accurate records, and so on.

For me, since high school, I've always wanted to start my own business. However, I never experimented with it until I had completed college, learned about paying taxes (or paying tax penalties), had a spouse I could lean on financially when cash was low, and had read 2 books on how to start a business. Even then, when I made my first attempt, it was the school of hard knocks and I got burned a few times. First, my CPA turned out to be a crook -- he gave me advice I did not ask for, and then asked me to pay him $400. Second, the lawyer he referred me to played the same game -- he listened to my business idea to see if he knew of any connections I could make, and he set up those connections, and while I thought all that was for free, I ended up receiving an $800 bill in the mail. This probably was illegal, but I reasoned to bet that the lawyer somehow had more influence on my client-base than me in the area, and that the CPA probably had a good pack of lawyers too, and that, even if they were being illegal in their activity, they could still drain my legal funds to fight them. So, I caved and paid the two bills and then cut off all communication to these jerks. (It just so happened that I also landed a $16,000 contract in my business at the time, and uh, yeah, that helped.)

It took me 3 times at starting a business, failing, going back to work, and then back in my own business again, before I got it right. Still, I'm not perfect at this -- no one ever is. Take any business owner in the world and they will tell you that they ride on the edge in their decisions several times. As a business owner, there is no comfort level for too long. If there is, then you're not pushing your capacity like you should. Try that long enough and your competition will beat you some day. Not that it's good to always live on the edge, but being a freelancer definitely means you need to occasionally get out of that comfort level and take on a bit more challenge and risk occasionally.

January 14th, 2009, 10:51 PM
One of the most important things to consider is code maintenance. You will have to work on code that may have passed thru numerous programmers. Your code may continue on after you leave the project.

Think about how you'd like to receive this code and pass that along to the next programmer.

Don't use obscure tricks like writing complex one-liners because they are clever. Write simple clear easy to read code so it is easy to follow and fix/change when required.

Don't speak ill of others. This will always come back and bite you.


January 15th, 2009, 07:45 PM
Sounds good to me, Bob.

January 24th, 2009, 09:17 PM
The facts show that Firefox has higher marketshare than Opera or Safari. I think it's better to encourage Firefox to speed up Gecko and try to pass the new W3C ACID tests, than to bet on horses that can't hit the finish mark because they don't have marketshare.

Given that 'logic' one should have simply stuck with IE and coded for it since it has such a commanding lead in 'market share'.

January 26th, 2009, 05:32 AM
If you want to know what it's like being a freelancer, you have to realize also what it's like when you have a mortgage bill coming up, you've drained down your cash reserve while working on an under-budgeted timeline, your client is holding back funds until you complete the last phase of the project, you don't have time to pick up another client just yet, the credit card companies canceled your account, and you've gotten yourself so sick from psychosomatic issues over the deadline that you now have bronchitis.

I have a fantastic visual representation of this...


Basically, it's sort of like that -- whatever it takes to make it work.

Oh, and by the way, that's the condition I'm in right now. Wish me luck. The prize, however, is that I get annual joint equity on this current project + a final $3K cash installment for the project. So, if it doesn't kill me first, and I make it across the finish line, the benefits will hopefully be great if the passive income project is a success. And then I can return in February to active income again.

January 26th, 2009, 05:43 AM
My $0.02 for the "traps to avoid for the beginner" department:

Never assume that because your software works on your machine(s) it will work on the client(s) machines: there are many opportunities for some subtle difference in hardware and/or configuration to sneak up on you and cause problems. (In other words, do your homework!)

January 26th, 2009, 06:38 AM
Never assume that because your software works on your machine(s) it will work on the client(s) machines: there are many opportunities for some subtle difference in hardware and/or configuration to sneak up on you and cause problems.

That's a good point. Things I've run up against:

- You're running PHP 5.2.3, but the web hosting provider insists on staying at 5.1.4. Things like some of the Filter API in PHP won't be there like you may assume.

- You programmed your site for normal Apache2, but the client is either running Apache 1.3 on his server or it's in CGI mode! If you were relying on PHP $_SERVER vars to be normal -- you can hang that up in either case because there are subtle differences.

- Something that is a prickly sticking point is the Apache .htaccess file. Some features may work, while others may not, on your client's web host.

- Your client's web hosting provider thinks it's perfectly okay to take down the PostgreSQL server for 1 hour every morning, and that's when you run your cron jobs to remove old records or something. All of a sudden you find this out like 3 months later when the database filled up to the brim with stale records and the searches on the website have slowed to a crawl.

- Your client's web hosting provider does not permit PHP short tags, but your code uses them all the time, and the provider won't budge to make them work with your ini_set() statement.

- And sometimes there are things you can only troubleshoot fast when you have SSH access, but all the client has is FTP!

February 1st, 2009, 11:33 PM
MVC, Fat Page Controllers, Thin Models
I've mentioned it previously, but if you ever build a pretty decently-sized website, even a job search site that you've streamlined to be as simply-designed as possible, an MVC framework will really make your days go smoother. And for those of you saying, "I don't need an MVC framework," you probably are already doing bits and pieces of it in your code -- you just don't know it.

MVC stands for Model, View, Controller. It's a lot more simple than it sounds. It's an abstraction mechanism to make your code cleaner.

Controller is where the data input and routing happens with the user. For the data input, that's obvious -- the person clicked on something or entered something in a form. For routing, it is loading up a particular piece of code for the user or redirecting to that page. And usually MVC frameworks now let you have "handsome URLs" -- where, instead of specifying a PHP (or whatever language you use) page and its path, you specify something meaningful and short, and something that will get you a higher page rank in Google, perhaps. Some examples:




Next we have View, which is where, for instance, you might be using a templating engine like XSL, XSLT, Smarty, and so on. Some people, like me, prefer using plain old PHP to make your templates. So, anything to do with HTML -- most of this will go into your logic called the "View".

And everything else, then, is "Model". This is where you take the handoff of data and routing from the Controller, run it through a series of object code, and then pass it to your View to get it drawn onto the page.

Now usually with MVC the logic starts with a piece of code that sets up the web server to set certain default parameters, load up any default that you might want loaded on each page, and to take any kind of URL that comes in and fire it at one special thing called a "front controller" (often called index.php in the PHP world). The front controller is the central routing system, which parses the URL and then figures out where the programmer has decided to route the user from there. The front controller talks to "page controllers", which might look like a more traditional program to you, but with a catch, which I'll explain next.

The page controllers are the glue where you take the data input, some of which may have come in via the URL path, some of which might be retrieved from a form GET or POST, and some of which might come in via cookie or previously set session variable. The job of the page controller is to take that input data, call functions called "helpers" to filter it, feed it to the Model Logic, receive the output from that, and then feed it to the View Logic to get a result displayed back to the end user.

In the Model Logic, you usually try to keep this fairly pure of HTML but sometimes I've found that you have to make an exception here or there.

Well, in a rush, it is soooooo easy -- cannot emphasize that more -- to make very fat page controllers doing all the work and no model logic or very little of it -- thin models. I guess you have to do what you have to do and cut and paste seems to work fast -- up to a point.

And that's the point of frustration that I'm in now with a project, and why what's called the Gang of Four Design Patterns makes a whole lot of sense. You see, now that I have made a bunch of fat page controllers, with cut and paste everywhere, it's hard for me to take directions from the project manager and switch things around without having to redo it one place, cut and paste it everywhere again, and hope and pray I get enough testing in place that it doesn't just bug out when we deploy the thing.

So, one of the first steps they recommend when doing projects is to force yourself to do this integrally. You start by thinking of the largest generalizations of what you are trying to do, and in terms that often might make sense to an end user if you were to describe the program to them. So, in a job search site, you might have Candidates, Employers, Jobs, Subscriptions (so that you can get paid by employers to post their jobs), Job Applications, Registrations, and Interview Invitations. These are called your Domain Objects in object parlance.

From there, you realize that you just can't have fat domain objects that do everything under the sun. For instance, the code for Candidates and Employers might often be similar, such as the registration process for signing them up might be similar. As well, domain objects might take on a kind parent and child hierarchy. So, this is where concepts like subclassing and polymorphism can help. That way, you can create functions that are common in a parent class, and then make the Candidate and Employer classes inherit from this parent class and have further customizations or overrides of those functions.

Next, you start to make child objects of the Domain Objects so that you don't have a seriously fat object doing all the work, which is often hard to extend.

Now, these objects will often have public and private properties, and public and private class methods. These class methods will usually be getters and setters of values on those properties or for doing some kind of computation. Sometimes instead of getters and setters, you tell the object to "do" something (usually against a backend system like a database). So, you might see class methods like .GetEmployerInterviews() (or .getEmployerInterviews() if you like that method naming convention better), .SetInterviewState(), or .DoArchiveStaleData().

As well, there is the database stuff going on with this. Often you will see abstraction with this where you take the SQL and put it into one file rather than spraying it throughout the project, or introduce a database class so that you can swap out database API and the database class and all your program logic hums along without missing a beat, or perhaps you might introduce an ORM (Object Relational Model) because you are tired of typing SQL statements all the time and want to have an easy way to build some of your more common queries. For me, I ended up with a DB class and an ORM. However, sometimes you find it faster and better to get right to the point with a plain old complex SQL statement. I used to keep these in a central file, but now that I have domain objects, if I need to use a complex SQL statement, I keep it right inside the object. However, I use these sparingly and only where it makes sense because of a deficiency in my ORM or DB class, for instance. In a perfect world, I might be subclassing my DB and ORM libraries and enhancing them so that I don't have to use any SQL at all because these libraries handle the complex problem for me, such as perhaps a table intersection, union, or other complex query.

Another great thing about getting things into MVC and then eventually fleshing out your models is that it's easier to do tests. I mean, since your models will not be doing anything with your web server because that's the Controller's job, and since the models will not be drawing page output because that's the View's job, you are dealing with the input and output of data as strings, arrays, numbers, variants, a record, a recordset, an object, or a collection of objects. So, it's a lot easier to build a "test harness" so that you can do small unit tests against a portion of code. And in a book such as Martin Fowler's "Refactoring", he tells you that testing should be integral with your work on the models.

So, anyway, the point is that I'm sort of hurting right now -- in deadline crunch mode, and here I have fat page controllers and only a couple domain models, and the project manager is starting to see this thing flesh out and so he's in this mode of, "Hey, I didn't realize this, but I think we need to add this functionality X over on part A..." and so on. (Moan.) If only I had gotten serious about Models in MVC a whole lot sooner.

Oh well, you live and you learn.

February 2nd, 2009, 07:14 AM
As well, there is the database stuff going on with this. Often you will see abstraction with this where you take the SQL and put it into one file rather than spraying it throughout the project, or introduce a database class so that you can swap out database API and the database class and all your program logic hums along without missing a beat, or perhaps you might introduce an ORM (Object Relational Model) because you are tired of typing SQL statements all the time and want to have an easy way to build some of your more common queries. For me, I ended up with a DB class and an ORM. However, sometimes you find it faster and better to get right to the point with a plain old complex SQL statement. I used to keep these in a central file, but now that I have domain objects, if I need to use a complex SQL statement, I keep it right inside the object. However, I use these sparingly and only where it makes sense because of a deficiency in my ORM or DB class, for instance. In a perfect world, I might be subclassing my DB and ORM libraries and enhancing them so that I don't have to use any SQL at all because these libraries handle the complex problem for me, such as perhaps a table intersection, union, or other complex query.

This is where you have to apply a little psychology with the client.
Sometimes information bears a 1:1 relationship with a table structure, sometimes it is 1:many join based and sometimes it is based on the result of a completely different set of calculations;e.g. How much do we charge client A for product B between 10am and 12am on Sundays?

Some clients (usually those with a large, stable client base) are good planners and keep their business model as simple as possible. Others have different behaviour for every client.
Redefining objects can be more complex than designing presentation objects to cope with changes in SQL.
For one client who changed her mind on presentation at least 4 times a week all I needed to do was change the SQL and occasionally add another display rule if it was a new result field.
At its best defining a new business process was as simple as copying an old one, renaming it, modifying the SQL and giving it a unique name. Something that could be done in minutes.
The downside to this is that the presentation code can become a very large and difficult to read set of switch statements.
When this happens you audibly thank Bram Moolenaar for Vim.

February 2nd, 2009, 09:59 AM
This is where you have to apply a little psychology with the client.

So what MVC framework do you prefer, and what ORM? Just curious.

I wrote my own MVC framework. Some people prefer CodeIgniter, some Zend Framework, some want something else entirely. For ORM, a lot of people like Propel, OutletORM is a neat one too, but in the end, for now at least, I wrote my own. (I like writing my own code by borrowing bits and pieces from other's code and doing it my way. I'm a control freak, I guess.)

February 2nd, 2009, 10:27 PM
So what MVC framework do you prefer, and what ORM? Just curious.

I am a late arrival at the MVC party.

Learning and setting up a framework is more work than dragging out tried and tested code you have been using for a few years and modifying it.

I generally end up with the shape of an application being defined by the database schema and the user interface.

Framework based apps tend to be framework shaped. Maybe that is better but I think better the other way, at least at the moment I do.

However I spent a couple of days evaluating some of the alternatives and I will probably use CodeIgniter for a while. I am not really convinced that the universality of these frameworks doesn't get in the way of efficiency but I will bite the bullet and try it on a project I have at the moment.

I don't use an ORM.
When I first needed a database I had clients that either used MS Access, Fox Pro or VB systems that were using either Access or FoxPro/ Dbase data storage.
In the spirit of evolution not revolution I first tried MySQL and Postgres and found problems such as poor odbc support,no stored procedures and obscure licencing.
Borland released Interbase as free and open source at the same time and it had good odbc support, a very good procedure language, low overhead and runs on Windows and Linux servers. Now known as Firebird I still believe it is superior in many ways to both MySQL and Postgres and inferior in many others.
However it isn't supported by any of the popular ORMs.

I am very comfortable with SQL and tend to build SQL statements in code. I don't know that an ORM would support such things without modification.

February 3rd, 2009, 01:23 AM
Framework based apps tend to be framework shaped.

I used to think this too until about 2 months ago. I was a stalwart against MVC and held off. It started with a very bad experience I had where some idiot senior developers on a project were reading the Gang of Four design pattern stuff, and they spent way too long in there with meetings, never getting any work done. That's not what MVC and these Design Patterns were for. It's a tradeoff where you need to keep working on the project timeline, but also do need to take the time to make your code extensible and not so much cut and paste.

I then realized:

(a) Cut and paste only gets you so far. There's nothing more annoying than finding a bug 4 months down the line that's pretty major, and then having like 15 places in the app where you have to grep out and implement the change, but then you have different variables and a few different if/then conditions, and so you end up having an ineffective cut and paste that could introduce new bugs. This is where domain objects and subclassing can help.

(b) You don't have to go with a big, luggy framework or have a huge learning curve. You can make a super-easy, minimalist MVC framework in a weekend, and take advantage of what it has to offer. You can even get the source for these big MVC frameworks, pilfer through and pull out items you like, and reuse those in your own work (as long as you follow the licensing agreement).

(c) You probably are already doing MVC-like stuff if you:

- Separate your page templates from your programming logic so that you don't have "spaghetti code".

- Have set up a mechanism of handsome URLs so that they do not necessarily have to correlate with an actual file path. (Instead, everything routes to index.php and then is parsed there.)

- Have started to create domain objects for generalities of your program, with subclassed objects off of that.

- Have created a DB class that you can swap out with another similar DB class, depending on whether you use MySQL, PostgreSQL, or SQLite or other database.

- Have created a class that lets you compose SQL statements very quickly without typing actual SQL.

In my case, it was all of the above, so I said, "Hey, wait a minute," and started to study MVC. Now I'm glad I did.

Within a weekend, I created 3 helper classes: Model, View, and Controller. View sort of acts like Smarty, but uses PHP templates and PHP Alternative Syntax. Controller reads in the URL, reads in the base URL, and actual physical path of the base URL off the server, stores these in private variables, and then handles all my page controller dispatch and my page redirection. Model is very simplistic at this point for me -- it just has one method, Load, which lets me load my domain objects and sub objects without having to specify full paths and so on.

I then created 3 subdirectories: models, controllers, and views. Models is obvious and it also holds all my helper classes, my ORM, my DB class, and all my domain objects and sub objects. Controllers holds my page controllers. Views holds all my Javascript, CSS, images, and page templates.

For a front controller, I hooked my .htaccess file in Apache2 and made it throw everything it couldn't find as far as a physical path into an index.php file. I then have a switch/case statement in the index.php to determine what came in the URL and then route code to the page controllers to handle that URL's given functionality.

The page controllers call the models in an ideal world, but right now my projects has fat page controllers and thin models. I'll change that in the near future. I then gather the output of that data and fire it at the View class, which then draws it on the screen through a PHP template and some constant variables.

As for an ORM, I recommend you consider Outlet ORM:


It's only 49K, last I checked. It's super easy to use. And if you don't use it, then look at its interface and consider copying it for your own stuff.

The only thing I fault Outlet for is its bizarre configuration files. (Still, Propel ORM's config files are even stranger.) To me, you can write some quick and dirty programs that interrogate your database schema and create config files for you so that the ORM works.

But you should also see Outlet's roadmap. They still have a ways to go:


In particular, these are pretty critical and need to be added to Outlet:

- One-to-many, many-to-one relationships
- PHP 5.2 DateTime support
- PostgreSQL support

February 3rd, 2009, 10:04 PM
I have just read through the Outlet documentation.

I wonder how big a project would have to be before you recoup the time spent on setting the thing up.
There is a minor reduction in code for each SQL operation but there are some issues there (e.g. transactions) that look to be missing.
Put me down as unconvinced on that one.

February 4th, 2009, 08:44 AM
I have just read through the Outlet documentation.

I wonder how big a project would have to be before you recoup the time spent on setting the thing up.
There is a minor reduction in code for each SQL operation but there are some issues there (e.g. transactions) that look to be missing.
Put me down as unconvinced on that one.

I felt the same thing, but then I realized that what the goal of the ORM should be is to handle the tedious one-record selects, updates, inserts, and removes one has to do, and make it such that you can do it in less typing. I think Outlet is the guy's custom tool he uses on projects, so it's grown a bit beyond that simplicity unfortunately.

IMHO, an ORM should not be about handling multi-table stuff and transactions and complex things like that. It should be about saving me typing and thought time to get something accomplished.

Still, there were parts that inspired me about Outlet, so I made my own mini-ORM by some of that inspiration. And now when I need to do one-record type stuff, I use my ORM. When I need to do more complex stuff, I go around the ORM and pass straight parameterized SQL straight to my DB class (again -- I can swap my DB class whether I'm working with SQLite, MySQL, or PostgreSQL).

And in my ORM that I wrote, I have a function that converts SQL database style naming convention to my object property style naming convention. Thus, I translate stuff like:

Database --> Object Property
fk_user_id --> FKUserID
id --> ID
parent_id --> ParentID
fullname --> FullName
firstname --> FirstName
lastname --> LastName
systemname --> Systemname
system_name --> SystemName

And then another function to switch things back again. It saves me from having to type it in brackets like:


Now I can have like an object like $o and so it would look like:

$o = new ORM('empty');
$o->FKUserID = $DB->GenerateKey();
$o->Unquote('FKUserID'); // tells me to not wrap item in quotes
$o->FullName = 'Super Mike';
$o->Save('users','FKUserID=' . $o->FKUserID); // the second param helps me decide update or insert

In this example, it saves me from having to build the parameterized SQL for insert or update depending on if that record already exists. As well, it handles doing the SQL injection blocking. And last, it just looks cleaner.

And lately, I've seen some ORM stuff where each method call returns self, so you can daisy-chain things, and I'm considering that integration so that it reduces me having to do ";$o->" over and over again.

So, I spent a little time building this, and it has paid off in being a timesaver for the several one-record CRUD type stuff I do. For anything more complex, again, I go around the ORM class with parameterized SQL sent straight to the DB class.

February 7th, 2009, 08:16 AM
Suggestion - Admin CRUD Generators
Something I've finally been backed into a corner to realize is that admin parts of custom sites are grossly underestimated in their required time for delivery. Clients want the world stuffed into them for management of their new custom site, and most of them don't have the budget for what that would actually take. So, besides negotiating with your client on a reality check, the only way out is automation, and here's what I suggest because I'm literally doing this right now on a major site, and will then reuse this functionality with other custom sites that I build.

You see, what you need is an Admin CRUD Generator. CRUD, as you know, stands for Create, Read, Update, and Delete. Now, of course you can't just run one simple script and *POOF*, you have an entire admin management part of your new custom site. No one size fits all, here. But what you can do is create a framework of menus, forms, paginated search pages with the ability to choose any field in a table and do <>, =, LIKE, NOT LIKE, >, >=, <=, and < type queries against it. And you can create a script that analyzes your database tables, one by one, and creates a limited CRUD editor system against them. What this solves is 60% of the problem, saving you a tremendous amount of time. You then come back and customize the remaining 40%.

For instance, you may have a table storing job applications, and it is linked to employers, candidates, and jobs. So, if you built a script that does the CRUD for you against this table, it gives you a rather limited thing because you end up with forms and search pages that only address the fields in that given table. So, when you get to the links to the other tables, all you have are IDs, and those are meaningless to your client. However, by knocking such an automation script out, you get 60% of this accomplished. You can then go back and customize the remaining 40%, converting a field of foreign key IDs into something meaningful. So, when I go to add a new job application, I can pick employer by name or category and name, and then the same with candidate and job, rather than meaningless IDs.

The way to pull this off is to attack just one table in your database. Write a CRUD management system just for that one table. Yeah, it's stupid because it has text fields where someone is supposed to type in an ID number of a foreign key ID, and that's not anywhere practical. However, what you then do is create another script that cans this all up and lets you run this batch command script against every other table in the database. And you see, from that framework, you can then go in and alter things to your heart's content, giving you the remaining 40%.

And, as time progresses, you can improve this script such that some of the customizations you do in that 40% can, as well, be automated.

February 10th, 2009, 10:21 PM
You'll Probably Lose Weight

Today I got off the scales. I now weigh 189 pounds. Before I started freelancing, my weight had ballooned up to 211 pounds and I wasn't able to fit in the same pant sizes anymore. It's taken me 15 months to get down to this weight.

When you freelance, you have less outside influences to encourage you to eat, and you have a bit more time to ensure the food you eat is of substantial quality. When you work in a cubicle day job, often you are rushing things, and so it's all too easy to choke down that fatty footlong steak sandwich, greasy fries, and 14 sodas and 3 bags of chips, not including the run you did to McDonalds for a breakfast biscuit and the pizza you snarfed down when you got home at night. And because you're in an office, you often can't go out for a run after the meal.

I hated when I was in an office job sitting at my desk working through lunch with a small sandwich from home in order to meet deadline, and then my "cube mate" would walk in with this incredible smelling Thai dinner complete with all the fixings, all for her little fat self to snarf down and make our shared cubicle smell like Thai food all day. And you know the only way to battle that, right? Yeah, get more Thai for yourself and make it stink up even more. When in Rome, right?

So, I'm glad I'm done with all that. And my poodle is now very happy that he has someone to run with in a day.

Now, let's see, what fatty Thai dinner will I reward myself with tonight? Hmm...

February 21st, 2009, 07:24 AM
Neat Chart Tool
I recently discovered a new tool called flot (http://code.google.com/p/flot/) for jQuery (which could also be adapted and used in other Javascript frameworks like MooTools, Prototype, etc.). It basically gives you a line, area, bar, and dot chart for almost any browser since IE6. It's worth checking out.

For pie charts or anything fancier than flot, you could consider just using the Google API (http://code.google.com/apis/chart/), instead. It's fast, easy to use, and makes fantastic advanced charts like pie, 3D, and scatter charts. It also works 100% in all browsers because it delivers a graphic image down to the client, generated on Google's powerful servers. The drawbacks, however, are that it requires an HTTP connection to Google, and requires that you limit your requests to 250,000 hits and under per day.

February 21st, 2009, 08:49 PM
Neat Chart Tool
I recently discovered a new tool called flot (http://code.google.com/p/flot/) for jQuery (which could also be adapted and used in other Javascript frameworks like MooTools, Prototype, etc.). It basically gives you a line, area, bar, and dot chart for almost any browser since IE6. It's worth checking out.

For pie charts or anything fancier than flot, you could consider just using the Google API (http://code.google.com/apis/chart/), instead. It's fast, easy to use, and makes fantastic advanced charts like pie, 3D, and scatter charts. It also works 100% in all browsers because it delivers a graphic image down to the client, generated on Google's powerful servers. The drawbacks, however, are that it requires an HTTP connection to Google, and requires that you limit your requests to 250,000 hits and under per day.

I have used JpGraph for years.
It is easy to produce very attractive output.


February 22nd, 2009, 12:49 AM
I seem to have made out very well this year on taxes in the USA. On advice of my CPA, I kept 100% of all my receipts for all meals, purchases, vacations, bills -- everything. My wife and CPA sorted the materials and were able to cut out huge swaths of my consulting sales revenue down to a very tiny salary, and then I owed nothing on my taxes. In fact, I received a $1000 tax refund. So, actually, tax-wise, I do better now being self-employed (even with the stupid doubletax of self employment), then I did as a W2 employee for some loser corporation. And instead of a corporation getting the tax breaks on me, keeping them for their greedy self, stagnating my salary and promotion opportunities, keeping me in a windowless office (a cubicle), and overworking me to death, I get the tax breaks and all the other perks of working hard for myself. I could almost bang my head against the wall on why I didn't do this sooner. (Now, granted, it's not for everyone. Freelancing is sometimes very tough to navigate and takes determination, self introspection, self improvement, skill, and a good bit of luck.)

So, to the greedy scrooge of a President of the firm I worked for in the years of 2001 to 2007, who bought a yacht and a house on an island resort in the Bahamas, who kept my salary down and all the other salaries down of his fellow employees, and took advantage of his tax breaks, I wish I could tell him -- Hope you don't trip and fall off your yacht or choke on your lobster. Oh, and haha on your 40% depreciated investment account.

February 25th, 2009, 07:40 PM
The Final Stretch
There is nothing more immensely satisfying than looking at the final todo list on a passive income project that's almost complete. I've been working this gig since October 2008 on a very tight budget, and we were planning it since August 2008 (the planning sucked into my programming time on other gigs).

The Admin CRUD generator that I built sped me up by at least 50% in the admin section part of the website.

February 27th, 2009, 09:45 PM
You Already Know How To Refactor
For those of you who don't know, refactoring is a process in object oriented programming, or even functional programming, where you rethink what you're doing, eliminate cut-and-paste redundancy, and create reusable code that is easily understood and quite mallable to be used in different ways. It's important for Agile Programming (http://en.wikipedia.org/wiki/Agile_software_development#Principles_behind_agile _methods) (and I've had an about-face on the word Agile these days). The advantage of refactoring is that you can change something once and the entire application benefits, you can reduce testing and development time, and can add new features with far less impact on previous work.

To help me along these lines, lately I've been reading a book called Refactoring by Martin Fowler. When you pick up a book like that, you really just want to get to the heart of the matter because it's supposed to be a manual and is marketed like a manual. You want to flip to what you need, grasp why you should refactor something a certain way. Unfortunately, however, Fowler really needs a good editor the next time he writes a book like this. He needs some more analogies, more bolding and call outs on the page, and something to liven this up. But what he doesn't need are dull analogies like he has, dull stories about WHY he wrote the book or started refactoring, and dull references to languages are books few people have read or will ever read. Unfortunately, that's what you get with a Fowler book.

But then I realized something. I already know how to do refactoring. I mean, it's common sense. I don't need to give each refactoring concept a term, etc. I just need to think enough about it, think about how others might want to use parts of the system in the future, and start condensing all redundancy where practical.

But anyway, it's a hard book to get through because of its dry, dull writing. I almost have to tape open my eyelids and inject myself with Riddlin on the hour to get through it. Perhaps I'll change my opinion here. But so far, there's nothing new here under the sun.

Now, as for agile programming, in a nutshell it's basically, well, let me not repeat something that is so aptly written here (http://en.wikipedia.org/wiki/Agile_software_development#Principles_behind_agile _methods). From this, I like the idea of getting a website up first in minimalist form, and then growing it organically through customer collaboration after that. And your customer may not need to be the people who pay you. They could be the employees, clients, or partners who will rely on your site, too. A classic example of Agile was the birth of Reddit.com (http://reddit.com), and to watch how it has grown over the past year or two. You can search on the Wayback Machine at archive.org to see how Reddit looked, previously.

Agile is one thing, but eventually you end up with a bandaided mess as you bolt on features with no prior thought. Sorry, but that's okay in the Agile world, and the process expects you to go back and do refactoring so that you remove the bolt-on bandaid, sticks and string stuff and replace it with finely machined parts.

Take for instance a project I was on last year. My client had very little time to explain a very statistical process with a lot of brand new 3-letter lingo he had learned over the past couple years. His existing tracking system was a spaghetti code nightmare, but was built using the start of Agile methods, but unfortunately not the cycle of Agile methods. Thus, spaghetti code. And when he called me in to rewrite it, I asked the people who used the existing system, "What works in this system? What doesn't work? What would you like to change? What works but still frustrates you?" And most of all, I asked, "What are the features you need most and cannot live without?" From there, I was going to do the Agile approach and grow the thing organically. The workers (not the managers) liked this idea and in a meeting we thought up something that we all agreed upon would be very satisfying to use. We were excited about it. Unfortunately, however, the managers were not used to Agile Programming, and some big-shot CTO came in and tore the whole thing down. He wanted, instead, the old Waterfall Model (http://en.wikipedia.org/wiki/Waterfall_model). He wanted me to build all the screens for the final product that we might not see for 5 or 6 years down the line. He wanted me to not just do wireframes, but final screenshots. He even wanted documentation first, before code. And I languished and loathed this process, but pressed on. In the end, he told me I wasn't working hard enough for him even though I was and he had unreasonable expectations, and I loathed how the employees beneath him were just wanting to grow the thing organically, knowing what we knew from the old system in place already. So, the project completely fell flat on its face. In the end, I was cut from the project. (I was the only project planner, designer, and developer on it.) The owners then had consumed a good bit of cash, so they had no choice but to buy and off-the-shelf product to get going. And, I washed my hands of them.

March 10th, 2009, 08:34 PM
Make Testing More Integral
Most of us developers test as we go, but do we test for everything we should be? This has become a concern of mine as I start to enter a final test phase of a site I'm working on. Here we spent 5 months planning and building this thing, and it has a lot of AJAX URLs in it. And we're just now getting around to testing the security in the AJAX URLs. This means I have to hunt down 100 odd AJAX URL calls and ensure I'm doing the security measures I need with these so that we don't have a hacker discover they can cause havoc with our database or expose the identity of our other customers. If I had done this right, I would have tested security and gotten it right in the very first URL I was doing, make that into a model, and all the other URLs would be done in that same means. As well, I would have documented this URL so that I could come back to it at final testing. So, all kinds of testing need to be done in each unit of code before you move on -- it saves time in the long run. You evidently don't save time by delaying it -- it makes it worse and it consumes more time in the long run by delaying it.

March 10th, 2009, 10:23 PM
Commanding A Higher Rate
I've been realizing now that the people who pay me more, and are more patient for quality, are those clients who don't know how to make websites. Have you seen this too? So, to me, it seems like, yeah, it's easier to get clients over the web in ads and meeting in forums, but those clients tend to hustle me more for bottom prices, don't care enough about quality, and are quick to be impatient. Still, it's hard to advertise for clients in the offline mode, such as paper letter campaigns with a follow-up phonecall, meeting them at social events, and so on. So, in all reality, you really need both in addition to your own passive income work. And you need to fill in the small gaps by doing anything, including digital incomes like tiny sites (such as sites that make money on ads by providing a way to make Web 2.0 buttons), eBooks, logos, photos, content writing, affiliate marketing income sites, and things like that.

March 21st, 2009, 03:13 AM
Agile is one thing, but eventually you end up with a bandaided mess as you bolt on features with no prior thought. Sorry, but that's okay in the Agile world, and the process expects you to go back and do refactoring so that you remove the bolt-on bandaid, sticks and string stuff and replace it with finely machined parts.

Take for instance a project I was on last year. My client had very little time to explain a very statistical process with a lot of brand new 3-letter lingo he had learned over the past couple years. His existing tracking system was a spaghetti code nightmare, but was built using the start of Agile methods, but unfortunately not the cycle of Agile methods. Thus, spaghetti code. And when he called me in to rewrite it, I asked the people who used the existing system, "What works in this system? What doesn't work? What would you like to change? What works but still frustrates you?" And most of all, I asked, "What are the features you need most and cannot live without?" From there, I was going to do the Agile approach and grow the thing organically. The workers (not the managers) liked this idea and in a meeting we thought up something that we all agreed upon would be very satisfying to use. We were excited about it. Unfortunately, however, the managers were not used to Agile Programming, and some big-shot CTO came in and tore the whole thing down. He wanted, instead, the old Waterfall Model (http://en.wikipedia.org/wiki/Waterfall_model). He wanted me to build all the screens for the final product that we might not see for 5 or 6 years down the line. He wanted me to not just do wireframes, but final screenshots. He even wanted documentation first, before code. And I languished and loathed this process, but pressed on. In the end, he told me I wasn't working hard enough for him even though I was and he had unreasonable expectations, and I loathed how the employees beneath him were just wanting to grow the thing organically, knowing what we knew from the old system in place already. So, the project completely fell flat on its face. In the end, I was cut from the project. (I was the only project planner, designer, and developer on it.) The owners then had consumed a good bit of cash, so they had no choice but to buy and off-the-shelf product to get going. And, I washed my hands of them.

This happens when small businesses get larger.
They want to throw away things that work for them and play like the big boys.
"Experts" tell them that the way they do things is wrong and they should use "industry best practice".
All of a sudden a year's IT budget is committed to something that "is more scalable and versatile". 6 months later and no deliverables just poorly communicated plans and a BA arrives to "personally take control".
More $250 per hour consultants later to build the parts that weren't in the agreement due to an ignorant belief that "we can do that" was included in the quoted price.
Eventually the business has to change to fit the software and where it doesn't work they end up throwing people at the problem to avoid using the software.

I have seen it twice.
The best example was a large European provider putting in a 14 million dollar system to do the same as the system I had written for $20k.
10 years later the division that still used my system still had better reporting and the others called me to ask if I could do something for them.
10 years, no problems and the most efficient department in the company all for about 1 weeks modifications on a system they already had.

March 28th, 2009, 03:27 AM
This happens when small businesses get larger.

I can see where you are coming from, and if we generalize, then yeah, this sort of thing can happen. It's just that I come at this from a different perspective. Agile programming can really make a difference if applied properly and carefully, and with an eye to watch out for the signs of it going in the direction that you mention.

I come at it from the perspective of my team being just me (as senior dev), my designer/chopper, my other programmer who helps with small stuff, and my system tester. In my case, this isn't really a small business growing up. It's a micro business trying to get faster. I struggle to try and make us work faster and smarter as we go in order to beat the competition. So, when I started to read up on Agile Development (http://en.wikipedia.org/wiki/Agile_software_development) on Wikipedia, and compare it to the way I was operating previously, I did see advantages to it.

And the story you tell about the $20K project that was replaced by a $14M system -- yeah, actually, that's a typical story you hear from most senior developers. Mine was a work order ticketing system I built in 3 years time. I was actually working on it at home, wanting to sell it. But then I brought it into the office, my manager liked it, and we customized it for 4 months until it was superb for the office. The company stuck 1000 people on it and they praised it. But the one drawback was that I had no time for tweaks that management wanted, and management wouldn't grant me time. So, management started doing the matrix evaluation thing of various products, only looking at what management wanted (not involving the stakeholders besides them), and then dictated to everyone that this system I wrote would be scrapped and replaced with an Oracle system costing $100K per year as an online web rental thing. When I started to use it, I complained that it was hard to use. Many people emailed me and said they wished they were on the old system. But management wouldn't budge and they stuck with the slow thing.

March 28th, 2009, 04:20 AM
Random Thoughts

Placing Ads Can Be Embarassing
When you place an ad for work, it seems all the smart-alecs seem to roll in. Sometimes, however, they make a good point or two, but oh does it sting and I end up feeling stupid. So, make certain your portfolio site pages use the more modern RewriteRule stuff for handsome URLs or you could get raked through the coals. I mean, don't make your contact page say "/contact.php", but say "/contact". And make certain your site works in all browsers, and works even if you add the slash on the end, and clear your cache so that you know it works even on a fresh cache after a change was made. Make certain your contact form works by testing it. And of all things, make certain you don't have spelling or grammar errors -- especially when your ad claims you are the best or something like that.

Making Your Ad Stand Out
You know, I'm seeing a lot of Developer for Hire ads looking pretty silly. I'm starting to see lots of stars, asterisks, and uppercase letters in the titles. When you click on the ad, you either get something way too short without explaining what skills you have, or too broad to say you do anything and everything, or a mini-novella, or something that sounds like late-night advertising. I started to realize that you actually stand out from the crowd with your ads if you:

- Keep the title short
- Don't use all uppercase, stars, or asterisks in the title
- Keep it short and sweet in the ad text
- Use bullets and explain what you know how to do
- Don't post your billing rate -- inspire them to show you they are serious, and not a competitor or some jerk, before you do the big reveal on your rate

Don't Use Protx eCommerce -- New Discovery (Dated: Mar 27, 2009)
If you use VSP Form from Protx, guess what? They use Xor encryption instead of AES or Blowfish, no CRC check for tampering, and forgot to insist on running the data through urlencode() but forget the fact that base64 encoding sometimes outputs an equal sign. This occasionally hoses up anyone handling a Protx response via $_GET -- you may have an odd response sometimes. Actually, since PayPal made significant changes in Q4 2008, I've actually had good luck with them, instead, and they are more secure. When I purchase something on the web, 8 times out of 10 I do it through PayPal, so why not use it in my client solutions?

So What's Your Going Rate?
You know, I've stopped reacting in a gullible manner when someone responds to my job ads and the first thing they type, or the only thing they type, is "What's your going rate?" I mean, in one case it could be a competitor. In another case, they could just be a jerk where cost is more important than quality. So, in cases like this, I want to see their proposals first, and do some discussion to establish some trust that this isn't a competitor, nor a jerk, before I decide to reveal my rate.

I found a neat way to do cheapo, super-fast wireframing and yet look a lot better to my clients. First, it doesn't involve pencil and paper, because that would look terrible and doesn't scan very well. What I did was go find a lot of really nice UI elements on the web, including some in the jQuery UI framework, make bitmaps of them, and then run through a filter in Gimp. For filters, I use Enhance, then Cartoon, then Apply Canvas, then increase brightness and reduce contrast slightly, and then Grayscale it. I then pour white paint around it to remove any canvas that surrounds the UI element. In the end, it gives it a kind of pencil-drawn effect, which is exactly what I was looking for.

So now when someone wants me to work with them, we wireframe things very rapidly by taking these bitmaps, stretching and rotating them, sticking them on a page, adding shaded boxes sometimes (to frame elements), add text, and then include with an early rough draft functional spec just as fast as we can. And, of course, preface it and say this is an early mockup and rough draft spec.

And why do it this way? Well, imagine you spend countless hours designing all your screens almost pixel perfect and color perfect, and a very well done functional spec doc, and about 4 days later you've bored the client to death waiting on you and find you are off mark in understanding his needs and have to play the tweak game to get it all pixel perfect. See how that is just wrong?

This is another case where Agile Software Development comes into play. You really need to communicate with your client early, mold something rough into something functional you can put out soon, and continue to follow other Agile principles as long as everyone understands that every new phase of every project must begin with a good bit of refactoring so that you fix the rushed parts of previous designs. Refactoring is painful because it's messy, breaks things that require more tests, and your stakeholders may not grasp the heart of this or realize why it's so important. But it's necessary and it's up to you to show the stakeholders why it is necessary or you'll be left patching spaghetti code the rest of your life and creating delays that try the patience of the stakeholders. Not fun.

Another good case for wireframing is just when you're in the thick of the project, you are short on time, and you ask your designer or your project manager to explain the design they were looking for on some kind of unexplained piece of the functional spec, or some kind of feature creep. They can easily take the wireframe bitmaps and whip something out just enough that you "get it" and can work it in with the existing site theme.

March 31st, 2009, 01:43 AM
Getting Gigs from the Internet Is Not Always Your Surest Bet
Something my business partner has taught me recently is that getting gigs from the Internet is not always your surest bet. I mean, the more lucrative deals we've had are from people who don't understand the business and are not bargain hunters. For instance, my business partner went golfing and hooked up with an optometrist on one of these deals where you wait for a partner to come available to golfing with -- they assign you to someone. They exchanged cards and the optometrist found out he did websites. After the game, the optometrist told him, "Come to my office on Friday, could you? I want to talk to you about a website idea." And so that's how my business partner landed a $15,000 USD website deal, including a 20% check handed to him right there in the office.

A mentor I have also attended one of these Agile Management user groups in his area. I guess it was one of these meetup things or something. The director of the group was a guy who was PMI-certified and was all interested in project management. Well, he tells me that in 2008, the guy gave him so many lucrative web dev gigs that he earned just $30,000 USD in 5 months.

However, not to be snobbish -- there are good clients to be found on the Internet, and there are small gigs that help you fill the gaps between these "big fish" I speak about above.

And another thing that is good to remember is that sometimes people like local businesses. For instance, a lot of companies in a country only want to deal with a web development company from their own country, or perhaps just their own town, province, or county. And that's what happened with the optometrist -- he only wanted to deal with a web development company that was within driving distance to him.

April 26th, 2009, 02:17 AM
Cold Reality

Sometimes in freelancing, during gaps where you don't have work but are trying to get new work, you stay busy on some new "method" you've hatched up to get out of this rut, and you end up staying so busy that you don't realize how fast that cold reality is coming. It's like a guy paddling in a lake to get away from the bear, but it is an exploding volcano that the bear is running away from.

I don't want to water this down -- freelancing can be seriously really tough at times. It can put wear and tear on your lovelife at times. It can make you sell your car, your wedding ring, or your couple electric guitars you cherished. A looming mortgage bill or two can do that to you.

In partnership with another guy, I've been working on a large passive income project that's like killing us in trying to get it built and to build it right. I really advise you all to not do what we're doing. Instead, build your passive income projects smaller, grow them organically, and do 3-5 varieties of ideas at once, instead of throwing all your cash and energy into one huge project hoping to hit gold. And while I've been working on the passive income project, I was not checking the bank account, and so even though I had new work here or there, it was not enough to counter how fast the bank account was dwindling down.

Eventually realize -- hey, this isn't working -- and hopefully not too late. That's when you need to switch into "results mode", every day. This is where you have to stop everything and ensure that the first things you do in 50% of your day are geared not just towards *doing* something instead of worrying about it, but in actually *doing* something with *results*. And if you're not getting results, change your tactics. And above all else -- gear up your portfolio even better than it is because it's a competitive, picky world out there, and then pay for advertisements like a madman.

April 27th, 2009, 08:43 AM
The Freelancer's Daily Goal
I think the freelancer's daily goal, Monday through Friday, should be the $100 revenue goal. This is because it's a fairly reasonable goal and because it gives you just enough income per month to live on if you're a family of 4 (the typical family). And by having that goal, you will occasionally stumble upon small jobs that lead to bigger jobs, and small jobs that pay more than $100. Also, by focusing on the small stuff, there's less risk involved, a larger set of clients for repeat business, and it does not yet stop you from taking on the medium-sized and large-sized stuff. Plus, you can often work in the small stuff while doing the medium- and large-sized stuff.

April 28th, 2009, 03:56 PM
The Fuss About Google Adwords
As a freelancer, you're going to need some advertising -- a lot of it. It's not like when you're a carpenter and by word of mouth the news spreads from one happy customer to another. No, it's far more difficult. Part of the problem is that most of the market is not educated about the difference between a guy who learned PHP5 and the innards of WordPress last year, versus a seasoned developer who's been doing this for 10 years or more and knows far more packages than that, including under the hood as far as customization and various quirks about the packages. So, the really strong guys have to compete with the newbie developers.

There's been some fuss over Google AdWords, saying it costs too much. I'm here to tell you that it doesn't cost that much when you look at what you get. For instance, I've got 6 separate ad campaigns going in every country that recognizes English as a business language and uses it at least 50% or more. I invested $100. In just one day, I've had 8 clicks on my ad to visit my site, and 4,800 people have seen the ad. Besides the $5 activation fee to get started, I have only drained down $1.10 out of that $100 budget. To me, that's pretty darn affordable, don't you think? I'm also right in front of people because Google's ads are everywhere Yahoo isn't. (I plan to move into some Yahoo ads as well in the future because Yahoo has deals with ISPs to handle their mail, which means taking over the end user's default homepage, which means they take over search as well.)

Now, out of this, I'm trying to see how to get what are called conversions. These are visitors who convert into clients. Unfortunately 8 visitors came and left, so I have to figure out why they came and left. One avenue is Google's Website Optimizer, which lets you split-test several versions of your website to see which one might drive in the most traffic, and then whittle that down to 5 of the best versions. From there you can randomly redirect your visitors to those 5 versions and watch the Google Analytics you install. When you find visitors lingering more on a particular version, or find that IP address was the one that converted into a client, bingo -- you know which version of your site gets the most responses.

April 28th, 2009, 04:01 PM
Seth Godin and Other Inspirational Thought
You know, this Seth Godin author is a marketing genius. More than once I've been impressed with his thinking. Here's a nugget that rings true for me recently:

(Scroll down to # 9.)

True, eh?

Anyway, as a freelancer, the freelanceswitch.com site is one I like to visit a lot and has a lot of wisdom. The resources on that site, the podcasts, and heck even the sidebar -- all have great value to me and have increased my bottom line occasionally.

April 29th, 2009, 10:34 PM
The Fuss About Google Adwords

There's been some fuss over Google AdWords, saying it costs too much. I'm here to tell you that it doesn't cost that much when you look at what you get. For instance, I've got 6 separate ad campaigns going in every country that recognizes English as a business language and uses it at least 50% or more. I invested $100. In just one day, I've had 8 clicks on my ad to visit my site, and 4,800 people have seen the ad. Besides the $5 activation fee to get started, I have only drained down $1.10 out of that $100 budget. To me, that's pretty darn affordable, don't you think? I'm also right in front of people because Google's ads are everywhere Yahoo isn't. (I plan to move into some Yahoo ads as well in the future because Yahoo has deals with ISPs to handle their mail, which means taking over the end user's default homepage, which means they take over search as well.)

Now, out of this, I'm trying to see how to get what are called conversions. These are visitors who convert into clients. Unfortunately 8 visitors came and left, so I have to figure out why they came and left. One avenue is Google's Website Optimizer, which lets you split-test several versions of your website to see which one might drive in the most traffic, and then whittle that down to 5 of the best versions. From there you can randomly redirect your visitors to those 5 versions and watch the Google Analytics you install. When you find visitors lingering more on a particular version, or find that IP address was the one that converted into a client, bingo -- you know which version of your site gets the most responses.

There is a lengthy discussion on this in Tim Ferriss's book "The 4 hour work week" (I was stuck at Singapore airport for 5 hours OK?)

He goes into how to prototype a marketing campaign for very little using adwords. Changing one word can make a big difference.
If you have time you can apply a little Darwinist theory and get the right ad in just a few generations.

April 29th, 2009, 10:37 PM
Seth Godin and Other Inspirational Thought
You know, this Seth Godin author is a marketing genius. More than once I've been impressed with his thinking. Here's a nugget that rings true for me recently:

(Scroll down to # 9.)

True, eh?

Anyway, as a freelancer, the freelanceswitch.com site is one I like to visit a lot and has a lot of wisdom. The resources on that site, the podcasts, and heck even the sidebar -- all have great value to me and have increased my bottom line occasionally.

I have #10 down to perfection.

May 4th, 2009, 03:57 AM
Working Hard for Leads

I had a dry sales month, and was down and out. But then I said -- enough of the quagmire, realize it's not going to be as easy as usual this month, and go out and work for it!

1. I got the word out with friends and relatives that I was available for work, and that generated two sales leads through friends of friends that will soon gain me at least $5,000 + $500 maintenance fee a year.

2. I mentioned what I did for a living while at church, some guy there mentioned his office needed a new kind of website, and I left my business card. I might earn another $2500 to $5000 there.

3. I found some affiliate marketers on an affiliate marketing guide website, made good friends there by accident, and then called one of them up in distress -- thanks to a "whois" check on his domain name. Out of insane generosity, he cut me a really nice sales lead that might get me $8,000 soon, and then perhaps more fees that add up to $1,000 in the year, and then another $2,000 perhaps next year. And the first paycheck I get on this gig, without him asking, I've offered to get the friend a 15% finder's fee check so that he keeps sending me sales leads every couple months.

4. My business partner, the web designer, found two sales leads that he's holding in check until I finish the last few remaining steps on a joint equity project I have with him.

5. My wife is going to bring up a T-shirt site.

So, sometimes you have to just get out there and make some human contact for things to happen. Don't just rely on advertising to bring in leads all the time.

May 4th, 2009, 05:32 AM
Something I'm Looking For

There's something recently that I need. I use a gmail account because, well, about half my clients use a gmail account and think it's cool; I like using webmail over other mail because I can access it everywhere and because, as a web developer, I don't have to consume other resources to read mail; and last, I use gmail because it makes for a really short, easily remembered email address if you have a great username.

Well, the problem I'm having is with multiple clients. Say what Google wants about tagging, but it's really hard for me to delineate my clients, and I have to be EXTRA CAREFUL to ensure I don't end up sending the wrong email to the wrong client.

What the world needs is a client relationship manager that is web-based and integrates with one's Gmail, and helps me manage clients in separated areas. And it would be even cooler if Google would build it. Heck, I'd even pay $75 a year for that thing.

May 8th, 2009, 06:55 AM
Affiliate Marketing and the Importance to Freelance Web Devs

I'm happy to report that the joint equity project from H--- that I've been working on for passive income, well, it's finally finished. I went $17K over budget (and had to use my own retirement cash) and spent 8 months on it. There was a lot of feature creep involved and a lot of things I had to learn. I also started the project without MVC and had to go back and rewrite it with MVC. I'll never do a non-MVC project ever again unless I'm simply tacking on things to WordPress.

Anyway, now that this is out of the way, I can make cash again. I was down and out, needed cash really bad for the mortgage and SUV payments, and so I did the thing that paid off well for me in the past -- hang out in the usual affiliate marketing hangouts on the web. Eventually through an online friend of a friend, I landed a $20K gig that might take me 2 months to build and which is being funded by yet another wealthy, 20-something kid. Do not under-estimate affiliate marketers ages 19 to 30 -- they might blow your socks off with how wealthy they can be.

So I think it's probably useful for you to learn a little bit about affiliate marketing so that you can either do it yourself, or at least know how to pick up gigs from AM pros who need elaborate websites designed and developed.

First, learn the terms. Just google on Affiliate Marketing or Internet Marketing and learn terms like split-testing, PPC, CPA, PPM, EPC, CPC, PPV, KEI, PR, WordRank, Dig, conversions, pixel tracking, and so on.

Second, learn the most typical strategy for AMers that seems to work for them. And here's that strategy.

As an AMer...

You start by blogging for dollars and get your feet wet.
You move into joining a CPA network for free, or for a small fee, and then check in every day to see what offers need selling.
You make some landing pages and an ad copy (http://cashtactics.net/02/27/landing-page-tutorial-update/), you learn a little SEO, you make a video to promote it, you put it all together and try to elevate the page rank, and you get that offer selling. You're selling someone else's offer, which might be to get people to use a certain hair gel, or to get a free vacation, or to purchase a PDF, etc.
SEO is very difficult. You start with all the free information and then you have to move up the track with hard-to-find information, or may have to pay some cash to find even better information.
This type of thing is a gamble. You have to pay for posting the ads on Google or wherever. You have to pay to get nicely drawn up landing pages unless you can do your own. You have to pay the bandwidth bill when you receive 50,000 hits on that landing page a day. And you have to hope that you encourage more people to purchase these offers than you had to spend to advertise them.
This requires split-testing. You don't just make one landing page -- you make like 10 to 20 of them, and you try to see which ad copy (the ad that goes on Google or wherever) sells the most and which landing page sells the most. You then switch traffic out to the highest selling set of landing pages.
This thing is a battle. Some affiliate marketers are not nice. They know that if they can knock you out of the ring, they will potentially make more cash. So, if they find your ad and you don't have good sysops controlling traffic from abusers, your competition can try to slam your bandwidth or bump down your page rank.
You then move into making your own eBooks and host them on ClickBank.
You then move into going around the CPA networks and direct to the advertisers yourself. If that works, great. If it works extremely well, then you can set up your own CPA network if you can hire the team of guys to help you build one and maintain it.
All the while, if you're good at this, you can do web development on the side to kind of even out the income.
Eventually you can become a "web properties guy", buying and selling domains, enriching domains, buying and selling small web companies or web projects, etc.
Last, you simply become a venture capitalist.

Now if I could just find the time, and dare to risk the gamble, to do some AM projects of my own, then I might be as wealthy as these 20-something affiliate marketers I've been bumping into in the past 2 years. Sure would be nice. Right now, though, I'm taking a back seat, learning from these guys on what works and what doesn't, storing it all up in my mind, and building websites for them until I'm good and ready to start doing some AM projects of my own.

May 14th, 2009, 07:42 PM
Yeah, the guys with the cash thus far appear to be the affiliate marketers last year and this year for me at least. I mean I've met 19 year old wealthy kids. (Unfortunately the deal with the 19 yr old didn't last long -- he had unreasonable demands eventually, but I made $10,000 last year on this guy alone by working on his projects.) These guys drop $5,000 in your pocket as if it's nothing.

So as an independent freelancer, working with advertising guys (affiliate marketers) is essential in addition to one's passive income and work they try to bring in from doing web tasks. I just found two great videos on this. (Disregard the fact that the reason the guy made the videos is because he wants to sell you Tracking202 -- just realize there's a free, limited version called Proper202.)


Note in the first video he has a bug where halfway through the video it wants to show you the video all over again. Note also that he discusses something called Direct Linking, but doesn't cover Landing Pages, and there are two kinds of LPs that I'm aware of -- review pages and squeeze pages. The problem with DirectLinking is that the landing pages they make completely suck -- you can do a much better job than that. Review pages are a form of landing pages you make where you just show an offer link. Squeeze pages get an opt-in email address for one level of marketing, and then redirect to the offer itself for another level of marketing. (BTW, opt-in email stuff is not my thing.)

So one needs to jump in, try some of this themselves, mingle in forums like WickedFire, CashTactics, DigitalPoint, Warrior Forums, etc., in order to not only get sales leads from affiliate marketers for large projects, but also to get the know-how to do your own AM work so that you can serve your clients better and yet make a buck here or there on your own AM work as well. You can also hop on IRC on #cakes and #c2m to see what's going on.

So far, I haven't gotten to the point of my all out AM campaigns -- I've only dabbled in it because I've been too busy working for AMers on their tasks. But as I learn from them and gather facts, believe me -- it's coming. I'm going to make a buck at this.

And look at this. The other day I met a guy on IRC chat and he emailed me his AdSense cash screenshot. He was making $30 a day, almost every day of the week. I asked how he did that and he said, "I spent $3000 on 3 domains." I said, what's on the domains? He said, "3 index.html files with a bunch of links on them to other sites and my AdSense ad block." I even visited the sites. And I said, "Let me get this straight -- you're brand new to affiliate marketing, you paid $3000 on 3 domains with nothing but an index.html file on each, and you're at least generating $30 a day?" He said, "Yeah, but someone did the SEO work via a bunch of backlinks to these pages, and as it turns out, 2 of the domains turned out to be fluff and only one domain is generating income." So I thought long and hard about that and realized 3 things -- (a) newbies are coming out of workshops willing to spend $3000 on nothing but SEO-improved domains with single index.html pages on them, a bunch of links, and an AdSense block; and (b) it seems easy to build such things with all the free advice on the web; and (c) while you wait for your boat to come in, you could sit their with the domains trying to earn the most AdSense cash you can -- $30 a day turns out to be almost $11K USD per year!

May 14th, 2009, 07:50 PM
Easy Tasks, Great for Portfolio
Take a look around your own town at the various surrounding town's and their websites. Some are likely very pathetic. What's stopping you from knocking out a quick WordPress theme or four for these kinds of sites, writing and visiting a town council and making the pitch, and getting the gig for $3500 a pop? And if you don't want to make the trip in person, give a person $1000 to secure the sales deal (and only if they secure it) and you keep the $2500. Meanwhile, if you learn WP and get in the trenches to iron out your skills, you might be able to spend like 2 days making the themes (and making them work cross-platform).

And let's say 2 of them don't bite on the price. Great -- just turn around and offer it to 2 of them for FREE. What, you think I'm crazy? No, it's only free if they agree to your being able to list the site in your portfolio, and only if they will go with one of your 10 designs -- not pick some lousy design you wouldn't want in your portfolio.

Then, use that portfolio as ammo at conquering the next towns that need a website.

At these prices, do just 3 towns and you spend, max, 15-20 days on the projects and earn $8,500 USD (and that's your cut, not even the $3000 your sales person could make). Do that every other month and you earn $51K USD. Not bad.

But ultimately one strategy never works. Multiple strategies, and some focus and commitment, is what works.

May 22nd, 2009, 04:19 AM
Some Days...
Some days, it's like the whole world needs an education on how long it actually takes to really build a website, and how many servers it's going to need, and the cost. So I place an ad last week, see, and I get responses from complete noobs who have affiliate marketing profit cash to burn, so they want to start some passive income websites. And their ideas? Yeah -- they're clueless:

- Guy wants a video site like YouTube for $8K. When I asked who he was going to hire as a sysop, and how to afford disk space, and how to handle the hosting budget, his answer was, "I'll worry about that road when I come to it."

- Guy wants a site detailing info about bars in Australia, and let each bar login, set up their own pages. The site appearance? Yeah, much like Facebook, but black instead of white. One of his statements, verbatim: "I know for certain I can get some Indians to knock this out for $4K USD." Yeah, right.

- Guy wants a site for under $5K that downloads people's emails from various services into one central mail account. Thinks he'll have 1000 users a day on the system. Has like no clue how much disk space that requires, or how many developers, or sysops, or cost. I computed a cost of $400,000 USD, minimum. He got rude with me. I blocked his email account from emailing me.

All of these were their very first website idea.

I almost wish I could go to a conference, give a brief workshop on freelancing, and show a slideshow of the requests and some of my hilarious responses. I mean, if I weren't crying, I'd be laughing so hard my sides split.

May 23rd, 2009, 02:02 PM
Completely Frustrating Freelance Sites
Sometimes ads just don't help. There are freelancer sites to find employers looking for you, but unfortunately most of them are frustrating to use!

Frustrating factors:

1. They require an exam.

2. They require payment from the developer to do anything, even though they claim the service is free.

3. They require an escrow, which I believe is a good way for developers to get ripped off because the clients can merely say, "I'm not satisfied." Escrow really doesn't make me feel safer as a developer at all -- only the sellers feel safer.

4. They only have permanent positions and don't give one a way to break out the search in various ways.

5. They don't have enough jobs. For instance, only 2 for "php".

It's time someone bring up a site to break out of these issues, but yet here's what I want as well:

a. block agencies who only bluff about a job when in actuality they don't have the job, have only heard about the job, and are planning on taking your resume and shopping it around until they find you a gig

b. block employers who want to try and list things for less than $250 USD

c. block guys who promise they can do anything for peanuts but then deliver nothing

May 25th, 2009, 01:51 AM
Sometimes You Need A Little Boost
Wow, the economy is a little tough right now. My ads have very little potential right now. However, it is a holiday for much of the world, and also vacations are about to gear up here, so those might be factors.

So, to make ends meet, I'm looking for on-site contractor positions for like 6 month contracts in a radius of like 500 miles away. I'll relocate there, rent an apartment or extended stay place, get a beater of a vehicle, and try to catch up on the bills. Meanwhile, I'll still do my affiliate marketing and freelancing gigs on nights and weekends.

The boost might get me 4 to 5 months ahead of my necessary survival sales numbers and provide a whole lot of comfort if, after I get off the gig, I can maintain an even momentum of at least half my survival sales numbers each month.

Let's hope this works, because I'm getting a little nervous here...

May 26th, 2009, 08:55 PM
Market Incredibly Tough Right Now

Wow, the market is incredibly tough right now for freelance developers and just developer hiring in general. I'm having a tough time getting even a 6 months onsite contract gig, and a couple sites I frequently visit are now mentioning articles like, "How To Survive Freelancing in a Recession". Yikes -- we were immune to this recession for awhile, but it looks like that honeymoon is over.

May 28th, 2009, 02:47 AM
Try the Proof of Concept Approach
As you already know, project estimations, especially on large projects, can be hard to calculate on how much time required. You keep a work log, you try to stick with an MVC methodology and a tight functional spec, but nothing is ever perfect. The biggest problem with functional specs are that too few developers actually look at risks on a project, list those risks, and try to tackle those risks in proofs of concept up front.

So I've started to do this on all my projects. If anything goes off in my head as an unknown or I'm guessing might take a huge amount of hours, then I list it as such, and come up with a gameplan to mitigate those risks. Usually that means explaining to the client that I can't determine a somewhat accurate project estimate until I can be paid to conduct research -- basically proofs of concept. Usually these are small tasks and small payments. You do the work and provide an answer on the result, and are paid whether that answer is positive or negative.

And hopefully you can get all of those out of the way before you conduct a full-blown functional spec, a technical spec (one that the programmer team sees or that you go by yourself), and a project timeline estimate.

The neat thing about this is that, let's say you have a questionable project where you're just not certain it's the right one for you. Let's say you think you'll inherit spaghetti code and you're unhappy about that. Fine -- you conduct a proof of concept for a few hours in a day, explain you don't think it's a go at the end, you collect your money and say sorry, no go, and move on. So, you're paid, and you did legitimate work. And you just might find, actually, that the inverse of this is okay, that the code wasn't so bad after all, and that you can take on the larger project. The bad news on this? Yeah, you might not get paid for like 4 hours of work. But that's why these are small tasks, broke up and paid in little sums, rather than something you spend a full week on and hope you even get paid.

May 28th, 2009, 04:28 AM
Thank you for this thread, Mike. I will be going to University of Maryland for a Comp Science degree next fall, and your diary is a great read.

May 28th, 2009, 04:00 PM
Loose Notes from the Field

* With freelancing, you really do need a thick skin. This is not like turning in a project for your Comp Sci professor. And it's not like working in the sheltered environment of a regular day job working with somewhat reasonable people. Often you are working with very young guys, many of them affiliate marketers, who have bright ideas and like $5K to $10K in their hands. Sometimes you luck out and get some young guy with $20K in his hands, raring to go. But their inexperience shows, sometimes awfully. You have to be patient. I like the ones who admit this is their first project and admit they're just learning the ropes. I have a tough time with guys who've done this about 4 times, been screwed a couple times, and think I'm the next guy to screw them over, when if they'd give me a chance, I'm not. Or guys who think they know how to "deal with us PHP developers." Therefore, you'll get some rude people that might shock you, or guys challenging you to a lawsuit (easily mitigated with your own lawyer letter unless you did something completely awful and without common sense), or people forcing you to just lay down the gamerules or be assertive and/or aggressive right back in order to get them to cool down. Sometimes you need to know when to hold them, or to walk away.

* Part of that thick skin is in common sense. I mean, your clients won't explain every detail of what they want from you, although I stress you should at least try, but eventually you just have to roll up sleeves, go with what you have, get in the mind of the client from their perspective, and design a system based on common sense. That often means going with features you see on the more trendy sites that the client visits, like LinkedIn, Facebook, Prosper202, Basecamp, whatever the client is frequenting. And it means taking the theme of the client's project goals and running with it. Otherwise, you end up doing nothing but long emails back and forth with the client, never getting anywhere. However, this is where your functional spec writing can explain how you see things based on what you heard/read from the client, and then your more technical version of the functional spec -- the technical spec.

* You'll love the day when you have a sales guy or business partner (such as a designer) doing the busy work for you, and all you do is say yes/no whether it's a reasonable project or not. But this won't make your world completely comfortable -- just a little more comfortable. And if the sales guy isn't selling as well as you'd like, it makes it tough.

* I'm afraid you'll find in your first year that you will drain your savings down a bit even when you get great money in the door. So by your second year, you'll absolutely, 100%, need something regular and reliable to pay that mortgage or rent or at least a major SUV payment. If you're lucky enough to have built successful passive income websites that are working every month, consistently, to pay that rent or mortgage, then great. But if not, and if that means getting a part-time job you do for 5 hours every day, then so be it. If that means an occasional 4-6 month contract job in some other city to give you the cash boost you need every 1 year or 1.5 years, then so be it. If that means getting a "sham job" (something I read on freelanceswitch.com) where you get all your regular day job work done in the first 3-4 hours and spend the rest of the day sneaking in freelance work, then so be it -- but it requires a special kind of job for that, and these are hard to find.

(Often sham jobs, as you might expect, are working for any kind of city, county, state, or federal government office, or working in some office in a library. I don't often think you'd find a sham job in private industry. Most of the time those positions are filled with slow people, so a really smart person like yourself could get in there, do the job of like 2 people in just 3 hours, and have the rest of the day to get your freelancing cash in. And you'll need some kind of office with a door and a somewhat dumb supervisor to pull it off. You'll also need to be able to bring in your own laptop and have like mobile wireless or the company's wireless, without hassle. And another place where I noticed a sham job could be worked out is in like a retail outlet like GNC, but not one in a mall, where you sell health pills occasionally, but most of the time you sit there with your laptop doing your own work.)

* Freelancing, every year, has cycles of good/bad news. So far I have consistently found that during holidays (like 3 days before and 3 days afterwards, even), are a wash with no sales. And then sales on Friday evening or most of Saturday afternoon are slow or non-existent because everyone is either partying at the pub/bar or sleeping in. Sunday, however, seems odd because I do get some sales at those times. And because of timezones, I've had sales deals where I get contacted at like 2am or 4am by email and within an hour I've got the contract. Monday is often a no sales day because people are trying to figure out their tasks for the week. The month of December is tough in getting sales leads. And the month of April, and part of May, are consistently terrible times for sales leads around the world because of tax season. And sales are slow around June and July because many people are on vacation. So that doesn't leave you with much, does it? It means you need to go nuts on sales and marketing only on Tuesdays through Friday morning and perhaps an occasional Sunday, and don't waste energy otherwise unless you've found a cheap ad space. And it means you need to go nuts on sales in the months of November (to avoid having no work at all in December) and March. And then against this cycle, you have good and bad economies.

* I might be going out on a limb here, but I'm thinking that in any given recession, freelance work is immune up to about the first 18 to 20 months into that recession after the first official mumblings in your government about a national recession. After that, even freelance work gets hit with a downturn. That's just my experience so far -- perhaps I'm wrong.

* Affiliate marketing can help, and indeed some guys get really good at it with consistent results to augment the freelancing income, but for sure it can be somewhat time-consuming in your day and really is a kind of legalized form of gambling. In IRC chat rooms this week, for instance, I read about guys hoping to get more credit cards in the mail so that they can gamble even harder because they're having a bad conversion month or something.

* Don't take on more than one official partner that you split profits with. I'm having a hard enough time working with my partner as is. I couldn't even think of having more than one on a given project. That is, unless I was already earning $100K from the business, reliably.

* You may want to think, instead of business partners, on the idea of project partners. This fits well with your need to get passive income projects online. So, a project partner would be like you have a project A that you split joint-equity with one guy, and then project B where you split joint-equity with another.

* Freelancing can be so aggravating at times. You do it because you love the freedom, the purity of logic, and the power, but I can't see anyone wanting to do it for more than like 4-5 years. My hope at least for me is that my passive income projects and my affiliate marketing overtake my freelance work. I would love the day I can hang up the freelance hat and either live on the income of the other things, or decide to take it even further. For instance, you could become a web properties investor, or an angel investor, or just make interesting little software packages or tools and sell those for fun as extra income on top of the other, reliable passive income and affiliate marketing income.

May 28th, 2009, 04:06 PM
You know, sometimes when I do this thread, I wonder if I'd get rich off rewriting it and selling it as an eBook along with deep research, survey results, charts and diagrams. But then, here are those facts:

1. My name would be on that eBook, linked back to my real, functional business. And some of the things I've mentioned about clients have been less than friendly, so it would reflect bad on my business.

2. My name would be on that PayPal transaction, and again, a link back to my business with an ordinary Google search.

So, I'd have no choice but to use an author alias and someone else's company on a joint-equity deal.

May 28th, 2009, 04:33 PM
Thank you for this thread, Mike. I will be going to University of Maryland for a Comp Science degree next fall, and your diary is a great read.

Ah, to be your age again. I'd trade anything to be in your shoes, actually. Here's some thoughts of what I would have done differently.

* There are two modes of thought on the degree. One mode says you can find programming jobs without needing a Comp Sci degree. I know this for sure at least a little because my degree was in English (with a focus on Creative Writing), of all things. The other mode says no, you need the Comp Sci degree to widen to the largest set of opportunities possible. And I think recruiters in general want to see you at least got a Bachelor's degree in something, and don't often care if it was even an online school. But again, your widest opportunities to get in the door come with that Bachelor's degree.

* And if I'm going to go for my Bachelor's degree, I might as well go all the way to my Master's degree (perhaps compressing it down to 1.5 to 2 years more of work) so that when I'm old or out of options I can still teach programming in like a local tech college. Most tech colleges won't let you in the door to teach without that Master's Degree. And they don't pay well, so these jobs are more for when you're out of options or are old and have already paid off the house.

* I would have spent my freetime in college working with startups or trying to find a joint-equity project partner. And the goal would be to build passive income websites and to get up to speed as well on how to do affiliate marketing effectively on a shoestring budget.

* When you get out of college, I really think the fly-around consulting job is tremendous experience and no programmer should do without that. It will bring maturity and a broad background to your skills and attitude. However, this is not something you want to do forever -- it wears on you. So, consider spending only like 3 to 4 years doing that and then get off that crazy train. And when you get the crazy money that comes in with this -- do not squander it. Save, save, save! Drive around in a beater when you get home. Avoid buying the yacht. And pay down any debts you have just as fast as you can with this income. It's a very Spartan lifestyle for 4 years, but has a nice payoff when you think back at all you learned, and all the debt you conquered, when you complete this.

* Another good experience I had was working in NYC, and also working with federal contractors in Washington, DC. Those two experiences have helped me tremendously, and I encourage any programmer to actually seek those out because it will pay off with knowledge you will learn and can apply on future work.

* Be cautious about being too over-excited with your statements, attitude, and so on in your first few jobs. Think about what you say and how you say it. Be cool. In hindsight I smack my head on some of the stupid things I said or did. I've wished I had a time machine. Try to be the kind of programmer with a cool head, who thinks before speaking, who doesn't laugh all the time or crack jokes too much, who becomes the kind of goto guy that clients like. In my career, I've met guys like that and been somewhat jealous. These guys can take a bad situation and make it good. They are like miracle workers and in a fly-around consulting job, they will amaze you with their finesse in working with clients, as well as being a super code jockey in very little time.

* Eventually after a few years you may be asked to join the ranks of management. I really only recommend you get your feet wet for a year in doing this, because it's valuable experience, but then get out. I say get out because as a manager of developers, you are often paid the same, but have to do both the developer job and the manager job, and even perhaps the job of the lazy HR staff. And management lingo and other stuff -- it gets old and aggravating. I got tired of going to meetings on how to be a better manager, how to be a better public speaker, how to motivate workers, who moved my cheese. In each class, I was given fancy charts and ways to memorize things -- all kinds of gimmicks. There were some really wacked out classes I went to. In one, if you answered a task properly, you got wooden nickels to turn in for some prize or some nonsense. In others, if you answered poorly, the dunce hat got moved around from table to table. In another, we were tricked because we all had jelly beans in front of us, and we were asked which jelly beans we picked and why, and it was a diversity training exercise. This kind of stuff is just stupid. So get in, learn it, and get out. There are more fun chapters in your life you'll have when you leave management and get back to web development.

* I wish I had worked abroad for awhile and learned what it's like to do international business. I mean, I'm too USA-centric. If I had learned Spanish, and lived in Spain and spoke it fluently, I could have been expanding my business choices later on. And then learning the British, Canadian, or Aussie ways of doing things, for instance, help you understand how to do those kinds of contracts with more confidence.

May 28th, 2009, 06:16 PM
No Business?
Got no business coming in? You might want to think through what's hot, and what's not, and see if you're a fish against the stream or a fish going with the stream.

And that's easy. Just hop on some IRC chat rooms, or Twitter, for any field you are interested in, and let it run like all day for a few days. Then, look through that and see what the chatter is about. If that doesn't help, then just login and ask, "Sup? I'm writing a blog -- what's hot and what's not in ____ this season?"

As well, look for jobs on sites like dice.com and see what technologies/programming packages/APIs/addons they're using besides the programming language. For instance, with PHP, right now I see that what's hot are:

- MySQL and PostgreSQL, obviously
- MS SQL Server, oddly enough
- jQuery and AJAX
- Java integration with a PHP front-end -- why people do this is beyond me, but oh well
- Drupal -- extremely hot
- osCommerce -- extremely hot
- WordPress -- occasionally on the full-time/contract job sites, but extremely hot among affiliate marketers and freelancer sites
- integration with OpenID, Facebook API, Twitter API, Yahoo API (various), and Google API (various)

And with packages like Drupal, osCommerce, and WordPress, it's more than just saying, "Yeah, I know what it is. I've installed it. I can do anything you want in the admin system." No, instead, they want to know if you can theme it, or write admin and/or front-end plugins for it with the plugin API, or build connectors (login or content connectors) from it to other things like a forum, Twitter, etc. So as you learn these things, don't just stop at installation and admin -- get under the hood and learn it even further for plugins, connectors, and theming.

May 28th, 2009, 11:43 PM
No Business?

As well, look for jobs on sites like dice.com and see what technologies/programming packages/APIs/addons they're using besides the programming language. For instance, with PHP, right now I see that what's hot are:

- MySQL and PostgreSQL, obviously
- MS SQL Server, oddly enough
- jQuery and AJAX
- Java integration with a PHP front-end -- why people do this is beyond me, but oh well
- Drupal -- extremely hot
- osCommerce -- extremely hot
- WordPress -- occasionally on the full-time/contract job sites, but extremely hot among affiliate marketers and freelancer sites
- integration with OpenID, Facebook API, Twitter API, Yahoo API (various), and Google API (various)

The top dollar contracts at the moment are either MS or Java. PHP programmers here are on average getting offered roughly half what a .NET MOSS guy can pull.

Alfresco may be an antidote to that. It does a lot of what Sharepoint does. Bundling a complete OpenSource solution with Samba, Alfresco, Zimbra and Squid should be attractive to businesses that are on tight budgets. Pocketing the equivalent of the MS counterpart licensing fees could earn $10000 a server and take no more than a day to set up.

Have you thought of putting together a blog?

It could almost rival the Mixerman diaries http://www.mixerman.net/diaries1.php

May 29th, 2009, 03:33 AM
The top dollar contracts at the moment are either MS or Java. PHP programmers here are on average getting offered roughly half what a .NET MOSS guy can pull.

Yeah, that's sad actually. In my opinion, anyway. I mean, Linux is easier than it used to be, but not completely easy for the programmer. Windows actually appears to be getting harder and harder again, almost like MSDOS days, but in the programming realm at least. Remember having to block out memory in your config.sys just so your network card driver would load or you could get the high-end video mode of your videocard? And Windows is far more expensive too.

I'm not a fan of Java. Just not my thing, and I tried hard to make C# and JSP my thing too for awhile there. But I bailed on those. You see, I'd rather get code finished, rather than sit in a war room whiteboarding it for months; or fighting to beat the speed of deprecating APIs; or spending hours just trying to figure out how to get data into a certain type so that you can run it through one function, get an output, and then feed it into another function, without the data coming out like funky binary output instead of a string like I might want. The same goes with JSP. And I got tired of the slow speed of it, and the development speed of tweak, compile, run, tweak, compile, run. As well, I didn't like having to get all the files in the proper folders, and get the manifest going the right way, just to run the code. Jeesh -- too much work when I could be helping the client faster with PHP. And the whole code-once, run-anywhere thing -- that never panned out well, did it?

May 29th, 2009, 04:38 AM
too much work when I could be helping the client faster with PHP.

I have always considered myself better at understanding someone's business needs that the average programmer. There are guys that write better code faster but I like to come up with solid ideas that fit well with the user.PHP might not create enterprise standalone applications but I haven't found anything I prefer for quickly getting an idea out and working.

I have spent a little time lately looking at NetBeans and I think the whole Java thing is just a pi$$ing contest with Microsoft.
Why should I need dozens of features added to my project to do what I can do with half a dozen lines of PHP?
Especially when that code is slower.

I am no fan of IDE's either although the VIM plugin for NetBeans makes it tolerable.

May 29th, 2009, 05:19 AM
For those of you guys in the PHP camp (or perhaps in some other web language camp as well, perhaps) -- you might benefit from reading this other thread I started:

Roll Your Own PHP Framework

May 29th, 2009, 11:31 AM
I have spent a little time lately looking at NetBeans and I think the whole Java thing is just a pi$$ing contest with Microsoft.
Why should I need dozens of features added to my project to do what I can do with half a dozen lines of PHP?
Especially when that code is slower.

That's one of the better arguments I've heard against that language. I'll have to remember that one if it ever comes up.

The sad thing is, because Java is a free download, was more like Pascal with strict typing and not considered a minor language by the academic elite in colleges, had rich libraries that were easy to get going, wasn't as hard as C (some may argue otherwise, however), and because of Sun's extremely hard push into colleges and research, it gained wide acceptance there and so it replaced Pascal as the teaching language. And so the Sun/IBM/Oracle vs. Microsoft pi$$ing match was carried there and the students were the victims.

As well, Oracle is an extremely powerful entity in my experience. Once Oracle gets its feet in the door with an accounting department in a major company, it starts to branch out into the development department and every other database need in a company until finally Oracle, like a virus, takes over everything. And Oracle is a big supporter of Java. Therefore, Java gained widespread acceptance in the business world just as much as Microsoft's stack did, causing MS to have to go back to the workshop and come out with C# (the Java also-ran) as a counter-punch eventually when their whole Java platform backfired.

So what's left is PHP-based LAMP, which I think threw everyone for a loop with its success and still throws everyone for a loop, but it doesn't have the reach yet of Java in the schools because I think Zend doesn't push it hard enough and because the academic elite probably like non duck-typed languages and non scripting languages. And it hasn't overcome all businesses (but is slowing climbing that direction) because Oracle, IBM, Sun, and Microsoft are dominating there and pushing it aside. With a little oomph from Zend, it might be more mainstream, but that takes a lot of cash. Still, however, Microsoft, IBM, and Sun have all at least woken up to this odd thing called PHP and taken it a little more seriously at least as soon as last year. I think there's now a way to load PHP in the .NET platform, of all things, and that started last year I think. And IBM and Sun publicly make PHP comments from time to time, or have articles about its benefits on their site, of course connecting to their stack, however.

It also baffles me when I see a company want to hire PHP guys as if they are "front end guys" who will use PHP in the page controller and template framework, calling Java from the models. About every 75 to 150 jobs or so, I'll see another job like that posted on dice.com or monster.com.

May 29th, 2009, 03:19 PM
As well, Oracle is an extremely powerful entity in my experience. Once Oracle gets its feet in the door with an accounting department in a major company, it starts to branch out into the development department and every other database need in a company until finally Oracle, like a virus, takes over everything.

Cough SAP Cough.
I have heard it alleged that the top x accounting companies were paid trailing commissions to get SAP into their clients.
My only experience with it was an engineering department that hated it.
I think what Oracle, SAP and their ilk have in common is a proven ability to proceess a certain number of transactions without data loss and a regiment of consultants who can tailor a system for you at $300 per hour.

My first PHP experience was as a manageable replacement for Crystal Reports.
Rarely has a more miserable piece of rubbish been written yet there are probably 3 CR jobs for every PHP job ad.
I put together a full suite of online reports with PHP and Jpgraph in less than a week. I had moving averages, pie graphs with job costing percentages etc. CR would have just annoyed me.
PHP excels as a report writing engine. I can't think of anything that comes close.
People still write reports in MS Access.
I did a quick and dirty Access fix for a friend last year and I didn't even bother with the report engine I just coded HTML output. I reckon I saved a couple of days.

I get Java but I don't see why it is a better language than C++.
I learned C and C++ before you needed an IDE to make the program work. Stroustrup's original work (I still have the copy I bought in 1988) is unusable to someone who needs to know how to work an IDE to get program output.

It is the frameworks that have become bloated and ugly not the languages.
PHP has no mandatory framework - as yet.
Maybe some MVC and IDE will be imposed upon a future version in the name of productivity but for now give me PHP, VIM and a database and I am happy.

May 29th, 2009, 11:29 PM
PHP excels as a report writing engine.

I'm set to find out and this is what some guys need me for. I've got a 6 month contract coming up, trying to catch ahead of the bills since I took a steep loss initially on a joint-equity passive income project. (BTW, I'm still freelancing nights and weekends, plus affiliate marketing, while I do that 6 month contract. My goal is to knock out like 3 credit cards and have that much less burden when I come back home after 6 months.)

May 30th, 2009, 09:27 AM
Even if your DB engine doesn't support crosstabs PHP arrays are more than flexible enough to make them easy.
Using JpGraph http://www.aditus.nu/jpgraph/ I could combine tabular and graph data within columns on a page. With minimal effort you get reports that look like magazine pages or professional brochures.
One thing that blows people away is automated reports converted to multipage PDFs and emailed to clients.
I have even used PHP to interrogate a FoxPro accounts system and generate statements.

May 30th, 2009, 04:26 PM
Did you use DomPDF for the PDF generation? I found it's the most powerful and easiest to use.

May 31st, 2009, 01:32 AM
I don't think it was around at the time.
I used FPDF.
It placed a few constraints on my pages but it worked.

June 1st, 2009, 10:31 PM
Sometimes When It Rains, It Pours
So here I was, thinking I was going to have to change the phase of this freelancing biz for 6 months, taking an onsite contract gig in another town, living out of a cheap efficiency apartment, moonlighting the freelancing biz, and catching up on bills.

I was waiting on the recruiter to get off his lazy tail and call me back because by all accounts it looked like I had that gig bagged and it was going to pay $50/hr.

But then 3 projects land in my inbox:

- $10K USD -- guy in California
- $15K USD in the UK
- 2 projects for an affiliate marketer

The first two look fairly solid, with the second one looking fairly certain.

The last one is brand new, but there are two things going for it: (a) affiliate marketers have proven to me they have cash; (b) it's not just one project, but two, and perhaps more.

So much for weeping over how to handle a mortgage payment. Looks like it's going to be a busy summer.

June 1st, 2009, 10:57 PM
So, I'm not sure if it was mentioned, but here it goes.

You do realize the potential you have to write a book out of all these posts, right? I'm serious; you could host your own site where this book is downloadable for free (going off the notion that you obviously believe information should be free), make a nice donation button easily accessible, and offer a hard copy of the book for a modest price. Am I crazy?

June 1st, 2009, 11:13 PM
So, I'm not sure if it was mentioned, but here it goes.

I sent you a PM on that.

June 1st, 2009, 11:25 PM
Think About This
For anyone who's a freelancer, or wanting to be one, wondering how the heck they're going to make a buck, or out of answers when the bill collectors call, consider this...

(a) I just saw an ad today for beanbags in my Gmail in the margin. I could use a beanbag, so off I go to click to see how much a large adult-sized beanbag would cost. It said $618 USD! I thought, now c'mon, mom taught me to sew by hand and with a machine when I was a young boy just in case I needed to do so urgently. So I thought -- what, we're looking at like 4 pieces of microsuede fabric that you cut and shape, a zipper, a bunch of poly "beans" you can buy in bulk, you stuff it in, zip it up, and it's ready to ship. Make a website and show the colors, and off you go.

(b) The web now has gazillions of people on it these days. China, the other day, surpassed the USA on total people on the web, I thought I read? Also, the affiliate marketing seminars are pumping out noobs by the hundreds every day. Everyone wants a website. They want them for selling skateboards. They want them for selling old antiques. They want them for selling all kinds of services. And among all these gazillions of users, you can't get a single one to pay you either $100 a day or two to pay you $500 each per week?

(c) What are you doing for improving your marketing and your advertising? Nothing? No wonder you're hearing air.

These are the things I think about when I'm scraping by in a month. The world isn't perfect, but there are tons of opportunities out there. Just get smart about it, think, think, and think again. Learn from your mistakes. Execute something every day. And don't underestimate the power of advertising.

June 2nd, 2009, 05:30 AM
You're Probably Not Going To Get Paid When...
You're probably not going to get paid when you google on a client's email address and find that he was too stupid to use his own email address when posting in a forum dedicated to undressed (and superb I might add) women.

Stupid me! A client interacted with me professionally and politely and wanted a project bid estimate on a project that I really found quite interesting. I was thinking it might be about $10K. I spent like one day emailing back and forth about project questions, and then I spent another half day writing the functional spec and timeline breakout. After doing all that work, I then googled his email address, and lo and behold I found the female photo sites. Also, without a doubt, I know it was him in this case. So it looks like both he and I are stupid today.

I mean really, can a guy be that stupid as to use his business email address for commenting on these sites? Let's hope it was done by an annoyed developer getting even, but even then that doesn't bode well for me, does it?

Watch Out for Non-Competes and Non-Disclosures
There are some oddball non-competes and non-disclosures out there. Honestly I think people grab a legal doc from the web and think they can just start hacking away without a lawyer, and then rush through it so fast that they fail to see major issues.

Can you imagine a judge looking over the guy's handmade NDA or NCA?

Judge: So, can you tell me the lawyer's name who drew up this contract?
Client: Um, no your honor.
Judge: So how did you draw it up?
Client: I used a legal template from Office Depot.
Judge: {Tries to control laughter. Takes a few seconds. Gets up to get a drink of water to hide how hard he wants to remain serious and laugh at the same time.}
Me: {Trying to control laughter.}
Judge: {Judge returns} So, um, then what did you do with the Office Depot document?
Client: I rewrote it.
Judge: Did you use a lawyer to rewrite it?
Client: No, but it wasn't much -- just an extra sentence here or there, and then delete a paragraph. Want to see the differences?
Judge: Uh, no. Sorry, Mr. Client, but this document is not valid in the state of X. In the future you should use a lawyer. I hereby judge on behalf of the defendant and all his legal fees shall be paid by you. Case dismissed.

As well, as a developer or an affiliate marketer, or a developer who works for affiliate marketers, you can't just sign away your livelihood by one false move in a non-compete. And last, I love how some guys think they have an edge on the competition with their NDA, but then you google and find like 4 blogs on the topic by 4 different people. So much for the edge.

June 2nd, 2009, 05:46 AM
Referral Fees & Proof of Concept Fees
Ah, the sweet feeling of Referral Fee cash and Proof of Concept fees, sitting in your hot little hands. It's a great feeling.

Referral Fees -- So you have a website you want to build, but then find the client wants to switch gears and make a standalone client project. You don't make standalone client projects, let's say, so you find a contractor and negotiate a deal where the client works direct with the contractor, you drop out of the picture, and the contractor, after 15 days of success on a project, floats you like $500 (10% on a $5000 project, let's say). Nice, huh? Makes you want to do this sort of thing all day. There's no liability, less hassle, just connecting those wanting gigs with those needing developers. The only advice I have here is -- get out of the way as much as possible between client and contractor, make it a direct deal and not use your company, and be courteous on the fee delay or if you get less of that fee. I mean, for hardly doing anything, you can't complain if all he can give you out of a $500 fee is $200 -- still, it was worth it.

Proof of Concept Fees -- So you have a website to build, but you say up front that you're uncertain of the risks of some parts of the project and don't want to make a full project bid until you know these risks are handled. So you ask for some upfront proof of concept cash to run some tests. When you add these up, they might be like $500 in fees for like a $10K project. Not bad. Not only do they help you make ends meet financially, but they help you feel more confident on the project. So, even if you don't land the big fish project, at least you got your $500.

June 2nd, 2009, 11:25 PM
The American Programmer
The more I look around and interact with others, the more I strongly believe this. The idea of the American Programmer, working on site for 15 years in an office before he takes a move somewhere -- has gone. Even the idea of doing that for 2 years in an office, has gone. The idea of staying only in one programming language for about 10 years in a row, working full-time in an office, has gone. And those who are left doing this are likely days or a couple months away from a layoff.

The programmer of the future will be a freelancer, who occasionally will be doing the onsite contract gig for 6 months every one or two years. And the better him for it, anyway. I mean, it's a bit more risk, but it also is more practical for businesses, more practical for you, and with risk comes opportunity to beat the same old salary. Instead of getting like $65K in your programmer job, consider having two clients and some passive income projects getting you $100K in a year. Then again, depending on how little effort you put into it, you could end up bankrupt as well. Your failsafe valve is to take a gig onsite for 6 months.

These ideas might also extend to your country as well.

So this is why I think passive income projects and/or affiliate marketing will be also in the cards for every developer in the future -- because it's one of a few different ways you can build stability while you handle the risks of freelancing.

June 3rd, 2009, 03:40 PM
Some Sales Leads Can Completely Waste Your Time, Perhaps Even Maliciously
The other day I received an email and the guy said to call him. I checked out his site and realized he was an online advertising agency, not an affiliate marketer. He's what affiliate marketers would love to have a direct connection with, without going through a CPA network. (And CPA, by the way, is an affiliate marketing term and does not mean Certified Public Accountant.) So I call him up and he says, "So you're a PHP developer, right?" I start to speak and perhaps only mention 3 sentences and then pause. I explained what I did and explained that I had been working with affiliate marketers over a couple years usually. He then said, "Uh, I've gotta go. Can I call you back?" I said sure, he collected my number, I also emailed him my number, and he never called back.

This irked me as, naturally being a guy who analyzes things very deeply and tries to improve himself, the sales lead did not call me back and looks like he may never call me back. I ran this by my wife and she was very wise about this. (See what I mean about, "You're going to need a spouse" in my original few posts on this thread?) She said, "I would say there are high odds that this was a client who was looking to have a developer he could squeeze into doing whatever he wanted, with the lowest rate, pushing you around like an organ grinder monkey. He quickly ascertained that you were not going to be that kind of guy, so he made up an excuse and hung up. Don't take this one to heart. It's better that he does not call you back. If he does, you should try to find a polite way to get away from doing anything for him."

Next, I've stopped doing functional specs and timeline/bid estimates if the client refuses to give me any inkling of a ballpark budget. This is because I have finally been burned my last time by guys who ask me for bid estimates on something slightly complex or complex, I begin a 2 day Q/A period on details, and then begin a day-long functional spec and timeline estimate in detail....only to find that my estimate comes to $10K and they tell me they have only $1K or $2K in the bank. My wife insists of course that some guys are shopping around to see what it might costs because they want to do the work for someone else, and they want you to calculate costs and write the functional spec for them so that they can then use that with their own client. But I disagree -- I really don't think guys are out there like that.

So here's my strategy on this in the future. I recently calculated a bid for $10K. I can count up the pages and feature count against that $10K and I come up with a ratio of (page+feature count) vs. cost. It's a lousy estimation, but at least it's some kind of estimation. Therefore, if someone comes to me with an idea, and they refuse to give me a ballpark budget, I'm going to ask use this formula to determine a ballpark cost. I'll say something like, "Since you don't have a ballpark budget on this, I've done a cursory (page+feature count) vs. cost judgment against previous projects I've done, versus your project details. I come up with $10K, plus or minus a thousand. Of course that was an extremely rough estimate and I won't have an accurate one until I break this out in fine detail. So, before I can do that, can you let me know if the $10K is a possibility with you?" And if they say no way, then give them the polite boot.

As well, investigate your client's name and email address and anything you know about him on the web. Check his domains, his phone number -- anything and everything. If you find he's into questionable stuff, or if more than two previous developers are warning you'll get ripped off with him -- don't bother with this one. And if only one or two developers are warning you, then be cautious as you begin, and if you see warning signs like they did, try to find an exit.

Meanwhile, don't think for a moment the client won't do the same with you. He will. So you need one or more aliases/personas for things you do on the web, and protect your business persona as much as possible -- use it sparingly.

June 3rd, 2009, 03:47 PM
Have Them Come To You
Here's something I read recently in another thread here on ubuntuforums.org:

In my experience, freelance websites are not all that great an idea. The reason for this is that the customer is almost always going to go for the lowest bidder (you WILL be undercut, often), and free-lancing in general is a tricky business to be in when you have little or no experience in the industry as a whole. I would suggest you set-up a company which does bespoke software - meaning customers come to you with ideas and you implement them, rather than you hunting customers down. This would allow you to focus on building up a real identity for your business, allow you to work out contracts on your terms, and give you far more control over the design and specifications of the software (generally speaking: customers do not understand that what they want is not what they need - freelancer websites generally tell you to 'do this, don't ask questions', and so you will spend a lot of time creating something which is convoluted and over-complicated, for the minimum amount of money).

That was from "Tomosaur". Here's my response...

Yeah, Tomosaur is right for the most part. I avoid bid sites like the plague. I am not an organ grinder monkey, and too often I've seen project bids going to the lowest bidder or near to the lowest bidder. It might only be by who the client can get live in a chat window or on the phone, and who at least has a decent website, starting with the lowest bidder. Homie don't play that game.

So yeah, I build bespoke software. But the difference is that I know when times are tough and yes I do occasionally do a blitz of like 40 posts in various bid sites, as well as even consider doing the occasional onsite gig for 4 to 6 months. Most of the time, however, I pay for ads and draw the traffic to me. And of all the bid posting I've done, and it must have been at least 1000 by now, I've never landed a single deal, so I tell you, I'm about ready to throw in the towel on those.

June 5th, 2009, 03:09 PM
Balancing Clients
There are times when you need to work with more than one client at a time in order to hit a mortgage payment. This gets tough at two clients. If you pick up a third client and his tasks are like 2-hour tasks (such as building a landing page with a jQuery gadget on it), then that third client will probably work out fine. But if not, then I don't see how some people work in a third client. So I work in two clients and have to divide my day and my night, working just as long as I can stand, in order to hit that mortgage payment and perhaps a couple other bills as well. Luckily, however, one usually doesn't have to maintain that for more than a month.

What I've found is that brief communication is always best. Show concern for their project. Only charge what time you use and not for answering a phone or sneezing or whatever -- be very strict on this because they are, after all, paying you like $50/hr or more. But be upfront when things happen that may delay you. You want to be fair as much as possible and push yourself to get your client work done a little ahead of schedule, but if that's not possible and you know you will have interruptions, I've found that the best policy is to be up front about whatever is going on in your life. Got a son graduating from high school? Tell the client. Got a sick dog? Tell the client. Got a tough bill coming up and need to take on another client in the evenings? Tell the client as well. For one thing, it makes you appear real, but it also helps them realize that they need to set their expectations a little lower for the next couple days while you work on something. In my experience, honesty wins as long as you are reasonable, slightly apologetic, and show at least partial commitment to their project anywhere possible while these things are going on.

The caveat to this, however, is the cranky client, and usually you know they are cranky ahead of time. For those clients, don't share too much of your personal life and try to find "white lies" to help you justify a delay a little, but in the end with cranky clients you really have no choice but to push other things aside and knock their work out just as hard as you can and get them off your plate and out of your way.

Now, saying all this, nothing's perfect, of course. Some clients will just not like this and if you can't save the situation, then unfortunately you may lose them. It's just something you get better at over time, but you can't win them all.

June 5th, 2009, 04:46 PM

You forgot to mention:

Become a specialist

This is important as independent programmer/consultant, because everyone is a "ME TOO" clone, right now!

I specialize in the Ubuntu world in 2 things:

High End Server Builds,
I use redundant power supplies, clustering, NAS/SAN deploys, special RAID configs, dedicated appliance configs and Special Software Installs to set me apart here.
IBM Servers and CHRP Installs,
I create distros of Ubuntu for YABOOT/CHRP installs (needed for CD to be recognized on IBM hardware as bootable disk). I also collect drivers for various hardware devices, source or compiled for the IBM hardware, so I can "Plug-N-Play" on their hardware too. Additionally I support dual installs with IBM's Unix version of AIX.

Think you should add this to your dialog, as this is important.


You can not know it all and can not be the only solution to all your customers needs, so look around and find others that can support you in areas where you are either weak or lack skills.

Get agreements with them to support you, so you can offer complete and robust solutions to your customers.

Of course you have to invest time in getting to know your potential partners, because to find many saying "I can" but delivery is a whole different story. Easiest way is to send them a small "test" opportunity.

What to Learn

Also for the aspiring PHP/Web geeks there are four (4) levels of competency that one must conquer:

Procedural (default entry point),
OOP (Objects, modular design, reusable code),
Frameworks/RAD (Mastery of Frameworks, Tool Sets, RAD assistants (such as Ruby on Rails), etc.,
Compiled (yes PHP compiles and run from command line),

Zend is certifying PHP but they lump 1 & 2 together, which is not good, as they are completely different, even in thought approach, and some programmers that could pass level one but can not grasp #2 fail, not getting the recognition they need. Zend eludes to #3 with their Zend Framework cert, but additional tool masteries are needed, so this is incomplete. For #4 Zend has nothing. I have raised these issues with them and hope they see the light and implement them.

Hope this helps all you Aspiring Programmers!



June 5th, 2009, 05:30 PM
I specialize in the Ubuntu world in...

Fascinating. I'm sending you a PM on this one.

June 7th, 2009, 01:22 PM
The Power of Zen in Discussion
In my effort to remain somewhat anonymous here, I'll admit that I'm in my 40s. And my dad was also a psychologist. Those facts combined I'd say make me a bit more friendly and useful on a team of programmers.

My problem, however, is how vehemently some of these younger programmers (and unfortunately even some older programmers) try to make a point either in a forum post, an office setting, etc. Some unfortunately may have maneuvered a higher rank than me on a project and I must tolerate this negative energy.

Recently this happened in a forum post in another forum, so that's why I feel compelled to make this point.

So what I'd like to share is something I like to call Discussion Zen, which is sort of like Zen Buddhism, but not quite. Let's start with an analogy. Imagine a guy is coming at you with a dagger and you're just a talented cage fighter with no weapons on you. As he lunges at you, you boil with rage and start punching before the dagger comes up on you. However, to your discouragement, he finally goes for the throat and you're dead or nearly dead. Now imagine instead of being a cage fighter, you're someone who knows Aikido (http://en.wikipedia.org/wiki/Aikido). Instead of hitting the guy with the dagger, you use logic and reason in your technique and use the opponent's own force against himself. And let's say you survive. But the point in this analogy is not actually that you live or die. Let's say in both analogies you actually died. Now let's stick a team of peers around the situation, watching the confrontation. Which one of these defenders do you think you'd like to emulate in life? Which defender would you find more honorable? To me, it obviously would be the Aikido specialist. This is because he uses logic and reason over emotion. Logic and reason lasts longer. Once you learn it, you can share it with others. Both issues don't work with emotion. Emotion is short-lived, and you can't use it persuasively, and often not as consistently, with your peers in the future.

So Discussion Zen would be you sending "I messages" instead of the accusatory "You messages" to someone. It means being assertive rather than aggressive. And it means using logic and reason over emotion because it is more powerful than emotion -- it not only lasts longer, but can be used to teach those same points in the future far more effectively than emotion could. Sometimes it means holding your tongue rather than speaking, such as picking your battles. Or waiting and thinking, perhaps even going back to your office and meditating briefly with your eyes open and a pad of paper, before speaking.

For instance, here's a negative way of saying something that shows one's emotion.

Those who haven't read X (hyperlink) have no reason discussing anything here in this forum thread.

And its positive counterpart:

I believe I feel that A and B are my conclusions because of C and D. I am influenced by what I read from X (hyperlink).

Now, saying this, it is not easily performed. Even my own discussions could stand this focus. It takes practice and a willingness to want to live your life this way. We are raised at birth as babies to use emotion as our form of communication. It takes effort and time to unlearn that technique.

Another thing I learned from reading about Zen Buddism is that communication uses symbols of expression. When you break down what you are seeing and hearing into the science of that expression, thinking that through in your mind, it is far more easier to squash it with your fingers, let's say, and flick it away. And if not that, then to rationalize what you are seeing and hearing without the emotion causing you to emote.

So, rounding this back to advice for aspiring independent programmers -- freelance developers, essentially -- this is a very powerful technique in your future challenges. Development and programming can be frustrating at times. We developers are also at a level of technology that our users and sometimes project managers cannot easily comprehend or may never comprehend. Or perhaps the energy you expend helping them comprehend is far harder than you just fixing the problem without telling them. And freelancing, meaning where you are not only developer, but salesman, and also spend 50% of your time communicating what you are doing -- this can be even more frustrating. So if you really want to be a freelancer or a contractor who lasts the longest on a job, who contributes the most meaningful discussion clearly and effectively, consider using Discussion Zen.

June 9th, 2009, 03:46 AM
The Power of Zen in Discussion
We are raised at birth as babies to use emotion as our form of communication. It takes effort and time to unlearn that technique.

Successful communicators certainly use emotion in their communication, however it is not their own.
The easiest mistake to make is believing that your commitment and passion in something will have any effect at all on another person.
The master communicators engage the emotions of their audience and channel it into support for their argument.

Unfortunately many of them are in conflict with the truth. Much of this conflict is aided by the medium of discussion.
The media holds a discussion between a professor of immunology who explains why he believes that parents should immunise their children and a concerned parent.
Both get equal time but only one is required to bring a well reasoned and verifiable argument. The parent need only bring fear. Yet that fear engages strong empathy among some individuals who take the poorly reasoned position against properly considered medical advice.
However if the professor makes a stronger play to the same emotions that the parent appeals to he has a chance of approval.

The same principle applies to sales.
A seasoned salesman tries to convince you that his product is the best then encourages you to chase him for the privilege of obtaining it rather than trying to badger you into purchasing. This is squarely placing the emotional burden on you the consumer.

June 10th, 2009, 07:53 PM
Recruiters Will Drive You Nuts
So, occasionally with freelancing, the reality is that you may have a bad economy and may need to get back on that train and take like a 2 to 6 month on site contracting gig, and then moonlight the freelancing for the evening for those few months. It can recharge your finances so that you can ride out dry periods in freelancing.

But be warned -- recruiters will drive you nuts. They may be the nicest people of all. They may tell you they've landed a sure thing and to get ready for the gig. And you could spend a lot of energy doing apartment hunting on the Internet and making phonecalls and so on, only to find out two or three days later he's calling back to inform you that the gig fell through.

As well, you may want to be paid corp-to-corp. This means instead of them paying you directly as an employee, they pay you as a vendor. That means the tax burden is on you, but it also means you can get creative on tax deductions and make things in your favor by far. I often find I make more money in a corp-to-corp than as a W2 employee. And if not corp-to-corp, then consider a 1099 Misc. But several recruiters don't like the 1099 Misc approach because it opens them up to unemployment insurance problems at least in the USA.

The problem with corp-to-corp, however, is that the recruiter may want you to have like a $1M (one million dollar) business liability insurance policy. You might freak out at that -- but trust me this is the norm when someone expects you to have business liability insurance. I just called AllState and for a tech freelancing job, sole proprietor, that runs about $995 per year. Luckily AllState will let you pay like $215 up front and then make monthly payments of $99. Then, cancel the insurance if you don't need it anymore. But when you're charging $50/hour, hey, it's affordable.

And the biggest problem of all is time. You put everything on hold to make the recruiter happy, to clear your plate for him so that you can study for an interview, or take a technical exam online, or work through a phone interview, and that can suck up a week to two weeks. While that's going on, you might be postponing other client work and other recruiters. And so after two weeks, you're in a situation where you're like not able to make that mortgage payment like you thought you were.

In fact, this happened to me in the past couple of weeks. I had a sure thing in Knoxville, but then that fell through. I then had a sure thing in Washington, DC, but then that fell through too. It's enough to make you want to punch the air or something.

The other thing going on, however, may be your spouse. She may have done a lot of work with you here to get this going, and so when the plans are dashed, she's even more frustrated than you are, very likely. What I've learned is to stay calm and to just get back into finding more gigs or recruiters, because two people being upset (you and your spouse) just makes the situation worse. But believe me -- with you being calm and her being upset -- at least for an hour or so you can expect that this will only make her more upset because she thinks you're not caring enough, when actually you are.

So you might think this freelancing isn't worth it. Well, I tell you, it is worth it. It did me just fine last year. It's just a bad year for it, I'm afraid. The socialist policies in Congress and the White House don't appear to be helping, but hurting. The US dollar is weakening. Fuel prices are rising. Power bills are going up. And so once you get through this, and get ahead of the bills, and can ride out the bad economy, then it is worth it again. I'm seeing fits and starts of success, but nothing tremendously solid like last year.

And right now, I've got a guy paying me $30/hr for non-coding tasks, and $40/hr for coding tasks. It's a bargain, but I needed the cash for a dry period, so I agreed to it. He's a stickler on hours, and I can appreciate that, so I'm starting and stopping the clock very strictly. But even with this, when you have to work in other sales negotiations, previous warranty work on other clients, and negotiations with recruiters -- it eats up a day pretty quick. And when it eats up your time, it sucks you away from being able to bill on other client work. But when you're only making $100 a day, it's still tough to hit like a $1900 monthly mortgage payment because you're having to ensure you bill at least for 19 days, and yet get the cash in time before you're marked late by the mortgage lender.

June 10th, 2009, 09:56 PM
The Top Things You'll Dislike About Recruiters

* I swear these knowledge exams are rigged. These are an occasional requirement. If you get an A on these exams, then they know you've somehow cheated and found a way to get access to the answers of the exam. So they always put in some bogus answers to catch the cheaters. Perhaps I'm not correct on this, but I'm one smart cookie, and I try very hard in these exams, and I still make like B's and C's on them, never an A.

* Some of these knowledge exams ask you the stupidest stuff. Take for instance PHP. Now, off the top of your head, I want you to do these things:

- Do some scientific notation math in your head for me.
- Do some bitshifting math in your head with bitwise operators.
- Tell me all the array functions possible in PHP and what they do.
- Tell me all the conditions/possibilities with the "final" keyword not only on classes, but on interfaces and class methods as well.

Not easy, is it?

* They place job ads with titles that do not describe the job. How many times will I see a job listing saying "Web Developer" without specifying that they want you to know Ruby, Java, and COBOL as well? Jeesh! Why can't they just ask the client, "Um, what top two languages will a candidate need to know for the job?" And then if it's Java and Ruby -- SAY SO IN THE JOB TITLE! For instance, "Ruby/Java Developer" instead of "Web Developer". Like duh. I mean, it only serves them better if they do that, so why not do that?

* Some of these dorks just see that the client needs like a Ruby Developer, but then create a listing that says, "Developer experienced with Ruby, LAMP/PHP, Java/J2EE, .NET, Adobe FLEX, Javascript, jQuery, and AJAX." Now tell me how many guys know all that and would not mind switching one day from working with FLEX to working with Ruby another to working with .NET the following day? No one. And no one but a blooming moron at these recruitment companies would be posting things like this, but I see it all too often and I am about 80% certain the clients really don't need that.

* If you don't have a Bachelor's in Computer Science, some won't even talk to you. That's ludicrous! I have a Bachelor's Degree in something else, but that doesn't make me a worse developer. Heck, these days, even an Associate's Degree is good enough as long as you can try to keep up with trends and listen to peer review of your code on the web, always striving to be better.

* Getting you excited about a gig, making you think it's going to go through, and then it falls through.

June 10th, 2009, 10:07 PM
Two thoughts:

Sometimes being able to find something out ("Google is your friend") and how you apply what you know are just as important (if not more so) than what you know in the first place.
A degree or other legitimate qualification sometimes speaks more to me about committment to getting something done than specific theoretical knowledge.

June 11th, 2009, 04:02 AM
Economic Downturn
Here's an article I think freelance devs and aspiring freelance devs should notice:


(I hope that link goes through. If not, then visit online.wsj.com to register a cookie on your system, and then visit that link above.)

Basically, a freelancer should not sit on his laurels and say, "Gosh, why are my sales numbers down 60%?" You don't have time to ask that sort of question for very long. Eventually you need to do what is mentioned in the article.

My suggestion is to try a short-term onsite gig to tackle like perhaps your smallest 3 credit cards, or pay off an entire vehicle. That way, when the gig ends, you might not need to do yet another onsite gig for quite awhile because your income/debt ratio is lower. And in my case, once I earn $30K and pay off that amount of debt, my wife's income will be enough to pay 100% of our monthly bills. So this means that after 3 to 6 months of short-term pain, I will be a much stronger freelancer, with more competitive rates, and anything I bring in (besides expenses and taxes) will be icing on the cake.

June 18th, 2009, 12:38 AM
Drupal Still Relevant
From my short-term, onsite job search I've done, it certainly appears that Drupal is at least still very relevant for PHP/LAMP jobs. In your language of choice, you may find the same sort of thing is preferred -- some kind of knowledge about a popular CMS product is going to be essential.

Trouble is, they often don't tell you completely what they want you to know about this CMS product. So, you have to plan for at least this:

- yes, obviously the install and config
- yes, obviously the admin and to generate some content
- and then also understanding how to make a doodad loaded in the front end, such as a forum gadget that displays the last 15 posts into a separate PunBB forum that's hyperlinked at the top.
- replacing a section/page tab at the top with a connection to a forum or other product, integrating a theme almost seamlessly
- building a backend plugin that enhances the admin system or goes into an admin panel area specifically for plugins
- theming it with your own theme

If you can do all that, even if perhaps you don't know how to integrate the CMS's API except only very slightly, that's good enough to get the gig and then you can learn the rest of what they're looking for when on site or when you land the freelance project.

So my advice is, if you want to be a freelancer, go visit a freelance bid project site and regular job search engine. Type in a keyword search for your particular language. Click on about 60 to 80 jobs or projects and start writing down what they're looking for. Then, look for patterns, such as 50% of them wanting Drupal experience. For anything that is more than 30% or 40%, such as a particular product catalog system, or CMS, or payment system, or backend framework -- that's enough to trigger you I think to start to learn those things to the degree mentioned above, and to make you more competitive and ready for your next project.

June 18th, 2009, 01:40 AM
Here's a useful link relevant to this thread:


June 18th, 2009, 06:46 AM
Looking for a way to track projects with your clients? Don't like Trak or other tools? Want something 100% free? Great, here's something based on Drupal:


It could stand a Files tab (for file exchange) and a Chat tab (web-based instant message) added in, but perhaps you can fork that project and build your own. If you do, please share! :)

June 23rd, 2009, 11:24 PM
I don't want to kid you. When the economy gets really, really bad like it is now, even with all your optimism and pulling out all the stops, even when your skills are stellar and there's just no reason why a businessman wouldn't hire you...

...you could still hear crickets in this business when visiting your inbox or checking your cellphone.

You know things are bad when you walk into a Chinese restaurant down the road, with no customers coming in or out while you're there, and the Chinese guy says in broken English and a very big smile, "I threw in some extra eggrolls on the house." I looked at the order and saw that eggrolls don't come free here. When I insist I could pay for them, he pushes my hand away and says, "No, no. On the house." His subtle lesson to me is to remain extra flexible in times like these, even when it hurts, even when you think you might break.

June 24th, 2009, 04:19 AM
I don't want to kid you. When the economy gets really, really bad like it is now, even with all your optimism and pulling out all the stops, even when your skills are stellar and there's just no reason why a businessman wouldn't hire you...

...you could still hear crickets in this business when visiting your inbox or checking your cellphone.

You know things are bad when you walk into a Chinese restaurant down the road, with no customers coming in or out while you're there, and the Chinese guy says in broken English and a very big smile, "I threw in some extra eggrolls on the house." I looked at the order and saw that eggrolls don't come free here. When I insist I could pay for them, he pushes my hand away and says, "No, no. On the house." His subtle lesson to me is to remain extra flexible in times like these, even when it hurts, even when you think you might break.

An anecdote with names changed to protect the guilty.

Company A is a service provider in a large industry. They have high fixed costs comprised of plant & equipment, rental and staff.
Company B is a direct competitor to company A.
Previously the market was big enough for A and B to both make acceptable profit. The downturn has both companies running at about 50% capacity and not making enough to cover expenses.

In a competitive tender against Company B, Company A decides to reduce their price by 25% to guarantee getting the work. This work is done at a loss but is less of a loss than not getting any work.

Now consider freelance software where Indian contractors are available at $7 per hour. I can make more than that stacking shelves at a grocery store. Why would I compete?

The point of difference that I have is location. I am not in India I am in the client's office listening to him and providing reassurance that is more than worth the massive difference in hourly rate.
My point is when times are tough you have to get in client's faces. Look for ways they can use you and pass on some of your geek prescience to keep them ahead of their game.
It is said that the easiest place to find additional business is with existing clients.
It certainly is when times are lean.

June 24th, 2009, 08:45 PM
Yay! May have a $4500 product catalog site project coming up. And I get to build it entirely from scratch, doing it my way, and I can then turn around and reuse the model of the code, altering it slightly, per new clients who may want something similar. As well, I can sell the product catalog eventually as a "site script".

June 30th, 2009, 05:05 PM
For any aspiring freelance developer, I highly recommend anyone consider the book, The Four Hour Work Week (http://en.wikipedia.org/wiki/Four_hour_work_week), and study up everything you can about the author, Timothy Ferriss (http://en.wikipedia.org/wiki/Timothy_Ferriss), including all criticism against him via Google. Some people who have worked for him also blogged about it.

In sum what you'll find is that his points are extremely fascinating and some of them quite valid, and he's living proof of it. However, you also find that some of the criticism against him is also quite valid.

Some criticism:



Like what I have read and perceived about him, his ADHD and brashness are not only his strengths but his weaknesses. He would be very hard to work around, as well as work for -- kind of like working with Donald Trump. With someone like Richard Branson (http://en.wikipedia.org/wiki/Richard_Branson) as an exception, most CEOs in the Fortune 1000 are somewhat like that as well, unfortunately. (BTW, this is a good link (http://video.aol.com/video-detail/the-colbert-report-colbert-report-richard-branson/3182399359) on Branson on the Colbert Report.)

The book is kind of hard to read because it almost looks like a diary where the pages have been pulled out and resorted into chrono order, and then he took like a week to edit it to sort of make it halfway blend together. From what you read about him, that actually might not surprise you. The book is badly edited from a logical flow kind of standpoint -- you might find it better to read a passage, put it down, ponder it, read the next, etc.

Anyway, here are some points I gathered from the book:

1. Set Goals and Accomplish Them Without Excuses. Get off your duff and actually do something, rather than spending your lifetime dreaming it or planning it. Stop telling yourself no. Want to become a karate champion at 55? Fine -- set the goals, identify the obstacles to those goals and eliminate them, create the support mechanism to help sustain your goals and remind you why you're doing them, focus on the positive, deal with the reality, and achieve your goals. Define your desired outcome and strive for it, rather than just "showing up". Focus on productivity instead of hard work.

2. Effectively Deal With Mistakes. Make mistakes often and early, learn as you go, and don't repeat your mistakes. Go with what works and cast off the rest. And by learn as you go, he means very serious, critical thinking and analysis, and legal studies of various business plans -- but doing something and acting on it just as fast as possible. And I imagine, especially from what I see in his writing style, this means talking faster, reading faster, learning faster, and thinking faster.

3. Try For Awhile, Then Focus On What Works. Find several business niches, analyze which ones to focus on, focus on those few, see which ones work, and cast off the rest. In his case it was a web-based company to resell vitamin pills as a dropshipper, under his own brand name.

dropshipper - http://en.wikipedia.org/wiki/Drop_shipping

4. Minimize Complexity. In his case, instead of keeping an inventory of pills from various companies, he learned to dropship them.

5. Abstract Your Management As Much As Possible. In other words, the trick of managing the managers who manage your business. This is how he manages his business for just 4 hours of every week, remarkably.

6. Listen To Your Customers In Spurts. Go around your employees in spurts and go direct to the customers to find out how to make your product sell more. Then, back away, let your managers handle things based on the new competitive intelligence, and manage the managers. Produce a FAQ or something for your customers to optimize having to answer many of their common, tedious questions.

7. Automation. As part of your abstraction, automate the heck out of everything, which requires a severe amount of testing to get it right. And if you don't know how to streamline and automate a process, then hire others to help you do so.

8. Exploit Global Cultural Differences To Your Advantage. Take advantage of cultural differences and currency exchange differences, rather than let them hinder you. For instance, living life in spurts in other places where your currency goes further and not be bound to one country.

9. Don't Dwell - Think Clearly. Don't dwell on something you've already dwelled on, or get too emotionally attached. It wastes time and hinders your clear thinking. Only get focused on the business models and workflow of a business long enough to abstract it away from you as much as possible, but not too far away that it flounders.

10. Reinvest In Your Niche. Drive more customers to it by free and paid means, improve the workflows and automation, improve the abstraction (up to a point), and try to squeeze as much juice out of your niche as possible. What is interesting with him, however, unlike other get rich books, is that he does not recommend buying out your competition or buying up companies that participate in your successful business workflow. Instead, he prefers that you try to remain as lean as possible. This is because in his companies, he has had control to build everything from the ground up in an optimized fashion, and taking on a competitive business, or a business that participates in his workflow, means you're taking on dead weight that cannot be easily remolded into this optimized fashion without a lot of headache and cost.

11. Eventually, Broaden Your Niche. Eventually all niches become flooded by competitors who study the ones who succeed and try to outdo them. By then, you should have already diversified in split-offs from that same business model, such as moving from vitamin pills dealing with brain function to vitamin pills dealing with your skin, or started other niches.

12. Eventually After That, Share Your Story. Eventually even this diversification and pursuing other niches may not be enough. That's when it's time to sell off technologies used in your niches, to franchise all or some of your niches, and to make money explaining business and niches such as in speaking engagements, books, and videos. But don't let that work overpower you beyond your only partial activity in a week. Use abstraction, automation, strategy, and reinvestment to keep yourself nimble as you branch out.

P.S. I'd like to share 4 great links at the end of the Wikipedia entry about The Four Hour Work Week:

* Pareto Principle (http://en.wikipedia.org/wiki/Pareto_Principle)
* Parkinson's Law (http://en.wikipedia.org/wiki/Parkinson%27s_Law)
* GTD (http://en.wikipedia.org/wiki/GTD)
* Zen Habits (http://en.wikipedia.org/wiki/Zen_Habits)

July 1st, 2009, 03:43 AM
One Great Way To Think of Models in MVC

So, if you ever study MVC, you might easily grasp at least the C and V of it -- the controllers and views.

I mean, you often see newbie developers combining controllers and views in one file per web page, forgetting about models entirely. But then they hear about page template engines like Smarty and so on, and so they split things out into controllers and views.

And then they scratch their head and wonder, "So what's this model thing?"

Well, models are actually supposed to be the meaty part of your code. Controllers are supposed to be thin and used as the handler of data input, the glue between models, and then send data to the views to be displayed. Newbies, however, might make fat page controllers, rather than thin ones.

There are many ways to create that meaty part of your code. But one simple, very organized way to think of it is to break up the concepts of your website into major and minor concepts. Call those things "Domain Objects". (Or, if you want to think of the majors as "Domain Objects", and the minors as "Sub Objects", then so be it. For me, I just refer to things without a tree and just keep it simple as "Domain Objects", majors and minors mixed.)

Once you have written down on paper what those are, it is important to build your website from the start by making certain you create models as you go. I highly recommend you don't come back later and decide what your models will be from your page controller logic. I highly recommend you don't go down the path of fat page controllers, whereas before I might have advised you completely differently on this -- now I recommend creating models as you go.

So, let's take a typical company tracking system and we have a login form on it. Great, your domain object then is called User. So now you start by building the CRUD (Create, Read, Update, and Delete) for that User. Now, that might be hard to work out all at once, and there's no rush to do so. Instead, just start building the parts of the CRUD you actually are thinking about at the moment of your thought process. So, if I'm only focused on the login form at this point, just take the User class in your "models" folder and build class methods like:

checkPassword($sUser, $sPass)

Basically one is an (R)ead method of CRUD, and one is an (U)pdate method. That's a start. You may have multiple methods that handle CRUD -- not just one per each letter.

From there, just keep building the website like that. With me, I have an automatic front controller, so I don't have to do any work there and I just start in my page controllers. So, I start in my page controller, get the data input, load my models and send data to/from them, and then call my view up, populate it with output data, and display the view.

This doesn't have to be rocket science. It's really simple, when you think about it.

July 2nd, 2009, 09:48 PM
July Bounce Back

Wow, July is bouncing back more than I anticipated. I've got $400 USD engaged, $620 USD owed to me, $15,400 USD in leads moved from warm to hot, and $8000 in lukewarm leads.

You just need to find a designer or two to help you get the work, and one which you can trust because you know they need the income just as much as you. My designer makes money on not just design and logos, though. He makes cash on SEO and hosting, and perhaps onsite tech support if the business is close to him. My designer also likes the approach of meeting people in pubs and other places and spreading the word -- something I don't have the time to do and don't do as well as him. So, because I'm his main developer, it's in his best interest to get me gigs because that helps him. And he's mature enough to know that low bids are not a good way to run a business in the long run, so he pays me well when he gets something.

And then there's Google advertising, carefully set up and throttled, which seems to have given me one lead at least for the $5 I spent on it.


I'm almost wondering what would happen if freelancers were to start affiliate programs. In other words, if someone finds a freelancer a gig, and the freelancer gets paid his first initial payment, then the affiliate gets paid from that initial payment a small sum like $10 to $20.


Have you made a backup of your stuff lately? Do you have it automated on a script at least to a thumb drive or USB-connected hard drive of some sort? If not, I highly recommend this. I keep hearing of people with bad luck, thousands of dollars being lost. Don't let that be you.

July 2nd, 2009, 10:19 PM
I'm thinking of going independent soon! I have a great business idea and I'm going to do in on the cheap for one of my buddies as a test case... i'm simply tired of the way businesses work. I'm the single programmer in my company, with 4 ongoing projects and my boss comes to me and asks when can we have reporting website (with multitiered security schema) finished. Yeah, right. I told him, and I quote "as soon as you hire a company to create it."

July 3rd, 2009, 03:43 AM
Yeah, right. I told him, and I quote "as soon as you hire a company to create it."

Glad you can relate. Sooooo many people are clueless about web development. I won't even build a website* for less than $2000 USD, won't build a product catalog* for under $4000 USD, and web developers who do this for a living will tell you that this is completely fair. The guys who do this for $10 and $15 an hour (USD) -- you get what you pay for -- and it seems so many people have to learn the hard way.

(* I mean one that's custom from scratch, with an MVC framework, jQuery and AJAX interaction, modern yet almost timeless page theme, built on a formal functional spec doc instead of a set of emails, etc.)

I mean, compare the quality of a fantastic product like...






Obviously I like the look and great planning behind beetil.com versus what you get with the other sites.

You pay for what you get.

July 4th, 2009, 09:11 AM
Have you made a backup of your stuff lately? Do you have it automated on a script at least to a thumb drive or USB-connected hard drive of some sort? If not, I highly recommend this. I keep hearing of people with bad luck, thousands of dollars being lost. Don't let that be you.

I use a simple cron script that checks hourly for the presence of my usb hard disk.
It backs up my music collection as well as /etc, ~, srv/http,my development tree and shared folder.

rsync is one piece of software that everybody should learn in detail.

July 9th, 2009, 06:16 AM
Here's a note to myself that I'll share with you because it may also apply to you as a freelancer:

"Quit whining about having work to do, or learning to do, and not enough time, but then merely working on your todo list or getting distracted. Avoid excessive todoism -- quit massaging the perfect todo list that captures every last thought of yours, and actually accomplish something. Quit whining to yourself about how difficult a task is when that merely wastes time and energy and doesn't solve your problem. Throw on some Sigur Ros or symphony music on Pandora.com, drown everything else out, and get something done every day, no matter how small. Being a freelancer means you are your own slave driving manager of yourself, and you'll fail terribly if you don't get things accomplished every day, no matter how small."

July 12th, 2009, 11:46 PM
The new forum theme sucks. I can't choose some of the popdowns on the menus because they show up as inline DIVs underneath some other items. It's a major CSS issue. I had to tell FF to switch to no page theme in order to even get to this form.

July 13th, 2009, 03:25 AM
Yay. They fixed the CSS theme on this site.

July 21st, 2009, 01:21 AM
There are many things that will make your day as a freelancer, but here's two that I like recently:

1. Repeat clients

2. An editor of a line of books or perhaps a magazine getting back to you to have you write a technical article, chapter, or a whole book.

So tonight I had yet another repeat client get back to me. My foray into affiliate marketing wasn't going as good as I wanted -- I'm still a long ways off from understanding how to get to success at it. And web gigs have been terribly slow this year (far more than last) even with advertising. But clients who like you -- they will come back, time and time again. I'm now on my third client comeback, which is great. And even if it's for a small project and you're having to run tight on the bid -- hey, don't look a gift horse in the mouth. I mean, make those clients into serial clients, my friend.

As for the writing deal -- there's cash in this freelance business, and then there's prestige. In order to make the best cash you can, you really need to invest in prestige. And one really great way to get there is to be able to brag about relevant awards you've received, or a relevant book, magazine article, or book chapter you've written. And that's what has happened -- I've landed a deal with a prestigious magazine. Can't go into detail as I'm being anonymous here (read the long thread as to why), but anyway -- this is very good news.

July 21st, 2009, 02:37 AM
Got good news? Great -- learn to feed off of it, slingshot-style. In freelancing, you can get down in the dumps. I mean, sometimes you feel like it's only your voice, and you're dealing with speculation a lot of times. Some times, yes, you do get burned and have to bail on something, even if it means you don't get paid, or receive your last payment. So, when you *do* have good news -- feed off of it. Use that momentum to go out and get more business so that you *really* have something to celebrate.

July 24th, 2009, 05:18 AM
Watch Those Contact Requests
Unfortunately in web design freelance, web dev freelancing, affiliate marketing, or any online home business or freelancing of any type -- you'll get odd contact requests and you'll also get scammers.

I remind you to use a little profiling on certain warning indicator factors -- if it rings enough bells, proceed with hesitation on the contact. Stick with email at first, proceed by other means later.

Below is my warning indicator list. If I get a score of -3 or worse, I proceed with caution.

1. Start with score of 0.

2. What does his name sound like? If it sounds similar to names you haven't trusted in the past, it's just a caution alert in your warning indicator list. For instance, if you've been scammed by guys from a certain country, and the incoming contact request sounds like it's from that country, it's a caution alert. Gets a -1 here.

3. Does he ask for a way to reach you besides email on first meeting him? Gets a -1 here.

4. Does he not have an apparent agenda in his contact request -- just wants you to contact him? Gets a -1 here.

5. Although you can get false positives on Google by finding the wrong guy or finding info about the guy from 5 years ago that is no longer applicable because he's changed his ways, Google this guy and see what you see. If it looks like trouble in any way, he gets a -1 here.

6. Does he not provide an email address to reach him back? Gets a -1 here.

7. Calls you "player", as in "What's up player?" or uses ghetto lingo like "my boy" and things like that, such as, "Heard you contacted my boy Kris." Gets a -1 here.

8. Broken English, such as dropping articles like "the", "an", or "a", or looks like he ran his request through Google Translator because he doesn't speak your language. Gets a -1 here.

Perhaps you can think of other warning indicators.

July 24th, 2009, 05:28 AM
Watch URLs Recommended in IRC Chat Rooms
In the wide world of freelancing, unfortunately you can get some real jerks in forum interaction, social networking interaction, social bookmarking sites, and ESPECIALLY on IRC chat.

Lately I've been getting URL suggestions when I make a request for help on IRC chat. And repeatedly now I'm finding with a message that starts off with:

"Yeah, got a URL for that."
"Yeah, got a site for that."

And then gives you a URL that seems legit, but when you click it you receive a completely obscene image and your browser goes wacky where you can't stop it.

Unfortunately with redirects and cloaked URLs (such as from tinyurl.com and other sites), it's hard to see which guys are legit and which are not.

I am hoping to find a site I can use where I paste any suggested URLs into it and get feedback on whether to trust it or not.

I also recommend you DO NOT follow these URLs in a public setting, or around children, or perhaps when onsite doing an onsite client gig. Instead, get into your car with a wireless laptop, or shut your home office door, and Google the URL first, or parts of the URL, and if it seems okay, then and only then click it and see what happens -- if you dare. And if they start off with "got a URL/site/website for that" before they provide the URL -- that's the running gag, you see. It used to be a RickRoll, which was non-malicious. But now it's much more malicious than that -- what I'm talking about is so obscene that your client would drop you if they saw you viewing this on your laptop for, say, an onsite gig. And your kids would scream and run and hide. It's just that bad.

One area where I feel this is coming is on Twitter. Twitter has been a great social networking platform for me -- I'm actually on my 3rd gig found through that mechanism. But unfortunately because of the nature of Twitter with so many characters you can type -- you have to use URL shorteners like TinyURL. And this means cloaked URLs -- a risky thing. So far this hasn't happened to me on Twitter, but when it does, it will be the end of Twitter. I really hope that new URL shorteners come out that can be trusted -- where people can mark that URL as bad enough times and everyone gets the benefit.

Don't get sucked into this terrible, running gag. Some people find it incredibly funny. I don't.

July 24th, 2009, 08:43 AM
Getting Off Your Duff
Life is not all lost as a freelancer in a down economy. You may have to get off your cushy seat, draw some business cards up, draw some business letters, mail these out twice with a two week spread in between, and then call one week later with several cold calls (as long as you comply with telemarketing call laws and direct mail association guidelines). You may have to switch from like web development to onsite PC support (like installing a virus scanner on *gasp* Windows) for a few hours.

Focused DBA Marketing
I've also found that people really prefer focused vertical marketing from you, rather than broad marketing. You may have to form DBA ("Doing Business As") and create websites or business cards dealing with only one aspect of your business, such as "computer support", "SEO/PPC management", "PSD chopping", and so on. I mean, if you had a mild heart attack and lived through it, and needed to see a doctor, would you rather thumb through the phonebook and look up "doctor" or "heart specialist"? More than likely you'll want the heart specialist. That's the same thing that happens on the web. The web is so vast, and often on any given topic you'll find 5 competitors or more to that topic, that you really need to grab their attention and let them know you can solve the problem in a vertical way, not a generalist way. Sure, keep your general, broad site up. But then think up what else you can do and bring up sites and business cards and DBAs just for those other specific things. In the footer of each, you can link to this family of sites.

Another thing clients want is to understand your workflow. I mean, imagine you have some TIFF or PSD image chopping, where you want to convert into an XHTML/CSS template. Imagine going to a site dedicated only to this and nothing else. You start with a 1, 2, 3, 4, 5 kind of workflow right off the homepage. You review samples of the guy's work, see the price ranges or options and pick which ones you find suitable, upload your files, and are told to wait until the project gets approved. If it's approved, your PayPal ID is invoiced (according to the workflow diagram). Then, once you pay the PayPal invoice, you receive an email with a Basecamp login so that you can track the project's progress. Eventually you receive your files.

See how that workflow can help your business? Sure, it's not suitable for every type of business model. In some cases prices are set on averages and are somewhat of a risk for certain business models, but still doable. For instance, a static fee on PSD to XHTML/CSS chopping seems risky, but not if you look at how much cash you'll make in the long run. I mean, you might have some hard projects that might not be worth the price you charged, but then you might have some easy projects that make up for the loss.

July 26th, 2009, 09:09 PM
You May Want Freecamp Project Management

Basecamp is quickly becoming the suggested project management tool for freelancers. The reason it's popular I guess is because it follows the KISS principle, has some essential features that people want, lacks many annoying things in other project management tools, provides a summary activity overview, and you don't need to sit through a long training session to learn to use it.

Well, if you liked that, then there's something else called Freecamp, which is FREE. With Freecamp, you don't get file sharing or online chat, but you can use some substitutes for that and leave the instructions for that in a "writeboard" inside Freecamp. You also have to create a separate Freecamp setup per project, which seems like an easy thing to live with.

If you want this, then open up your bookmarks and add this one in:


Now, per project, you need a completely separate login ID, but just to setup Freecamp. I just flip over to Gmail and create one like jackshardware.freecamp@gmail.com, where jackshardware is my project name. I then login to that Gmail account and tell it to forward all mail to my other regular mail account and then archive mail as it is received. Now, with that ID, I setup the Freecamp site.

So, when setting it up, I may make the site "Jacks Hardware". Then, when I get into the site, I simply create one project called "Project". In Freecamp, you can't create multiple projects -- only one. So, if I have a client named "Avantara", and several projects with Avantara, I can create separate, exclusive projects with Freecamp. All that you have to do is bookmark the projects somewhere so you don't forget.

Next, I create the user accounts. I like to stick with email addresses for usernames because people don't forget those. And I like to make the starting passwords sort of simple like "freecamper1" and then remind people to change their password on login. I also grab like their Twitter account and add in their picture from there, their phone number, their website URL or blog URL, and their IM handle. I also add myself in because it's more comfortable for me to use my own gmail account rather than the one used for project setup.

Next, I create some default message threads like Questions, Status, and Other, and assign who are subscribers by logging in temporarily as them and checking off Subscribe.

Next, I designate who on the team is an admin.

Next, I make the client happy by coloring the site sort of like the theme of the project, and adding in a logo.

Next, I take the project specification and stuff it in the todo's as separate tasks.

Next, I sign up on Dropbox (getdropbox.com) and create a file sharing area, or create an FTP point on my own hosting plan and give out an FTP user/pass for that point. The client can then install FireFTP to exchange files on your FTP point, or use Dropbox if you have chosen that. You could do the file sharing a dozen different ways, but a choice between Dropbox or custom FTP point seems like the best choices to me.

Next, Freecamp gives you a way to add group chat, but I haven't messed with it. Instead, I just use the IM IDs I already know.

Next, I create a writeboard and put in their the instructions for the file sharing and the method of group chat.

From there, just start using it under your preferred email address, not the administrative email address you created. One thing you'll notice is that the commenting feature uses Textile. Here's that cheat sheet to get used to it:


July 27th, 2009, 02:30 PM
Watch URLs Recommended in IRC Chat Rooms


I agree.

/me glares at CK

Madera Property Manage
July 29th, 2009, 11:02 PM
1. - Distribute the software you create yourself. Sign up with Paypal or Plimus to handle processing your purchases. With the Internet, you don't need to go through a publisher to get your software sold.

2. - Have a toolbox of programming tools that you use so that you can quickly create just about any program very quickly.

August 1st, 2009, 04:30 AM
Open Communication...Sometimes
Leads have been coming to me from unusual places. And why? Because I've started making myself available on several kinds of popular places -- Facebook, Twitter, the various chat systems, etc. Sure, it's aggravating to get interrupted while you're in the middle of something to take an incoming connection, so that's why I open the channels -- I just may not be listening to them all the time. As a freelancer you will be doing a lot of coding, but then you'll have like a week of RFP reading, SOW writing, and sales and marketing discussion. It's on those weeks that you really need to dedicate several hours communicating with people on those channels.

A lot of freelancers think they'll just have a website and a gmail account and leave it at that. But then you'll miss out if you do that. Might be convenient for you, but not so for catching gigs.

Reality Distortion Field
You may have a great week like I did:

- 3 gigs paying $2400 that you can conquer in 2 weeks
- 3 RFPs sent your way

But the problem was, when I was working the 3 gigs, I was totally immersed in them. I was not thinking about the future -- just thinking how tremendously good the present is. And the disappointment is that you'll decline like 60% of the RFPs that come your way, perhaps even more until you get your skills up. So, when the 2 weeks ended, my wife used up the cash on bills just as fast as I brought it in, and then she said, "Great -- did you think about next week or will we hit another dry spell again?" And that's the thing with freelancing -- don't let it put you into the reality distortion field. If you feel the end coming on a project, it usually never is, but it's a good time to fire up the marketing machine and get leads for at least 2 hours a day.

August 1st, 2009, 04:46 AM
MikeTheC's Advice To Aspiring Independent Programmers

Consider working for a major corporation instead. Major corporations, such as Google, have excellent wage, retirement and medical benefit plans. Game manufacturers are even better as they will promise you the moon, pay you an excellent-sounding wage, and totally grind you into the dirt by making you work 80 and 100 and 120 hour workweeks, thereby helping to ensure you never, ever see your family, have quality time with your kids, or *special* time with your wife.

Sell your soul to the company store. Corporations, even big evil ones like Microsoft or Sony, need all the warm bodies they can find who know how to type and can help add to their codebase. In exchange for your unswerving loyalty and devotion to their cause and dream, you can have that sporty-looking little two-seater, maybe a corner office in a sprawling mega-corp, and a plaque on your workstation with your name on it. Then, every day when you get into work, you can wear your favorite t-shirt, drink endless cups of coffee, play cards across the cubicles with your buddies, and help to ensure world domination by the faceless execs you'll never see and who will surely have moved on by the time the company goes Chapter 11.

Forget about your own dreams and help realize someone elses'. You don't think in terms of how to run companies, rub elbows with government elites, or dictate terms to the masses on when, where and how they could and should use your software. In short, your ambitions are too small, and so are your dreams. The solution? Help a mid-level executive in a company up the corporate ladder by helping realize his much bigger global conquest dreams instead. Who knows, maybe when he's the number one man at the helm in a few years, he'll remember you as the guy who really put him there and toss you a bone.

If at first you don't succeed, well... The best thing to remember is that you'll never get there on your own. You're not smart enough, or fast enough, or good looking enough, or rich enough, or well-connected enough. Nope, you need to work for someone else instead who is.

August 13th, 2009, 07:20 PM
...he'll remember you as the guy who really put him there and [sic ~hopefully] toss you a bone...

I see someone else joins our ranks here and "gets it" regarding entrepreneurship.

Also, it is not for the lazy, but it is for someone who feels compelled to be a mover in this world. The problem with it, morally, however, is that while we become movers in entrepreneurship, lest we not become the monsters for which we ourselves worked. As Nietzsche (http://en.wikipedia.org/wiki/Friedrich_nietzsche) once put it:

He who fights with monsters might take care lest he thereby become a monster. And if you gaze for long into an abyss, the abyss gazes also into you.

August 13th, 2009, 07:54 PM
I've had some down time. My wife had a relative pass away. I hardly knew him, but what I did know was that he was a humble and cheerful samaritan, and that the cause of his death was easily avoided, but happened out of ignorance. Ignorance, as you know, is not stupidity, but just the naive absence of knowledge. And by naive I mean innocent.

This troubled me a great deal and I have found it hard to wrestle with sleep in the past few days. The lesson here is to know your world around you better so that you have that much more a chance to help others and leave an even longer indelible mark in this world.

And it is this indelible mark that drove me into entrepreneurship. I did not want to be a follower -- I wanted to be a leader. I felt I had a unique voice to share.

However, in that downtime where I did not work and dealt with the funeral arrangements, work effortlessly landed in my inbox and collected there. In other words, if you work at being the best you can be, and get the word out, and build up enough clients, you might not even have to advertise eventually and you end up with repeat client work and work coming on its own through average social networking.

Isn't it remarkable the time we live in? There are thousands of people joining the Internet every month, and every one of them eventually realize they can have their own web page. They move from there into having their own sites dedicated to their philosophies. And a few venture further into their own business. Some move on to even businesses instead of a business. There is a steady cashflow stream there, and all you have to do as a freelancer is find the clever angle to reach your hand under that cashflow stream. But even at that, sometimes just being a warm body on the Internet with a 'for hire' sign out gets you hired.

My latest advice? Yeah, it's two syllables: Twi-tter.

September 9th, 2009, 07:54 AM
Okay, a status update. I'm afraid it's loose notes tonight.

* I've got 7 clients, and 3 are parked for 2 weeks out. So, it's been hectic. I didn't plan for it to all come in like this, but when you have 30 days of 100% marketing and social networking, and operating on $0, you may be surprised to see all your ships come in at once. And you may REALLY need that cash. In the freelance world, just like the world of a sales guy -- it's feast or famine. And when it's feast, it's often thin profit margins and too much work. Proceed with caution.

* Yes, I've come to realize since freelancing that I've got ADD. My wife's a schoolteacher around ADD kids, and she says I've got it too. The Internet kind of amplifies that, and then freelancing even more. I now stay away from Reddit.com because it was an evil time sucker. I guess I had to hit bottom with the over-exposure to Reddit.com before I finally realized enough was enough, that I had an addiction to it, and so now I actually treat it like I would walk along side a bottomless pit. I may visit, but I stay my distance and move on. Twitter also became the new Reddit replacement, and I had to say enough is enough of that as well. I still use Twitter a good bit, but only as an occasional marketing tool. It's been effective at that.

* If you ever have ADD, try taking on just 2 clients at once and no more. Then, open up two screens. On the left, do the work for one client. On the right, do the work for another. Or something like that. When you get bored with one client, just switch to the other, and then back again. So far, it's working.

* I've been getting sales leads via forums, people googling, and Twitter. These are all unexpected places. I haven't had to spend much on advertising lately. I've actually had to deflect 2 clients to partners because I was overloaded.

* I've learned to work more with offshore outsourcing and not think so negatively about it. Instead of letting them work with the whole "farm" for your client contract, let them work with "just the chicken coop", for instance. One thing that has worked well for me is that new clients ask me things I haven't yet learned, tied to things I have learned. For instance, they may ask, "Have you ever played with the VirtueMart plugin for Joomla?" Sure, Joomla, yes, but VirtueMart, no. So, that's the perfect thing to outsource. Get an offshore person at an affordable rate (thanks to currency differences) to build you a small demo. Do so with a specific set of requirements listed on about 2 pages, and keep the tasks very small. Then, once the demo comes back, re-integrate it again based on what you learned. It's a great way to use offshore outsourcing with far less risk, lower your rates and times a little, and increase profit as well.

* I think about 4 simultaneous clients is about enough to make you lose your mind. Anything beyond that and you really have no choice but to ask if they can wait 2 weeks or start deflecting to another third-party vendor. Anyway, when you get permission from your client to refer them to a third-party, try to pick up a 15% retainer if the client pays.

* Guys, freelance web development and design is really, really hard work to make everyone happy, keep costs low, meet deadlines, and yet pay your bills. Again, if you haven't gotten an idea off the ground for passive income while you freelance, don't even consider freelancing. Right now I'm struggling to think of the best passive income choice with the least risk for me.

* I have tried my hand at affiliate marketing, but ultimately have found it's not for me. I might write a few eBooks, though. However, as far as peddling other people's stuff for passive income, I don't enjoy it, don't do it well, and end up draining down cash on ad revenue. So, I think I'll come up with other passive income choices like drop shipping, or building a great subscription-type website, or writing eBooks.

November 9th, 2009, 07:10 PM
Some advice that has come in handy lately:

* This post on Reddit has huge significance, I'm sure you'll find:


It basically tells you that RAC is still a viable tool for freelancers, and that even though someone wants to hop in and charge 20% what your fees are, you still may get the gig.

* Don't know what it is, but it's raining clients right now. I hope you freelancers are seeing this too. I've got 11 proposals in my inbox now.

* If you need to build a web farm, consider a dedicated hosting plan and then put your web nodes on VPS plans. Start with 2 web nodes and one dedicated server. The central dedicated server has a dual purpose -- it loads haproxy (http://haproxy.1wt.eu/) (a great load balancer) and MySQL or PostgreSQL.

* I'm making a little bit of money on clients who choose to host with me. I use a hosting company that has served me well over the years. They like paying one invoice and not having to deal with the technicalities of web hosting, domain management, renewals, etc. It's not much trouble if you pick the right hosting plan. The trouble, however, is the domain migration process. It NEVER runs smoothly for me with GoDaddy, Network Solutions, or APlus.Net (my short list at least). So, if you charge a fee for hosting, such as $100 annually over cost, you should add another $100 for the grief you'll have from the domain migration process.

* Just because you get an inbox flooded with client proposals, never ever tell clients that you've got other client proposals that you're pouring through and will get back to them shortly. This has backfired for me in the past. I end up getting emails like, "Okay, well, looks like you're too busy. I'll keep your email on file and contact you when I get another project." And then they never do.

* Life for a freelancer really does get better when:

- Your portfolio looks better.
- You get a couple years under your belt and clients start to come back to you for repeat work.
- You not only do web development, but do a few computer tasks in towns (and nearby towns) for like $400 to $600 a season. It all adds up.
- You realize what works and stick with it, and shed what doesn't work.
- You learn how to work faster.
- You learn after enough testing what kinds of things clients like to hear in your initial sales pitches.

* I've found that I hate Drupal. I'm 10x slower in making a custom theme in Drupal than I am doing the equivalent in WordPress, even after doing a few. So, I've learned something about myself -- I won't take any OSCommerce, ZenCommerce, or Drupal tasks. And because of that, I don't waste my time and don't run into contract disputes over it.

* If you're a WP fan, then the Pods Plugin (http://pods.uproot.us/) should be something you check out.

November 9th, 2009, 07:27 PM
BTW, now is the time to be contacting your web hosting companies to ask them about how ready they are for IPv6. The dark horsemen of the Apocalypse are coming I'm afraid for the end of IPv4's reach. Those IP addresses are predicted to run out in either 2010 or 2011. If your web hosting provider isn't IPv6 ready, you better get them in gear or consider moving to one that is. I just contacted the President of my web hosting provider and he said, "Indeed this is a serious issue. However, we are ahead of our competitors in being ready for this from our hardware perspective, and have only a few small software changes to come soon. We will alert our customers when it is the appropriate time."

Now, as for costs going up -- I predict it will happen. I reason to bet that they'll have to raise rates on hosting because of it, at least for a few years. So save your nickels because I think you might need them.

November 10th, 2009, 05:03 PM
A small piece of advice from my wife to me recently...she and I both discussed and she made me realize it's true...

Honesty may not be the best policy in freelancing. And by that I definitely do not mean lying. I just mean that you don't have to write emails that show all your cards. For instance, you probably shouldn't say you are reviewing other client proposals while you are reviewing one particular client. Clients mistake that for you being too busy to work with them and they walk away. This has happened to me more than once.

As well, my wife says I mention too much in my emails, giving out details that are fascinating and interesting, but really may risk them considering me on a deal. In fact, my emails have created "close calls" that I had to go back and defend. So, I'm needing more and more to listen to my wife's opinion and keep those emails short and not transparent on my entire situation of multiple client work.


More advice:

* I have tried referrals for percentage payment, but they don't work. These are where you are too busy to take on a client, so you refer to a peer and ask for something like $50 once the client pays your peer freelancer. I've tried 8 of these with various clients and so far I haven't received a cent. A peer spoke to me about this and said that the best thing to do is direct referrals without payment, because it could come back to recriprocate, especially as you find out about each other's strengths. For instance, I may be strong somewhat on the Linux command line, while my peer may be strong with Drupal. So, he can farm some tasks off to me, and I can farm some tasks off with him.

November 11th, 2009, 08:41 AM
Had a clever idea for freelance passive income. It's called Venture Capital Broker. People give you $800 and a startup company proposal in a certain technical format, and one of 4 outcomes can come of it:

- you decline the proposal immediately and explain why in detail, and give them a 90% refund
- you decline the proposal but explain it's a good one, and suggest if they invest $50 and make some changes you will reconsider it again
- you try for 30 days to get any venture capital firm you can find, or multiple ones, to do a round of investment, collecting a $500 finder's fee for yourself if that goes through
- if you can't get investment in 30 days, you refund 50% back to the client but sweeten the deal with a video and/or book on online marketing or entrepreneurship

This gives you either $80, $400, or $1800 whether your client wins or loses investment.

Eventually you can re-invest profits in your business to become an angel investor yourself.

Of course, it really helps if you've already mingled previously with software attornies, venture capitalists, and done a couple startup companies yourself -- gaining the experience you need to become a venture capital broker. It's just that many startup guys I know who succeed ultimately become angel investors, themselves. And this is one way to break into angel investment soundly -- by starting as a venture capital broker.

November 25th, 2009, 09:07 PM
Got picked up by an agency lately. They just found me in the various forums I poke around in (under another alias) and they did some research on me before contacting me.

This will give me regular gigs. The deal is corp-to-corp, so it's sort of like doing my own gigs except I don't have to work so hard on sales/marketing. I'm entering it at a very high level role of this startup, so will be getting devs underneath me in the hierarchy eventually.

I'll still officially be my own LLC, and getting paid corp-to-corp 1099 Misc, but getting a regular paycheck.

This isn't going to be easy, mind you. Anyway, by doing this, I'll have free time I hope in the evenings and weekends to get those very critical passive income projects off the ground.

The agency has good financial backing, so they intend on paying for me a couple flights to customer sites for negotiations and requirements collecting every once in awhile, as well as sending me a really neat multiline voice over IP phone I just plug into my Internet. This is going to be sweet!

Today was just a day to get acclimated -- meeting team members, getting logins, checking out the CRM tool and some projects I'll be working on, etc.

I'll still be doing PHP work, which I enjoy, but eventually they'll move me into a more senior responsibility of managing devs and working on timelines, project management, functional spec writing. They need a coder with trench experience for this.

The agency focuses mostly on CRE Loaded and osCommerce stuff. I really prefer Magento, but this agency and I both admitted that Magento slows down once you get a lot of records into it, whereas osCommerce, and its commercial offshoot, CRE Loaded, don't have this issue. Patching on osCommerce was something I didn't like doing, but the other main dev there said he'll show me the ropes with osCommerce and then eventually we'll get other guys to handle the tasks and manage them.

They also have focused more on Joomla, but now that they know I know WordPress as a CMS and custom theming they will be pulling me for migrating their sites to WP as a CMS in the future.

So, I'll let you know how this goes. Might work out, might not. Most of all, let's see how that paycheck works out, right?

November 30th, 2009, 09:26 PM
This agency job firebombed pretty bad. I get in there and this is what I see:

- No one downloads the code. They rightclick files in FTP clients and edit them!

- They only pay for actual click-click-click coding, not for time spent downloading, uploading, understanding things, reading, asking questions, researching, etc. Everything must be billable. There are no charge numbers to charge your hours to for learning the ropes.

- They base too much of their business on CRE Loaded, and it's a clusterF. It's a fork of osCommerce. Gorillas must have written that code -- rank amateurs. There's almost no rhyme or reason, hardly any structure in it. It's like the kind of code you'd expect out of the 1990s with PHP mixed with HTML mixed with SQL.

- They lied about their revenue numbers.

- They treat developers very badly. There's no such thing as a newhire doc when you get there. You have to ask questions for logins, what the URLs are for things, who managed the project last, whether I can be given emails to interact with the client directly and what we can/cannot say -- nothing like that. It's like simultaneously being blindfolded in the dark all the while they treat you like an ant under a hot magnifying glass.

- They were firm at first on paying me, but then it broke down into being wishy-washy in discussion, making me completely nervous that I would do $5000 worth of work in a month and get paid like $1000. No thanks -- they can keep it.

- About 50% of their work request tickets made like no sense whatsoever, and no one was answering my questions about them.

So, I gladly pulled out my resignation before this turned into a quagmire. And I'm back doing freelancing again. I gave them a detailed resignation about why I was upset and what they need to do to fix their company.

P.S. They tried to call me today. I won't answer the phone. They can stuff it. Why would I pick up the phone to get chewed out by morons?

December 2nd, 2009, 09:55 AM
Wow. That sounds absolutely terrible. I'm glad you got out of that one...

If you decide to answer or they leave any messages, I'd be very interested in hearing what they have to say.

January 28th, 2010, 06:13 PM
Dealing with the PHP MVC Frameworks

I read something interesting in a forum about a new approach to doing PHP coding, and I thought it was clever. You might be able to apply it to your own programming language if you use something else.

Here's the deal...PHP has several MVC frameworks, and MVC is actually a simple concept that frameworks go and make harder than they need to do. I mean, you break up your code into model, view, and controller. So, this means you take your XHTML and stuff it into the view folder in an organized way, and of course that means also putting your Javascript/jQuery and CSS in that folder too and call it from your XHTML. I usually use PHP Alternative Syntax inside the XHTML for inserting vars. Then, you take the core "meat" functions of your system that you're building, including most of your database programming logic, and stuff into your model folder in an organized way as a series of classes. Last, everything else is the input and output and workflow code that links the whole shebang together, and that goes into your controllers folder in an organized way. The whole thing is kicked off by a fancy pants front controller that in some cases you may not even have to edit (depending on framework) and which basically funnels everything through index.php, where it is parsed, and then this calls (via include) your page controller code that kicks the whole thing off on a given task. So this gives you pretty URLs from that front controller and page controller arrangement. And the whole thing is not really hard if you stopped there.

But then most PHP MVC frameworks go further and make the whole thing hard. Some make you have to edit the front controller to get the URLs you want, which is stupid because wouldn't you like to have that already done for you based on how you structured your folders or your classes? Some make you call up several of the PHP MVC classes just to do what you need.

However, here's another key point, and my main point -- there is this assumption going around that you need to know as much as possible about a given PHP MVC framework in order to use it, and that you should only use its classes and methods to do everything you need. And I tell you, guys, that's a wrong assumption in my book, and I think you'll be surprised to find out why. I share the opinion of another developer who thought this up and posted in another forum that by following *all* the components of every PHP MVC framework, you create "vendor lock-in", and it means your PHP code is less portable from framework to framework.

You see, another PHP MVC framework is created every two weeks for some reason. You can't possibly learn them all. And you can't possibly learn even the top 10 of these frameworks so well that you could pass an exam on them. But unfortunately as a freelancer, you have to float around from project to project, and so you may be asked to know many of these extremely well if you want to keep putting food in your mouth, literally. So, here's what he said one should learn about any given PHP MVC framework:

1. How to do pretty URLs with the least amount of fuss.
2. How to load a model that returns a single text string.
3. How to create a page template that uses PHP Alternative Syntax and inject it with a constant variable.
4. How to hook the bootstrap so that it loads a few of my very small goodies for common things I typically use on projects.
5. How to find the base URL.

If you can study the top 10 PHP MVC frameworks based on Google Trends, surveys, and what you read in job/project requests, and learn these 5 things, then you are now in a position where you can use these frameworks rapidly. Clients will still get their models, controllers, and their views -- you won't be doing spaghetti code. But by purposely *not* learning the rest of a given PHP MVC frameworks way of doing things, you are making portable code that you can take from project to project, framework to framework.

This means that you'll actually be interfacing directly with things like $_POST, $_GET, $_SERVER, $_FILE, $_COOKIE, and $_SESSION rather than going through a framework for those. I mean, to give you an example, I've had situations with the Zend Framework where I had several "can't get there from here" scenarios in the framework to do a given task, and found that going straight to one of those global arrays in PHP got me to the heart of the matter.

And it means you'll be accessing the database through normal PHP API, although I strongly recommend you use PDO from here on out because it is well-designed, reliable, fast, and can block a lot of SQL injection stuff if you use it properly for parameter insertion into SQL.

Oh, and here's another perk -- other developers who come to join a project will look at your code and immediately be acclimated to it because you're barely using the PHP MVC framework for anything else except those 5 components, and everything else is just straight PHP.

This is especially true for newbies who come to help you on a project, who are new to a given PHP MVC framework but do know PHP at least. With a 30 minute pep-talk with these new devs, you can help them understand how the PHP MVC framework is used minimally, and why this is done, and can move on.

This is not to say that you shouldn't use the rest of the PHP MVC framework's components for a learning/tutorial perspective. No, you should. For instance, if you want to have a user upload an image and have it resized into portrait, landscape, or square, well -- your PHP MVC framework may already have a routine for that. So, learn how they do it, and re-implement this in a custom model class. Just don't use the PHP MVC framework's proprietary APIs for that -- stick with PHP.

So here's what I suggest for your freelancer dev survival in the industry. Make a decision on whether you like this approach or not. It's a controversial one and I would imagine this strategy isn't for everyone. Then, make a decision on what you think are the top 10 PHP MVC frameworks. Download and install these ten, from most popular to least popular. At a minimum, learn these 5 things I have listed here about them. Everything else you need is either in PHP's core library of functions, in PDO, in PHP Alternative Syntax, or can be learned from a tutorial perspective from the underlying framework components themselves. You can then write portable code that even newbie PHP developers will be able to grasp and use right away.

But again, this is about PHP, but doesn't need to be. The same thing may apply to your favorite programming language, too.

January 28th, 2010, 06:24 PM
No Javascript?
The other day I actually encountered a PHP developer who refused to learn how to do cross-platform XHTML/CSS, and refused to learn Javascript. He said, "I remain strictly a PHP developer." This baffled me why he would want to remain so closed-minded, especially in the days where jQuery is here to make Javascript a snap, and where IE6 is almost gone and many developers have published the tricks of the trade so that anyone can now do cross-platform XHTML/CSS if they learn these few small rules.

Here's the deal. He needed to build a treeview component on a page for selecting categories. Trouble is, the way he had it, with every click, he had to do a full page refresh (full server round trip), which meant redrawing the tree but now with the child nodes expanded or collapsed based on what click was made. Plus, since it was on a form in progress by a customer, it meant refilling out all those fields again, including those radio buttons, checkboxes, and select boxes, which can be tricky to fill out properly again.

So I showed him that you could do this in just a few lines of code using jQuery and jQuery's AJAX, and without a jQuery plugin (which he wouldn't understand how to tweak). Then, I mated this to just a few lines of PHP code. And voila -- I had an expanding/collapsing treeview component for his page for selecting categories.

Because of his closed-mindedness, he prolonged his project time longer than it needed to be, created slow pages because of all these server round trips with practically every click, and was literally driving himself nuts with frustration. If he had taken just a couple weeks to learn how to make cross-platform XHTML/CSS, as well as how to do jQuery and a few things in Javascript, it would have saved him a lot of grief and saved him a lot of cash.

February 3rd, 2010, 09:47 PM
Today I just ended a relationship with a wacky client out of NYC. He kept going on and on for a few weeks with me in an email about how he appreciated my opinions of his project, had angel investment coming for his startup, yada yada yada. So, dummy me, I fell for it and did some projects with him. However, most of my clients up until that point paid me on this simple payment plan:

- 20% up front, and a cap on that of $2000, if $900 or more
- payment every 2 weeks or every $2500, whichever come first
- 15 day warranty and then after that I must charge for anything else requested, including bug fixes

In fact, most clients up until that point already had a budget in hand before they hired me, rather than having to come up with the cash afterwards.

But not this guy. No, he had to pay me sometimes on Net 30, sometimes Net 60 or Net 90. He didn't have the cash up front and would tell me something like, "I have to go out and get it."

His previous projects were built using offshore coders who basically blended .NET and PHP together to make complete spaghetti code. He even suckered small investors to buy shares into this lousy company that wasn't going anywhere fast. He also claimed he had a software patent over something that obviously was not patentable, and then when the patent thing fell through he said, "We're going to regroup and see where we stand, and then go after this again." (BTW, I completely abhor software patents.)

Between us, we did about $3225 in work together, but he put me through tremendous grief for it. If I had expended as much energy as I spent with him on a small set of clients, I would have had $15,000 in my pocket right now instead of $3225.

So, yesterday was the straw that broke the camel's back. He said he wanted me to work with him again, that he was about down to $0 on money owed to me, and was promising some *HUGE* project of which I'm sure would go out with a whimper. Instead, I responded with, "I'm sorry, but I'll have to see. Your track record has not been that good." But then about 6 hours later, he wrote me and said I offended him by that statement. So, I clarified that he was a huckster of a client and asked him, "Why would I work with you on a Net 30, Net 60, or Net 90 when all my other clients pay me 20% up front and then incrementals, and already have cash in hand before using me?"

But then he went ape on me this morning -- calling my two voicemails, leaving me 4 nastygram emails, using cusswords and calling me un-Christian, unfriendly, and unprofessional. He even said, "I was working with my management to get you put on retainer, and now you've blown it."

So, I emailed him back today and used the jet flare approach to offload him. When a jet is being chased by an enemy, they offload hot flares so that missiles that follow it will instead chase those flares. Since this guy owed me $225 more, I told him that this is an official statement that he owes me $0 now, free and clear, and that I do not wish to receive communication from him again. So, he can stew over that, or enjoy the fact that he doesn't owe me $225. This method has usually worked for me in the past in ending grief with a client.

But I'm still upset. I do not like being called these things that are not true. I was completely honest with the client and he cannot accept his own realities. He needs a reality check like really bad.

I will say this, however. I'm glad this is my own business and that I don't work through someone else. It's a lot easier for me to hang up on a bad client when I own the company than when I don't own the company.

In the end, this is what it's like to be a small business owner. Those who don't like these experiences at all shouldn't attempt this.

And after all, I have something to be very happy about. I have other clients who are extremely happy with my work, who have referred me to several others, and now have so much work that I could probably spent the next 6 months straight just raking in the dough, perhaps even as much as a year, without having to advertise.

February 18th, 2010, 10:05 PM
Well, it finally has happened for me. I got picked up by some affiliate marketers to work on a corp-to-corp subcontractor indefinite retainer for a nice sum each month, plus commission on some of the tools and projects we roll out. That's indefinite, as in a year or more of work. As well, what I'm learning will help me in my own affiliate marketing projects, and will also give me the free time to build projects I've been wanting to do.

It's wonderful how this has all come together. I like the clients and have a proven track record with them. They like me. I set my hours and timeline (within reason). No middle manager loser to contend with. No cubicle to sit in. In fact, I may even install one of these realistic, new faux electric fireplaces up here in my office and add a couch to make my home office a really swell place to work. I already have a tremendous view of the woods through a huge window.

It's been a rocky road, but hard work has definitely paid off. And here's the neat thing -- even if this doesn't pan out in 6 months and they let me go -- I'll still pay down debt, learn a lot, get some of my own projects off the ground, and I have the skills anyway to go it alone again if I have to do so. So, I win nomatter which way this succeeds or fails.

Viva la freelancing.

February 18th, 2010, 10:40 PM
You really should apply your forum time to writing a book. This is pretty good stuff, assuming you can back it up with success.

February 20th, 2010, 11:59 PM
Yes, I've been planning that for awhile. I needed to get it under a different company name than my own so as not to upset my current clientele, and use a pseudonym. Just today I found who to partner up with -- an affiliate marketer out of San Francisco who will split the profits 50/50 with me, use her company name, and do all the work of marketing it. I just need to write it. She and I have worked out a level of trust over the past few months, and she is very interested to do this project as well as a couple others with me. I am better suited to creating things, and she's better suited at marketing them.

February 25th, 2010, 06:03 AM
Tax Time

Well, it was tax season again, and I was in for a shock. First, I knew 2009 was a bad year, but I had no idea it was far worse than my 2008 year because, well, I wasn't keeping track. I mean, I didn't want to keep track. Keeping track of how much I had earned in 2009 would have gotten me depressed because of how bad the economy was. Instead, I was all about sales, sales, sales, and then code, code, code. Sure, I generated invoices, but I never tallied it all up. I just hit the keyboard for the next client.

The bad news was that in 2009 I made a shocking 1/3rd of what I earned in 2008 as a freelancer. But the good news is two-fold. For one, I got through that year and actually just worked hard on the budget and got bills paid down. For two, I got a tremendous return back this time -- twice as much as my tax return back in 2008. It's $6500 USD. And this was validated by a CPA. I guess being in a lower tax bracket actually helped me in this economy, rather than hurt me.

But now that I'm on retainer, and the paychecks are $1000 USD more per month than what I earned in 2007, I'll be doing awesome. My wife estimates that if we keep on this trajectory, by October we will have paid everything down such that all I need to do is come up with $600 USD every month. So, anything above that will be able to be paid towards other bills. We just might pay off a vehicle early or something.

Meanwhile, the affiliate marketing stuff I'm learning, and soon will be applying, will pay off I hope in 2010.

But anyway, let this be a lesson to you aspiring freelancers. It ain't easy, buddy. Be prepared in a bad economy to earn 1/3rd less than what you earn on a fantastic year. And pay down debts such that your spouse can pay for almost all the bills except for $1000 USD. This is because it's relatively easy to generate $1000 USD per month in freelancing, although for me $4000 USD per month is a personal target. And remember, those are corp-to-corp rates, and I face a lesser tax burden as a self-employed person than a W2 employee because I have far more deductions I can write off. So, instead of taking out 35% of my paycheck for the tax man, I can take out anywhere from 10% to 20%.

February 25th, 2010, 07:07 AM
Being on Freelancer Retainer -- The Importance of Project Management
Being on retainer is no easy task. I got burned on this twice before, so I've gotten better at this on the third time around, at least I think. When you're on retainer, the client really wants to see results like every other day. Of course you don't want to spam the user by email, so you bring an online project management tool online to show professionalism, and to be able to go back in time and explain what happened on a particular day, such as setbacks, etc.

I used to like ActiveCollab, but then it got too darned expensive. I tried Basecamp for awhile and liked it a lot, but unfortunately you can't download the source and take it in new directions like you can with AC. The solution for me was to switch to ProjectPier. However, what a lot of devs don't know is that ProjectPier has had a lot of bugs knocked out recently, making it fairly stable, and also comes with new themes that really make it a decent system if you switch to those themes. ProjectPier is the thing of which AC was forked off of eventually.

I liked the combo of ProjectPier, osTicket, DropBox, and Skype. The only thing missing is a F/OSS invoice system made for LAMP, which I'm still evaluating and looking for.