In a well run development environment, business analysts (BAs) and programmers would communicate with each other to develop applications that can be developed in a timely, cost effective manner. BAs would consult with programmers about what kind of impact their decisions will have on a system, and programmers would ask questions of and offer information the help BAs make better informed decisions. I have not had the pleasure of working in too many well run development environments.
It seems to me that most programmers do not have an interest in the intricacies of the businesses they write code for, and BAs tend to think of programmers as 'doers' and rarely consult with them when making business decisions that involve technology. I don't blame the BAs, I think most programmers have put themselves into this situation.
I am shocked at the lack of normal business analysis skills of most programmers. Programmers need to understand the cost of developing and maintaining their code so they do not spend an exorbitant amount of time coding insignificant features. They also need to fully understand how their code is used once it's out the door so that they can develop apps that can be deployed faster and easier, used better, and just better meet the overall needs of end users.
I've consulted at four companies over the past two years, and while each company has it's own culture, at all four there is a definite line between business and technical units. It's an 'Us versus Them' mentality that I find short sighted and counter productive. It can be seen in the physical layout of most offices. Most offices put technical departments together where common interaction with business related departments is minimized.
I take a great interest in the business models of the businesses I work for. A few of the things that I want to know are:
- What is the business model for the business?
- Who uses the product or website I'm working on?
- Why is the solution I'm working better than what currently exists?
- Who is the competition?
- What differentiates the business from it's competition?
- What are the customers saying?
I feel that knowing about the business helps me write better code. I can scrutinize specs and offer suggestions for better ways to do things. Sometimes my suggestions are ignored or turned down, but sometimes they are accepted and time and money are saved. Lots of code has been written that does what it is supposed to do, but it is of no use if it is written for a company who is unable to turn a profit at the end of the day. My goal is to provide cost effective solutions that help businesses make money, which is much different from a goal of simply writing code that does what it is supposed to do. I don't think my job is secure if I simply write good code. My job is secure when I write good code that contributes to making money.
I've worked with many programmers who look at business specs as if they are written by a higher power. I don't write perfect code, and business analysts do not write perfect specs. I've written code that could be better, and I think it's great when a better way to code something is suggested to me. Likewise, programmers should strive to fully understand business specs and look for potential ways to improve them before jumping into the act of coding.
Finally, I would hope that programmers realize that having good business skills on top of good technical skills is a great way to advance your career. Having business skills is the only way to get out of your cube and advance to the level of project management or above. Business analysts with technical skills are also always in high demand. Who better to design a system than someone who can code one?