Software Teams vs. Superheroes: Why the Solo Developer is Dead
Filed Under Human FactorsThis is a reader guest post by Jason Gibb. Jason is a Systems Architect and Development Manager at Sundog, where he helps his team and clients implement agile methodologies for online software projects.
Comic book fans may recall a Marvel character named Multiple Man, who has the ability to create exact duplicates of himself at will. Or if you’re a DC fan, perhaps you’ve heard of Triplicate Girl? Most software developers have probably heard their manager say to them, “If only we could clone you…“ (If you haven’t heard this at least once in your career, you might want to step it up a little 😉
Software development used to be largely a solo activity — one cowboy coder working in isolation creating the next cool thing. A decade or more ago, all a cowboy needed was a text editor, a compiler, a debugger, knowledge of a single programming language and a few code libraries. Toss in some l33t design sk1lz and you had a complete, one-man software shop.
Now, in the face of modern software development methodologies, the concept of solo developers seems antiquated, almost laughable. Let’s see what our cowboy would have to know to build software these days:
- Mastery of an IDE
- DBMS installation and administration
- Various flavors of SQL
- Multiple compiled and scripting languages
- XML configuration files
- MVC frameworks
- O/R mapping tools
- Unit testing harnesses
- Source code repositories
- Bug tracking tools
- Continuous integration servers
- Software packaging and deployment
- Development methodologies
- Countless open source and commercial libraries, plug-ins, and extensions
Oh, you want to do Web development too? Well then don’t about forget these:
- Application server installation and configuration
- HTTP and SSL
- DNS
- X/HTML (with multiple DTDs)
- CSS 1 and 2 (and eventually 3)
- DOM
- JavaScript
- Ajax
- Script.aculo.us, Gears, Dojo, YUI, etc.
- Flash, Flex, AIR (maybe Silverlight too?)
- SOAP and REST
- RSS and Atom
- Web Analytics
- SEO and SEM
- Security
- Usability and User Experience
With all this, it’s no wonder managers want to clone their developers. No one person could ever possibly hope to master all of these systems, technologies, and skills. The result? The era of the cowboy is ancient history.
Such a proliferation of development technologies has fostered an amazing degree of specialization in the industry today, and there is no end in sight. For today’s modern software, it takes a well-coordinated team of highly skilled, highly specialized engineers, designers, architects, database administrators, build managers, and Web professionals to create the next cool thing.
Until someone builds that cloning machine (or we see more comic book superheroes on Monster.com), there will only be one effective approach to software development: a team approach.
33 Responses to “Software Teams vs. Superheroes: Why the Solo Developer is Dead”
[…] more here […]
[…] post by Max Pool Share and Enjoy: These icons link to social bookmarking sites where readers can share and […]
I agree in principal, but I do think that while no-one could possibly know all of these technologies in enough detail to really pull it off well, there are many out there who think they know enough, and make mistakes as a result. Humility isn’t something you often see in a developer, and we’re so often in the mindset that a quick Google search will make us experts at anything that we’re in danger of overloading.
Or is that just me? 🙂
[…] here for full […]
There is enough work for everybody to go around.
There are small projects that require a lone ranger and there are a lot of very bright engineers which are well versed in the listed technologies and disciplines.
For bigger scale projects, you need people that are cross-functional, maybe not knowing it all, but ready to learn any discipline or skill necessary to complete the job. Isn’t this the essence of being agile?
I would also add two non-technical skills which any developer should have: Personal independence and discipline. Specially, in a team environment where personal independence leads to the interdependence needed to create synergy.
Although specialization is for insects, with the rapid pace of new technology the days of ‘Jack of all trades, master of none’ are dead.
It is hard enough to keep pace within the .NET sphere, let alone Java, PHP, Ruby, and C++ arenas.
Dang, if we could only clone Max and get more great blog posts like this, that would be awesome.
You forgot to mention what happens to the company when the cowboy says, “Happy Trails!” and moves on to another gig…
The funny thing is that when you look at a lot of job advertisements, some companies seem to hire only those cowboys that master all possible technologies…
@Lee –
Seem to hire, and actually do hire are two different things 😉
Once I applied for a job that was requesting:
– MCSD
– MS in Computer Science
– 5+ years of .NET (and it was only 4 years old)
The company fell out of their chairs when they learned that I met all of the criteria (and that I was asking a salary which matched as well).
Long story short, they realized they didn’t need that and hired a college intern.
I find it comical when companies post jobs asking for everything under the sun because either they will hire liars or scare away good people that feel under qualified.
[…] 28th, 2007 by Jim Jason Gibb writes an interesting piece about the decline of solo software developers (referred to as a superhero or cowboy) [via Arjan’s World]. Instead, he claims that there are […]
I completely disagree with this post. If you really sit and consider the evolution of the technologies and methodologies utilized in our field, developers are *spoiled* compared to the days of past. Remember having to hand code sound mixing routines or complete rendering libraries to get your magical perspective-corrected, linear interpolated, phong highlighted 3d engine? The natural evolution of our field has changed the context of the challenges we face.
The skill set presented doesn’t look very daunting. A dedicated developer could start from a very meager background and with dedicating a few hours a day for a 2-3 years could get some serious experience in all the fields listed. While you’d have to be a recluse to be an *expert* at all of them; greatness hardly requires that, only strength of vision.
My dirty little secret is that I want to know as much as possible and become an “expert” on every technology, knowing full well that’s impossible. The point I was trying to make is that ultimately you have to choose one path: broad and shallow jack of all trades or narrow and deep specialist. Those who claim to be both broad and deep are either lying or deceiving themselves, IMHO. Then again, maybe there are some who are that good, but how would an employer know the difference?
@Jason Gibb
I fully agree that broad and deep is a very rare trait to possess and even more difficult to find in others. It would be extremely hard to validate without an equally broad and deep examination.
I’m a bit puzzled at your summary of the post though. You said “Software development **used to be** largely a solo activity” and “the concept of solo developers seems **antiquated, almost laughable**” with your primary arguments being the list of modern day methods and technologies.
This is where I wholeheartedly disagree. The premise of my objection is that developers are no more or less challenged then they were prior since the weight of the complexities throughout time have shifted focus. We no longer have to dink around with low level code and as such we’re able to focus on more modern day developmental issues like you listed. So my summary is… developmental complexity overall through time has stayed a relative constant. The modern day solo developer is very much still alive!
I think that technology is not as broad as it used to be maybe some are overwhelmed. I believe there is a balance but a programmer shoudl know ALL of those areas at least with some experience to be able to udnerstand and work as a team. If you look at most successful products and open source kits today, they are one or two developers that do 90% of the work and all of those skills from design to maintenance. It might be easy to not learn them but they you’d be shorting your true solution capability. Like learning another platform or broader software architecture so that you understand your own specialization at that time or chosen for the long run. I think that technology and platforms change too fast to tie it to one field or skillset. It is no more different today that it was in the past when it was hardware focused and less of a platform than today.
See those successful companies and products, why is it always 1-2 guys maybe 3 that started it off and got it going? For growth, yes structure is needed but sometimes it isn’t always as innovative.
I agree that complex, enterprise-level applications usually need a team of developers working together in order to be successful, but the days of the solo developer are far from dead. Many of us develop small-scale software for use internally, or build applications to meet the specific and unique needs of our clients. We don’t necessarily need to know all of the things you listed: we have system and database admins to maintain those aspects of the infrastructure and our organizations only use one or maybe two different programming languages/database servers.
And who knows how future applications will be built? The latest rage in the Web application development world are mashups and web services. Will the monolithic enterprise applications give way to applications put together around smaller, separate components created and/or hosted elsewhere? If so, will a team be needed to put such an app together, or a single individual acting as the band conductor for the data and services?
@Brian –
Very good point on the mashup – band conductor analogy…
Clueless article, a lot of those tasks are only relevant to teams or are buzzword wastes of time, any good (graduate) developer should be multi-skilled, so cope with most of the crucial stuff, I can and do!
This explains why people keep telling me I’m underpaid…
this is a retarded article; i know almost everything, of course i’ve been dev’n for 15 years.
also, you should be able to pick up stuff in a matter of a day or two.
it ain’t like http has changed, or javascript, java, php, or any of these technologies is hard.
shit…try c++.
anyway, the younger gneration of developers suck. pussies unwilling to learn, or get out of their “stack” in the box.
The cowboy developer was, is and always will be the person who has the ability to master any new language/technology is a short period of time, without have to know all of them a priori to qualify for cowboy status.
Which is why all innovation and progress depends on the cowboy rather than the average programmer who prefers to stay within his sandbox.
Now if you were to qualify your statement with ‘is dead…in the corporate world’ I would agree.
@lemon –
Awesome – my first flaimbait commenter!
Aren’t you validating the guest writers opinion by saying that you know *almost* everything?
@Renji –
I do agree with you that developers that can successfully float being a cowboy developer are quick studies with technologies.
Unfortunately, there are some areas that can just not be taught in 3 days or with a book (for example, search engine marketing).
This is why I 90% agree with this guest post. There was a day where if you knew COBOL, C, and Fortran, you knew the universe of computers. Now it is fact that no one can know everything all of the time.
[…] професия, но така ми е по-добре … и по-интересно. Software Teams vs. Superheroes: Why the Solo Developer is Dead – отчасти не мога да се съглася с написаното тук. […]
The Solo Developer has always been a risky proposition for any company. There are a lot of little companies out there that face a choice between one solo developer of uncertain quality, or one offshore team of uncertain quality. Companies that have gotten burned (branded?) by a cowboy are ready to try the team. Companies that have gotten burned by a team (and lots of them have been) are ready to try a cowboy. There are plenty of careful, responsible developers out there that do their best to know all the technologies listed above.
The problem with the cliche “jack of all trades, master of none” is that a lot of people don’t consider that there are other possibilities. What about “jack of many trades, master of one?” or “master of two, and working on three?”
One thing that helps the responsible solo developer is that not all of the team-oriented technology is really necessary. You don’t need to spend time getting a Bugzilla server up and running when MS-Access works just fine for bug tracking. Continuous integration becomes much simpler. Staff meetings are very short.
Every developer should know at least one unit testing framework, understand and use source code control, and try to keep up with the current methodology theories. Every developer writing code that accesses a database should have a grounding in how relational databases work, and know the basics of what to do and what NOT do do when using it. Every developer writing a web application should have an understanding of how HTTP works, understand what a DTD is and how it applies to html, understand CSS, Javascript, Ajax, and understand how to avoid common security problems introduced by javascript and SQL injection.
There’s still a big market out there for solo developers. Yes, you need to know more to be successful. And it’s a lot harder to get away with gaps in your knowledge than if you’re part of a team. But continuous learning is part of what being a software developer is all about.
Computers do more stuff, and so there is more to know in the big wide world of programming. But, in a narrow field, a single person can make a huge difference.
For instance, writing a new programming language is something one person can do. Writing the fastest-yet mp4 encoder is a one person job.
These days a software product has to be very shiny. It has to have a modular plugin architecture, it has to be re-skinnable, it has to be customisable, and auto-updatable, it has to do 50 things around the edges. But none of these are unique selling points. The clever thing it does is often the small core that make customers select it over rivals. And in my experience, the small core is usually the vision, and often the implementation of a single person.
I work in medical informatics, and most of the leading edge software in the machine learning, decision support, natural language processing type fields, are basically one man outfits. In time those will of course mature and be absorbed in ‘enterprise’ applications with huge teams behind them. But don’t underestimate:
1. The large quantity of niche software out there
2. The fact that much of this niche software is basically one-coder outfits.
Article doesn’t make sense, lots of ambigious requirements, like mvc, orm mapper, sql are usually handled by one package. Also funny how a ‘architect’, the ones who actually become pointless in small agile teams, wrote this article.
To write a great webapp you need 1-3 people to start with. Of course if a project gets super huge (like youtube, facebook, flickr) you need to add more people. But this is not due the fact that a programmer needs to learn all those requirements, which a lot from the article are absolutely not necessary to learn in detail. Whats the point of completely mastering something which you only need a couple of features from.
Also look which points for example ruby on rails (+plugins) covers from the list:
* Various flavors of SQL
* Multiple compiled and scripting languages
* XML configuration files
* MVC frameworks
* O/R mapping tools
* Unit testing harnesses
* Development methodologies
* Countless open source and commercial libraries, plug-ins, and extensions
* Application server installation and configuration
* HTTP and SSL
* DOM
* JavaScript
* Ajax
* Script.aculo.us, Gears, Dojo, YUI, etc.
* SOAP and REST
* RSS and Atom
Learning only this framework introduces you to a wide range of necessary knowledge for building a webapp. The rest can be attained by learning css/html and use svn/cruisecontrol.rb/mongrel/mysql etc. It’s not that much. The author seems to present it worse than it is in reality.
There are a lot of solutions available which covers multiple of those points. Also in real life you rarely need an enterprise team like described in this article to start something great. Look at youtube, digg, flickr, various google projects, roller coaster tycoon (1 man game written in 90% assembly). The main point is, that its certainly possible to hire super programmers with experience in multiple areas like mentioned in the list. And its also not necessary to hire a complete team to write the next cool thing. A small team can pull it off. In fact I believe small teams or one man products are more capable in succeeding than an enterprise team who is supposed to come up with the next cool thing.
Another collectivist putz with the-latest-fad sunglasses trying to convince Hank Rearden he’s no longer needed. Probably can’t produce an html doc without an art department and 3 guys using AffrontPage. ‘Scuse me while I ROTFLMFAO!
Kind of weird argument, most developers I know (self included) know most of the stuff in your 2 lists.
I’m not saying that I relish a return to the days of being the one man shop but, I think you’d make a better argument by talking about the size and scale of most modern projects and not so much on technologies.
A modern developer just needs to know a lot of stuff.
For example, I would expect the ‘average’ J2EE developer to know Java, SQL, JavaScript, XML, HTML, CSS, J2EE APIs, as well as some frameworks Spring/Struts/Hibernate (for example) and some web toolkits whether YUI, GWT or what-ever.
The average developer should also be able to set-up and administer and master his dev environment, which means IDE, Server(s), and Database.
In the last 4 companies I’ve worked for, *every* single developer was able to do this. Even when there is specialization, there is always overlap. The SQL “expert” also writes Java and HTML, the ‘front-end’ guy still has to write Servlets, custom tags, data access object, web service clients, etc.
Overspecialization leads to unemployment
@Max: Yeah, the conductor analogy wasn’t thought out well…had to get back to work.
@Dick C Flatliner: Nice literary reference 🙂 Wonder how many other folks got it.
@Brian – No I *liked* the analogy. Never thought of it from that point of view before.
There will always be solo developers, they just take on far smaller projects. Obviously solo developers aren’t going to make the next Microsoft Words or take on multimillion dollar software projets.
There will always be people who develop solo or work in small teams of 2 and 3. Those are the people who tackle much smaller software problems for far smaller clients.
Solo developers are most certainly not super heroes. That’s exactly why they develop small software, making small money. Teams of 2 or 3 developers are in a similar boat. They were never super heroes, they aren’t super heroes and will never be super heroes. They have a market to serve and they will serve that market.
Of course, most people out of University end up working for massive companies in huge teams. Some people love working in huge teams, others prefer smaller ones.
There will always be those (like me) who don’t mind working solo, and absolutely love to work in small teams or 3 to 6 people — and there’s absolutely nothing wrong with that.
A cowboy is someone who is arrogant enough to try build something Microsoft Word on their own. Yes, there are people who try that. But most lone developer or small teams would never do that.
In fact, if you look at the Ruby on Rails community, it DEPENDS on many lone developers who write small plugins, feeding into the Rails ecosystem.
Cowboys are dead, but lone developers and small teams will always have their place. It’s kind of line comparing a charter pilot to an airline pilot. Apples and oranges!
Crappy article. Super good discussion and counter points. I am a cowboy and proud of it. Long live the cowboy programmer!!
yiiihaaaa-giddyap, that’s what I say.
Whooooooo eeeeeeeeee!!!!
Seriously, though, one great programmer, working with a good language (Java, C, or possibly C++) can build a great project.
It sucks working on teams when:
20%: developers just collecting their check
20%: good developers, but no passion for anything
40%: good developers, some passion for dumb things
20%: truly great programmers who can’t get anything good to happen because of the other 80%.
[…] професия, но така ми е по-добре … и по-интересно. Software Teams vs. Superheroes: Why the Solo Developer is Dead – отчасти не мога да се съглася с написаното тук. […]