I've been having an email conversation today with my project manager, and I asked her what the term "commercial awareness" meant to her. Her reply was so good, I'm putting it here:
it's about knowing your market & your customers and what they want and need & how they work. Knowing what your competitors are up to. Mainly so that you can make the connection between what we could build and what we should build. There's also the time element - striking a balance between doing it quick enough to keep customers happy, but not so quick the quality is rubbish and the product either unusable or unsupportable or so slowly that no one is prepared to wait for it. It's knowing what corners can be cut without compromising the end deliverable or the strategy. Understanding how a few man days of effort translates into more man days of test, rollout, marketing, training, support....etc and consequently cost, all of which have to be recovered with a price tag. Understanding what is driving the business - what strategy we have to reach our revenue and profit growth targets and how that translates into the work you do each day.
A lot of that comes with experience, but if you just keep your head down and code, most of it can pass you by. You need to keep in touch with what's going on, and take all the opportunities you can to attend meetings, read trade press, understand what's happening on the business side of the fence - without of course impacting your ability to do what you've been tasked with! A lot of developers are happy to and in fact only want to code - head down with ear phones on is a utopian state for many :) which is absolutely fine if that's what you want. If you want more from your career I think you need to lift your head up regularly and find out what's going on.