Being a newbie in my self-employed phase of my life I was asking myself: do I want to specialize in specific areas (e.g. be a expert in the development of HTML5 based web UIs) or is it better to stay on a general ground, pursuing all kinds of opportunities?
To be clear: the following ideas are focused around being a freelancer.
The pros and cons are quite obvious:
The generalist - has his fingers in (too?) many pies
- You can find more opportunities if you don’t restrict yourself in niches
- Job variation feeds your geeky inner self that wants to learn something new all the time
- No need to worry if some technologies/frameworks/languages etc vanish - you have plenty other
- Its difficult for you to master areas in a way to efficiently solve client needs (you don’t want to spend days in learning a new product if you have a fix price project
- There is so many products/frameworks/etc that come out each week that its hard to predict which will prevail. Being a generalist you wont have time to analyze new stuff deep enough to judge its future
- Hourly rates are lower since you have a lot competition because the required skills of your projects are more easily to gather
The specialist - call him, if you want a problem solved quickly
- You have deep knowledge in a specialized area, you can solve client problems quickly
- You can better judge the future development in your area
- Its easy for you to get good reputation since you will get known for your unbelievable skills . You can write blogposts, articles in newspapers etc
- Since you are a specialist, you can negotiate higher hourly rates
- If you niche is going down (new better product/framework/technology) you suffer
- Since you ARE known for your speciality it might be difficult to get other projects outside your area
- You will have projects that might mean "more of the same" for you and you will get bored
And if you want to be both you are neither-nor and stuck in the middle. So, what to do? How does these pros and cons help me?
Now you might think: nothing new so far, I knew this already!
I think the future lies in a clear "neither nor!" but to make my argument a bit more clear its history time:
The Singular Specialist
In the past it was a challenge to reach the level of a specialist through steady improving your knowledge in one area. It took years but you could leverage these skills also for many more years.
In the early days of the .net framework around 2001/2002 it was quite a hurdle to learn the new language/CLR. But after you have managed this, you could concentrate on solving problems and leveraging your skills.
I expect the future to be different:
The parallel specialist
You have to be able to learn quickly to reach a certain level of any area and progress to the next fast. This will eventually lead to the fact that you will have 2, 3 or more "Specialist areas" concurrently - but none of them in the depth you could reach when only focusing on one area.
Don’t get me wrong: there will still be niches, where super specialism is still required and you might work in an area where this is required. I would be really uneasy if I had to cross a bridge that was constructed by a newbie that is only 6 months into Architecture ;)
More and more stuff emerged in the .NET stack that wasn’t provided by Microsoft and nowadays even Microsoft offers many different ways to solve a single problem - e.g. for accessing a database you can use classic ado.net, linq2sql, EF in many different versions including code first. And I am not even talking about other frameworks like nhibernate, lightspeed, llblgen pro, openaccess etc … and why a relational DB - why not use document oriented dbs, graph dbs, key/value stores (including eventually consistence), object dbs, column-oriented dbs etc etc what about open source versions? Buy a product?
IBM started to invent the term T-shaped professional (http://en.wikipedia.org/wiki/T-shaped_skills) for this. Though I think the definition will change in the next years: its not only the T-shaped profile that’s needed but the ability to dig into a new area deeply in a short period of time.
Meta-skills that make you future proof
To be able to learn new skills quickly, you need some meta-skills that help you achieve this. 2013+ will require us to be able to change - its required that you re-invent yourself and your expertise.
So be ready to:
- Be able to build up a network that enables you to have people at hand that are more proficient in certain areas than you are and can help out
- Be able to communicate effectively/efficiently
- Learn how to acquire new skills, learn how to learn
- Back to basics - learn concepts, not implementation details of framework X
- Embrace change, try to predict its direction
- Be able to work remotely (which by itself requires a lot of skills - see e.g. (http://www.hanselman.com/blog/BeingARemoteWorkerSucksLongLiveTheRemoteWorker.aspx)
How can you achieve these meta-skills?
Why is there a "…" at the end? Gimme all! This is worth another blog post ;)
Dear reader: what's your opinion on this one? Do you have any experience from the last years in one or the other direction? I would love to hear from you!