I'm working on a project (gararge startup) with a dev that I perceive to be the "cowboy" type:
- typically works alone,
- deploys untested code in production
- doesn't use a source code repo
- makes arbitrary schema changes to the database
- Hacks on features first and fixes bugs later
- Forgets the members of the team's need for communication and collaboration
The sticky situation is that it's his dev project and he's the de facto leader. I stepped in to help stabilize the web app and scale the infrastructure. I have hacker roots but the hacker has been sanded out of me after years of sysadmin and DevOps in corporate environments. It's a real "Odd Couple" setup where the dev is playing Oscar and I'm playing Felix. I'm more of the scientific, rigorous, disciplined type. We've had discussions about Agile, best practices, implementing DevOps. He's tried the code and test on local, deploy to stage and test, then deploy to prod approach. That lasted a bit more longer than a week. He complained that syncing databases between stage and prod was too cumbersome then went back to his normal coding habits. We discussed this and he expressed the need to "move fast" which means to me that he thinks that proper development process and practices will slow him down. So now if I want to set up a dev or staging env,
We're also recruiting other devs which means connecting with his college buddies hiring them then figuring out what their going to do. To me, it feels like he's organizing beer pong night than a technical team.
I have to grab the code and database from prod which is filled with bugs. If I want to test the whole system including his code, I have to work with what I'm given. And the bugs in his code cause web pages not to fully render, trigger http 500 errors, and other issues that are skewing the results of my systems testing. I just want clean code with predictable results so that whatever systems stability problems and performance problems fully reflect the system. It's hard enough work building the systems tooling and building recipes and templates to produce consistent environments.
I've only been part of this project for two months. Experience wise, I'm more senior than him but he's the co-founder so I'm dealing with some interesting politics/dynamics of "who's the boss". From his perspective, I'm the systems engineer and coaching him on his coding and deployment process is a bit outside my scope. Also I can be blunt and direct in my communication I had a few diplomacy fails while discussing these issues. Taking this in consideration, how do I get us on the same page and working together with more sane working and dev practices?
He complained that syncing databases between stage and prod was too cumbersome
Maybe you need to fix this for example? E.g. use a script that populates the DB in a defined state automatically whenever your push to stageThe way things work at this shop nobody has assigned job titles or roles.
is probably more important than the technical details or specific practices of your coworker. Call a short meeting for everyone to sit down together and say "Look, here's what we all want to accomplish, and here are my thoughts on the roles we need to take over the next few months to make that happen.". Whether you define roles or not, people have got them. But it's a lot easier if everyone is on the same page.