When you're a freelance web developer, it can sometimes be tempting to go full-on with a client and give them a detailed plan of their project with your costs - then not charge them anything for your efforts.
Here's why I think this is a bad idea and what I think you should do to protect your time investment in thinking through someones business idea - before you hand over your knowledge.
During my time in the web industry I've seen the question about what makes someone a bad programmer mentioned quite a few times so I thought I'd publish my own thoughts on the matter.
Personally I don't think it's anything to do with programming or inate technical ability per-se, but more of a persons general attitude towards work, towards peers and towards the overall goal of the organisation they work for.
I can hold my hands up and say that I was a bad programmer for the first half of my career and it's one of my biggest regrets. It's not that I was bad at the work - I'm good at coming up with technical solutions - but my attitude was poor, I had bad timekeeping, my personality left something to be desired and I generally preferred to be left alone to do my work instead of being "bothered" by colleagues. All toxic components, especially if you work, as I did, in a dynamic envronment such as a website design agency, where communication and teamwork really is key.
The thing is, quite a few programmers including myself tend to be introverted (especially in their late teens and early twenties) and even if they do have 'people skills' they generally prefer not to use them because they prefer to be left alone. It's a comfort-zone thing, or at least in my case it was. Unfortunately you can't really get away with this in a workplace and while you may not see it as a problem, sometimes this behaviour comes across as arrogance, aloofness or, worse, rudeness towards work colleagues.
The only clue to these issues might be the moment you are pulled into a disciplinary meeting or, worse, actually get fired, and by then the damage tends to have been done.
Sadly, I have experience of both scenarios and absolutely regret not working better with a number of colleagues who I might actually have learned a lot from had I noticed the opportunities they presented me at the time, instead of me falsely assuming that I knew it all (ah, the curse of a young developer :) ) and being completely dismissive of them.
Fortunately as time has gone on, my confidence, outlook and attitude have improved immeasurably. I'm much more personable, have a positive attitude towards work, colleagues and clients and this has reflected itself in both the quality of my work output and the clients I am fortunate enough to work with.
These days, I want to shake programmers I see who have so much potential given their technical brilliance, but who are trudging along the same self-destructive path I once took by coming across as aloof or arrogant and putting themselves on their own meaningless elitist pedestal.
It's a crying shame that sometimes people don't see what they're doing until damage is done and they have blighted their career, because it's extremely difficult to put it right. There are only so many burnt bridges that you can rebuild.
So, I think that the most important qualities a programmer can have, with much more importance being placed on this than raw technical ability, is being personable, friendly and open to learning.
These simple qualities open up many avenues with clients and colleagues which, in turn, open up further potential work opportunities - and since most programmers are tech-savvy to start with, career success then becomes almost a given.
At the very least you'll be someone who people actually want to work with - and that's never a bad thing.