With software products taking whole teams of people to develop, how much can one programmer accomplish on his/her own? In other words, could a single person write Photoshop, MS word, etc...? And if they couldn't, would web development be an area where one programmer could do a lot?
Linux is currently much bigger than its first iterations, but the important thing is that it came out with enough stuff in it to gain traction.
Only if its worth it
I have the personal rule that big stuff is just worth doing if its fundamentally different to the rest. Otherwise you are diving into a red ocean.
Good to start, but not always sustainable
If your software is good enough you may want to get serious with it. Take for example Markus "Notch" Persson, creator of Minecraft. IIRC he started the game alone, and when the game gained traction he started looking for collaborators and even started a company.
While rewarding to achieve something alone, big projects fulfill their potential by developer collaboration, not a single genius, which takes me to my next point.
Check out The Myth of the Genius Programmer, a talk by Ben Collins-Sussman and Brian Fitzpatrick at Google I/O 2009. You should get all false expectations there. Main point I want to make here is that sometimes a single developer gets the credit for the whole thing, while there were more people behind.
Its definitely possible
Another example, aside from Linus Torvalds, is John Carmack. He ported Wolfenstein in just four days when EA had estimated a full team for two months.
It is not the ammount of code, its the architectural and technical knowledge that lets you achieve big things with less code than you would expect.
Given the skill and knowledge (beyond average level) you can make lots of work feel like little.
Due to the nature of the work I'm doing, I've developped a couple of pretty large applications all by myself. So yes, it's doable. I could go on about this for hours but haven't got much time now so here are some pros and cons from personal experience.
- you're in full controle and there's no team to fight with, so you can go with what you think/know is best. No wasting time in endless discussions about a tiny little aspect in the code.
- you have the whole architecture in your head, know literally everything about it, customer support is a breeze since you know all the answers yourself
- you learn a lot about all aspects of programming. Low-level, mid-level, high-level, user interface, ...
- no team to fight with, so sometimes you take bad decisions without anybody telling you
- it's easy to get lost in it, not seing the big picture anymore. And there's no one that can help you. (except SO/SA and the likes :])
- spending lots of time on customer support that you would rather spend on programming
With some dedication and skill a single person can definitely achieve a lot. It isn't easy however, just being a good programmer isn't enough. For a successful project you often have to think about use cases, user interface design, documentation, support and much more. Once things get rolling and user numbers grow doing it all single-handedly will increasingly become unrealistic - that's the point where either more people get onto the project (via community participation, hiring people or otherwise) or the project dies.
It depends on the software that he/she is trying to develop, time constraint, and the skills . If he/she is developing a simple MIS application its very possible that he can do it at a short time. Trying to develop a software as complicated as Photoshop, MS Word, Blender, Flash, and etc its possible but it takes long time and it has the most basic function and the features are simple.
Its all dependent on skill, time spent, and willingness to do it. The more knowledge you have the less time it will take to accomplish something. You will get an extremely intimate knowledge of the codebase as the sole developer which can also speed up the process of figuring out/refactoring/debugging.
I've personally been working on a desktop-to-server transfer application. I've coded the server application, desktop application and tested it all myself. I've written the installer for the application even. I figured out a way to allow drag and drops onto system tray icons in Windows and even wound up writing a new Java library from scratch. I did this over the course of a year and its still under development and testing.
This entire project has been a one-main ordeal. Everyday after school I've worked on the project as well as weekends. Is it as massive as MS Word, Photoshop, etc? Nope. The project is still large and ever growing though and it is possible to achieve a lot.
I'm currently working on such a project myself in my free time (it's a web application, not a desktop application, but the principles are the same). Here's what I've found so far:
1) Don't reinvent the wheel. Use existing libraries/frameworks, rather than doing everything from scratch. One caveat here: make sure you pay attention to licenses as they apply to your desired distribution/release/whatever model. Some copyleft licenses will require that you open-source your "derived work". Some licenses allow non-commercial use only. Keep track of the libraries/frameworks you use so that you can provide appropriate attribution in your "Credits" screen/area/whatever
2) Work iteratively. This ties into what dukeofgaming said with "Start Small". You're much more likely to stick with a project if you can see results. Until you can see something working, any development you do is the equivalent of painting in the dark.
3) Don't be afraid to ask for feedback/help early on. Chances are, you're not good at everything. If you're great at the lower-level nitty gritty of coding, you probably suck at UI. The converse also applies. It never hurts to get advice from those who are better than you in a certain area. Many folks will avoid this because they're worried about someone stealing their idea. Don't worry about this - if someone tries to copy you, it means that you're onto something worthwhile. Ideas are cheap, implementation is key. Apple didn't invent the MP3 player, Microsoft didn't invent the operating system, Facebook didn't invent the social network, and Google didn't invent the search engine. What they did was make it compelling for users (and not suck).