I'm a consultant at one company.  There is another consultant who is a year older than me and has been here 3 months longer than I have, and a full time developer.The full-time developer is great.  My concern is that I see the consultant making absolutely terrible design decisions.  For example, M:M relationships are being stored in the database as a comma-delimited string rather than using a conjunction table to hold the relationships.For example, consider two tables, Car and Property:Car records:CamryVolvoMercedesProperty records:Spare Tire Satellite Radio Ipod Support StandardRather than making a table CarProperties to represent this, he has made a Property attribute on the Car table whose data looks like 1,3,7,13,19,25,I hate how this decision and others are affecting the quality of my code.  We have butted heads over this design three times in the past two months since I've been here.  He asked me why my suggestion was better, and I responded that our database would be eliminating redundant data by converting to a higher normal form.  I explained that this design flaw in particular is discussed and discouraged in entry level college programs, and he responded with a shot at me saying that these comma-separated-value database properties are taught when you do your masters (which neither of us have).  Needless to say, he became very upset and demanded I apologize for criticizing his work, which I did in the interest of not wanting to be the consultant to create office drama.Our project manager is focused on delivering a product ASAP and is a very strong personality - Suggesting to him at this point that we spend some time to do this right will set him off.  There is a strong likelihood that both of our contracts will be extended to work on a second project coming up.  How will I be able to exert dominant influence over the design of the system and the data model to ensure that such terrible mistakes are not repeated in the next project?A glimpse at the dynamics:I can be a strong personality if I don't measure myself.  The other consultant is not a strong personality, is a poor communicator, is quite stubborn and thinks he is better than everyone else.  The project manager is an extremely strong personality who is focused on releasing tomorrow's product yesterday.  The full-time developer is very laid back and easy going, a very effective communicator, but is someone who will accept bad design if it means not rocking the boat.Code reviews or anything else that takes time will be out of the question - there is no way our PM will be sold on such a thing by anybody.
How To Deal With Terrible Design Decisions
design;database design;communication;technical debt
From my experiencesI would say as having been a long time contractor myself, 20+ years, generally when you are a contractor, you aren't there to affect change, you are there to be a warm body filling a seat and doing what you are told, unless your manager mandates something different specifically. Don't get investedIf they don't see the huge mistake this is, then don't worry about it. Make some comments in your code contributions about how this is bad and needs to be refactored to actually support joining against those values in a sane amount of time, and then forget about it. It might even end up on thedailywtf.com and make you anonymously famous!Start thinking about how you are going to make sure your next contract position will be so much better than your current one! You now have an experience to help you gauge the next set of people you will be working with next time you interview, to detect these type of personalities in the future. You not only want to be aware of the contractors negative personality, but also your managers negative personality. If he is going to blow up at someone who is trying to make him look better and avoid problems, you need to learn how to spot people like him in the future so you can avoid them as well.You should not have apologizedNow the other contractor will feel justified in his belief he is correct, which he isn't correct.Any basic Relational Database Theory book will shoot down this naive incorrect solution in the second chapter, if not sooner. Multi-value fields are a clear sign that someone doesn't comprehend what they are doing, they aren't worth your time arguing with.If you really want to do something to make yourself feel betterDocument your conversation with this person, why it is so wrong, what problems it will cause and your proposed solution. Give this to the salaried employee and your manager. Don't propose that you change it right now if you have a deadline, but make it really clear that is isn't going to scale and will definitely make your manager look bad in the near future. That way when you have moved on, you can feel good in the fact that you at least notified them of the disaster waiting to happen.