Do Generals make analogies to software when talking about Battles? Doubt it.
Battlefield analogy is cute but isn’t great. Analogies in general bite because someone always picks a hole in some aspect and they’re never perfect.
Custards last stand anyone. Er, actually it reminds me of many software projects actually.
The battlefield analogy is poor because the way it was presented was basically saying ‘experience is good. don’t let your lack of schooling stop you for getting practical experience before you finish your degree’.
However there are so many more aspects to battlefields that are being conveniently sidestepped for the sake of a good article. If you think armies just wake up one day, run to a field, and start fighting you’re an idiot. Those that do, die. Battles are planning, and planning takes skill. Skill is learnt through a combination of experience and revision (of history, tactics, etc). Soldiers train, practice manoeuvres, etc etc etc.
Battles themselves are short, explosive bursts of activity following orders and adapting to situations.
Writing software is talking to clients about features, prioritising, coding, testing, prototyping, meeting, talking about more features, reprioritizing, changing code, maintenance, more testing, regression testing, more meetings, and the odd successful, on-time delivery …
So how exactly is a battle in any way similar to the process of delivering software?
Because one should never criticise ideas without offering their own, here’s my newbie advice:
Don’t expect to be an architect or know everything out the door. You won’t solve things the best way the first time. Failure is ok. Have a goal.
AVOID analysis paralysis. Coding and testing something will give you a better indication of how things work than looking at a sheet of paper all day and drawing pretty pictures. Don’t just throw away those prototypes though, refactor them into something useful.
Write tests first.
DO find a good ‘commander’ (ie mentor) and get in the trenches. Listen to them, take what they say, but don’t believe everything you hear. Think critically.
DO move around. You don’t want to get stuck in a job for more than 2 years. (it’s better for your salary as well as for your experience)
DO NOT feel bad about quitting.
DO say NO. Avoiding bad experience is better than no experience, so don’t just take anything that comes along. It’s your life, and if someone asks you to write bs code for their horrible WTF of a system you should pause, take a look around you, and if you see your future spiralling into the drain then leave. It’s just not worth it. You don’t have kids or a mortgage yet, and you can manage eating KD for a few more weeks.