Programs are always at least as complex as reality; good programs are not more complex than reality.
Preparing software development is about predicting the future: You have to decide on things that you cannot know, as you haven’t done it before, but you should know in advance how the end will be.
Architecture decisions done by managers have been proven to be wrong in most cases after a short period of time.
But: A manager who is not deciding if asked is even worse.
A manager who has been presented two conflicting interests of feature requests in an authentical and creditable way, but then does not decide is dangerous for the product: The absence of decision causes aimless drifting in development and in most cases both features will only be implemented half (mostly generating close to no value at all).
Do not add a reference to the product to entity’s names – especially when specifying a naming convention; the names of products won’t last long enough for it; the names will become outdated too early.
The perception of the biggest problems on implementing software is totally wrong: It’s not the biggest problem to get a thing or a process running; but the biggest problem is to detect and behave correctly, whenever an error occurs in the program flow. Often this is not reflected in the portion of the coding on error handling, as in almost all cases, the predominant part of the time is required determining an appropriate way of handling the errornous situation best.
“Those who would give up essential Liberty to purchase a little temporary Safety, deserve neither Liberty nor Safety”
Benjamin Franklin for the Pennsylvania Assembly in its “Reply to the Governor”, November 11th, 1755