- you have to understand people that dont know how to explain their necessities.
- you have to imagine what clients really need.
- you have to deal with people who think they know how to do something because they read it in a blog / saw it at a conference / a friend told them.
- you should try not to hurt (their) feelings.
- you have to be flexible.
- you have to integrate code / modules / libraries that are not written by you, but you have tu trust them as if they were.
- you constantly need to learn the ultimate technologies.
- you have to deal with problems arising during development within the same deadline (or release crap).
- you should quit finger-pointing!
- you have to focus on really important things (for whom? the client, your boss, the team, the contractor).
- you have to be willing to share your knowledge and teach people.
- you have to surround yourself with people who know more than you.
- you have to be humble but not stupid.
- you have to be intelligent in discussions (they are good).
- you have to predict how the product will evolve and reflect that in your code (have told you we are magicians?).
- you have to predict how much time you need to learn a specific technology.
- you have to accept bugs, and deal with them.
- you have to accept your mistakes, and deal with them.
- you have to understand that programming languages are not girlfriends, so don't marry one.
- you are part of a team, so ask for advice & help.
- you have to be humble (yes, twice).
- you should realize you are a nerd; deal with that too.
- you should be proactive, not reactive.
- you have to measure everything (backend, middleware, frontend, network), even though you didn't do it.
- you should know that there are times to be creative and times to be effective - creative efficiency is not the same that Efficient creativity.
- you have to keep yourself motivated.
- you have to estimate stuff that you dont know how to do.
- you have to keep your eyes in the goal.
30. you have to kick ass.
thanks to @yo_gero