Poor Development Practice – They have neither QA nor UI experts. After coding, a few developers start poking around the application. No documentation or no automated procedures exist. Testers often correct problems by themselves without reporting or sending back to the developers. They do use source control, but everyone tends to make changes at random without communicating well. They virtually have no versioning control, no refactoring/optimization practices. Databases are wide open to everyone when most developers are not database experts. Details and changes are often communicated verbally if not by email, and developers waste their time on going back and redo a lot of things. This is what they call agile and normal in the consulting world.
Generation Gap – With their recent rapid growth, you see a lot of incompetent old timers in key positions. New hires, on the other hand, are very bright people in that their talent, experience, skills, and professionalism are far superior. A real challenge lies because many old timers have become maintenance experts who don’t share information. Good ones get tired and leave, and the problem gets even worse.
Just Get it Done (Fast) and Move On – Quantity over quality. You don’t see any quality in their work. They just make it work. No everyone wants to follow this business practice.
Poorly-designed Internal Framework and Tools (.NET) – One guy virtually owns and maintains them. Because maintenance and enhancement are not billable work, little or no improvement has been made for many years. Contrary to what they claim, the style is a lot more procedural than object-oriented, and Reflection is used everywhere even if strong typing is preferred or possible. There are many C-style, static methods with “out” and misused “ref” keywords. Magic numbers and strings are scattered all over. Type names are very confusing because they tend to create their own versions with no inheritance. Over-commenting seems more important than producing easy-to-follow code that requires very little commenting. Last but not least, the code runs extremely slow.
Favoritism – It’s not uncommon, but they make it very obvious here. Make friends with managers and principles, and you will be more recognized. If you speak up too much, they stop listening to you and find every way possible to criticize your work and your professionalism. Soon they start treating you like you don’t exist by not being responded by email, not getting billable work, and not having anyone show up in meetings you schedule. Worst of all, the top managers only listen to old timers and principles and believe their stories despite their open door policy. After all, they still have a small company mentality. It’s important to be either buddy-buddy or obedient.