Ask HN: Broken tests, huge (250 commit) pull requests, growing team, what to do?
(Do you know any consultants in SFBA who already helped your company conquer early technical mess? (ruby/rails/js))
(Do you know any consultants in SFBA who already helped your company conquer early technical mess? (ruby/rails/js))
Are you getting paid? Is the business making money? Are you getting proper feedback? Do you feel you have influence? Is it really you against everyone? What's important to you really?
Focus on understanding the VALUES of the other people. If you feel the tests are important you have to get the others to see how the tests are valuable in a way that they value.
"Fast feature delivery" -- show how tests can deliver faster feature delivery ( it may be that the current tests actually slow down feature delivery )
"Late nights/Missed dates with SO" -- show how tests can reduce late nights and get the person home.
"Reliable schedule", etc...
If I may suggest,
1. Do all the tests need to be fixed? (i.e. how valuable are those particular tests?)
2. Can some of the broken tests be turned off?
3. Seek to understand the priorities of the others and understand how to make tests more relevant to them.
4. Seek to understand which tests deliver the most critical value.
For example,
1. "Mark" complains about working late on reproducing a bug. Can you help him create a test case that reproduces his bug reliably so that he can test a fix faster?
2. "Jessie" complains that tests are hard to maintain and she has too many other things to worry about fixing tests. Ask "Jessie" to help make ONE test easier to maintain.
3. "Jane" complains that the tests just test trivial functions and if they break the tests are broken, not the actual code. Turn off trivial tests.
4. "John" complains that "all" the tests are "always" broken. Turn off the broken tests so that people get used to seeing "green" so that "not-green" becomes unusual.
5. The CEO wants features fast. Work on understanding how to communicate the idea of consistent forward code velocity. You have to use their language to communicate to them. If the CEO is worried about a funding target in the next 2 months, it is difficult for them to care about something that only delivers value in 3 months. (I like testing and I would not care myself about tests in this case)
A failure to communicate != Stupid.
A failure to communicate == not understanding the other party's priorities.
A failure to communicate == not understanding the other party's language.
--------------------------
Lastly, tests only fit in well if there is a DEVELOPMENT PROCESS that values testing. Does the company have any process? (ie. Scrum, Agile, Kanban?)
If the company has no process, then any talk about tests is the wrong conversation.
B : Would you rather deliver features or make sure the platform that you're working on stays running ?
For the product/project itself, setup a continuous delivery pipeline. Allow (if possible) one pull request at a time. Let integration/load/benchmark tests prove that its not breaking anything. If the tests are broken, whoever breaks them gets to fix them. They're not in the team anymore? no problem. Whoever needs to push a change, need to make sure the pipeline is working.
Growing team needs direction. Set up tenants / guidelines / vision. Assign product owners that are responsible to customers/stakeholders.
Also, figure out why nobody cares. Is it lack of knowledge / best practices? Is it lack of interest? Is it not-my-job phenomenon ?
At any rate, these problems seems huge usually but often if a person or set of people can focus on them, they can be knocked down rather quickly. Then it doesn't take a whole lot of time to keep the project on rails, so to speak. Each situation is different but I would be more than glad to speak with you more.
It is usually an balance between trying to see the whole project and yet not trying to bite off more than you can chew as you fix technical debt. Small, iterative changes add up very quickly.
It's all very well trying to be their technical saviour but in the end you can't fix it all. Typically if the tech leadership is broken, the company leadership is also broken.
If it doesn't help, you should probably hire a senior person to teach the rest of your team what software engineering is all about. I don't think the consultant will help you, since from what you describe, it's an attitude problem and lack of the global point of view issue in your team. e.g.: once the consultant leaves you with $5k+ bill, they'll likely come back to their practices.
Bear in mind: if it's a startup, sometimes it's messy and it may get some time before people will come back to the "usual" state.
I'm curious, is there a leadership vacuum (no CTO/VP Eng on staff), or is that the people in those roles aren't doing their jobs?