Очевидно, что работа с кодом. Причем, не только выполнение задач, но и умение их ставить самому себе. Как крупные - по структуре, так и мелкие - конкретные. В фирме конкретные задачи джуну будут ставить сеньоры и иже с ними, а заказчик фрилансера может ставить только "задачи результата", т.е. то, что он хочет видеть в итоге (замечательно, если он свои желания понимает сразу...).
Соответственно, программисту придется стать "самому себе аналитиком" - то есть, самому для своей работы придется "переводить" пожелания заказчика в ТЗ, в четкие задачи.
И, что естественно, надо уметь коммуницировать с людьми (одна из причин, почему не все программисты, даже опытные, хотят идти во фрилансеры).
- Нужно понимать, что имеет ввиду другой человек в принципе.
- Нужно уметь излагать свои мысли, чтоб их понял другой человек (в том числе, мысли по проекту - заказчик не обязан разбираться в коде, понимать про классы и методы... ему нужен конкретный работающий результат - сайт, приложение и т.п.).
- Нужно уметь сглаживать острые углы при конфликтах.
- Так же, при необходимости, нужно уметь настаивать на своем - где это адекватно, например, в технических вопросах, или в вопросах оплаты.
- Если заказчик - иностранец, то это задача со звездочкой - потому что нужно уметь делать все то же самое, но на другом (вероятней всего, английском) языке.
Так же фрилансер сам решает возникающие технические сложности.
Самый главный камень преткновения в фриланс-разработке - умение принимать взвешенные решения и брать на себя за них ответственность.
Желаю удачи в разработке, если возникнут вопросы, обращайтесь
psy-programmer@yandex.ru