Partially as a response to How do game developers target multiple platforms (Xbox 360, PS3, PC and Linux)? but mainly because there are people on here with published games, should cross platform be the first requirement/feature for a developer trying to break into the business? I have always been a believer (in a totally procrastinating sort of way) in picking either a 'niche' or 'mass market' platform and porting later if demand justified it. Cross platform always felt like an artifical barrier to entry. Why shouldn't we all write iPhone, Windows, or Browser games?
Especially if it's your first serious project, getting something (anything) actually completed is going to be your biggest challenge. The more barriers you can remove from that goal, the better.
If you're really serious, to give some thought to making your game port-able. If it's a stand-alone Windows application and you're doing your own rendering, don't write everything straight to DirectX. If you ever want to do something that's not Windowx/XBox, you'll need to rip all that out. And that's an unpleasant process once you've stopped looking at the code for more than a week or two. Put in some amount of abstraction if you think seriously think you'll ever want to port it.
That's assuming you've written your own engine, of course. All things being equal, I'd start with Unity or something similar. It removes a lot of those initial barriers for you.
I would agree with you on this one. If you spend all of your time building a cross platform game, it will never get out the door. I think it's best to try to predict which market it would succeed best in, and built your game to target that marker. If the game does really well, then you should consider porting it to other markets that make sense. If the game doesn't do well, and you think it could do well on another market, you might consider porting it anyway.
No. The whole idea about being an indie is that you can do what works for you, or what you believe is best (for your game, for you, or for your audience). The whole idea about being indie is that there is no 'must', 'should', or 'have to'. Make a game - your game. If it's a hit, or if you, after doing it, feel the need to port it, by all means. If it's not extremely targetted to specific hardware, or in some esoteric language, the main idea should be portable enough regardless. You're an indie, do your thing. YOUR thing.
Ruling out consoles briefly, I believe there's no reason the majority of PC games could not be developed for Windows, Mac and Linux simultaneously. Provided you put the work in at the beginning to get a system agnostic platform to work with, there's not going to be any huge blockers, and there will be advantages.
- Compiling your code for different systems will show you issues that may have otherwise gone undetected. This can be simply from different compilers warning about different things, but also via the use of other tools not available for other platforms, like valgrind.
- Larger audience, while Windows might have a huge platform share, the small communities of Linux and Windows are starving for games. And there's much less competition
- Working with an existing rendering library is going to make things easier anyway, why not choose one which lets you easily target more platforms, Ogre3D for example.
Of course there is work involved, but I believe there's also a vast, largely untapped potential.
I'll also note that I agree with previous answers, targeting many platforms with your first application might be a stretch, but I'd suggest keeping it in mind anyway.
Should beginning/indi game developers target multiple platforms initially?
For a beginner, I would suggest no. A beginner wouldn't have any idea what is and is not cross-platform.
Worst case scenario is you implement something that you thought was cross-platform. Weeks later when you compile on other platforms, you find out that it was broken. You'll either ignore it (gonna get the game working) or go back and revisit that code.
Why shouldn't we all write iPhone, Windows, or Browser games?
Complexity increases fast. For every platform you wish to support, you'll have to create one additional code path.