There are many web developers out there, and they have very different qualities: Some are extremely talented, and have a strong sense of problem solving, others are more passionate, and can ponder over an issue for hours without getting fatigue.
While these sort of assets are great, there are a few qualities unrelated to programming that every developer should have but are often disregarded due to a lack of either care, experience or circumspection.
Having been in both position, the developer and the the client, I have been able to understand and would like to share why some of them are so essential to build good relationships in your team and with your clients.
It's hard to recall a project where I didn't have to deal with unforeseen delays, unexpected technical problems or conceptual misunderstandings.
Whether it's the fault of the developer or the client (which in the end shouldn't make any difference), you have two choices: Remain silent and hope that the problem will fade away unnoticed, or communicate it to your team members or client to establish an open atmosphere of problem solving.
Failure is human, and admitting mistakes or misunderstandings is important to avoid conflictive relationships. While your perception may be that you are annoying people with your concerns, the opposite is usually the case: People are grateful and supportive, plus when you involve them in the process you avoid an atmosphere where each team member tries to enforce their own ideas and impose blame on others.
Deliver on time
Did someone ever owe you money and you had to run after that person in order to give it back to you?
After that happened, did you have the same amount of trust when this person wanted to borrow money from you again?
In teams, or client-developer relationships, the same happens on a different level. There are people who have a business to run, and they trust in your expertise and estimations. Their success depends at least partly on your results.
If you fail to deliver on time and don't keep up with your promises, you're gonna lose your hard earned trust which is extremely difficult to re-establish. (See the borrowing friend)
On the opposite side, gaining trust and not abusing it can lead to greater flexibility and stability for your job.
Don't resist every change
Developers hate change requests. The trouble is that the client also hates you back when you make a fuss about every single modification.
In the end, projects are dynamic and requirements change over time. We should get used to it, and plan ahead by including some extra buffer in our budgets which allows for a more flexible scope during development.
You might also want to go for a more flexible development process: Start with abstract prototypes and refine the client's ideas during the process. This allows you to prevent major conceptual mistakes from the very beginning, and help build your product based on actual user interface instead of mockups and static layouts that are filled with assumptions.
Ensure cross-browser compatibility
There is nothing that degrades your developer skills as much as buggy browsers. (or ignoring to specify which ones you are going to support)
The most common scenario is probably when the client or one of his customers opens your shiny new website in Internet Explorer 8 and... "BOOM". All your nifty CSS3 animations, rounded corners and responsive wizardry have been flushed down the toilet.
Yes, they are running a crappy browser, but that's the reality. You have developed your experience on a fancy Macbook with Retina display, but when the page is exposed to the wild and nasty browser landscape out there, it gets blown up.
That's why before the project starts, I would recommend to precisely define the targeted environments and browsers, and optimize for what the project specification doesn't explicitly exclude. Otherwise, you'll end up relying on vague expectations and start inventing poor excuses.
It's clear that most people don't want to work more than they are asked to. Time is valuable and so is our life outside of the office.
However, if you want to set yourself apart from the competition, prepare a little extra bonbon at the end of the project. This could be something like a little CSS3 trickery, a feature that you wanted to charge more money for, or simply finishing the whole thing a week earlier.
As long as all the core feature are in place, and you'll have a little surprise prepared, the client will keep you in good memory.
If you are an employer, it's not always easy to find all these skills combined in one person, and as a developer it is quite difficult to maintain a high level of professionalism when you are extremely busy and have a fully packed agenda.
These guidelines are based on the experiences I have made as a web developer and technical project lead during the last couple of years and should give you an idea where there is room for improvement. I still consider myself to be at the beginning of a long journey and want to learn more everday.
If you want to share your own experiences, feel free to do so in the comments.
Thanks for reading and have a successful day!