A lot of professional programmers have come to the conclusion that the actual act of creating code that solves some of humanity’s problems (or at least makes them into something more easy to manage) is not too hard. Rather, it is a fun challenge, to be embraced and savored in the same way a body builder savors the sweet pain of sculpting his back into something scary to his competition. Unfortunately, an saddening portion of a programmer’s work is not even spent at the computer terminal, but in seemingly endless meetings with other people. As many programmers are not exactly of the people person persuasion, this can have unfortunate results. Social faux pas notwithstanding, there is one challenge which is anything but fun and enjoyable; dealing with people who have absolutely no clue what they actually want. Your mission, because you have already accepted it, is to figure out what this is in spite of what they actually tell you.
People will often get into a mode of wanting everything under the Sun to be stuffed into one program. Why they think that this is a good idea is anybody’s guess. Maybe they believe that having one program to do everything will somehow make their lives simpler, because of some bizarre business logic that is beyond the ken of programmers. Maybe they think that it will save them money to have you only design one piece of software for them, and they are just trying to cut costs wherever they can. If all else fails, offering them a discount may not be a terrible idea in the long run.
The worst problem is when you are dealing with one person who has lots of bosses. Bosses have a distinct tendency to completely disconnect with how things are done, while they simply focus on what they want accomplished. They are rather like children in this way. In some cases, it may be beneficial to you to write out how some functions deny other ones by their very nature. Seeing it written out adds credibility to it, and doesn’t come off insulting.