Ask HN: Would you join a startup that doesn't test? Are tests impediments?
Met this great team at a startup running a (quite successful) webapp on a cloud hosting provider. They don't test their code at all (and instead run through tests manually before they push to production).
They say it's because they wanted to put something out there rather than focus on testing. Is that legit?
I like them a lot, but it makes me nervous that they don't have any test framework in place. I think they're open to testing now they are more stable. Thoughts?
23 comments
[ 2.8 ms ] story [ 66.5 ms ] threadIf they've been working at it for a while, joining them is going to be a lot hard work. For one, it can be a warning sign, in the first place, their code will be hard to test. Dependencies will be out of this world, who knows where they put their business logic, random classes doing random things, random database session handling, god objects, and other elaborate hard-to-maintain hack stacks.
If you still want to join them, introduce testing to them by creating tests for one small part of their stack, it will easily show off the merits of testing:
- It's not just about putting something out there faster, it's also about failing business assumptions and the capability for your code to iterate/pivot quickly. Testing helps you in that aspect. Spend 10 minutes running the entire stack and tracing where a bug occurred, or just run your tests and find out what went wrong.
- The great thing about automated tests is that whenever I make huge changes in my code and the tests still run it means I can confidently say I didn't break anything at all. If I did, then I can easily know where and how, and I don't have to run through the entire app. I could easily isolate a single piece of my stack and test directly.
- Testing forces the team to write maintainable software.
- Another amazing meta-feature about tests is that, whenever you're debugging, it takes a huge chunk of business logic out from your cognition. You don't need to carry the extra cognitive load that 'x' part of your stack be able to 'y'.
Anyway, join them not for the sake of their code, join them if you just love what they're doing. You'll work through it.
As software developers, the essence of our profession is to automate repetitive tasks. If you have a rigorous manual testing methodology for your software, it should be a trivial task to turn that test specification into automated tests. The absence of a suite of automated tests is a major red flag in any non-trivial software project - it strongly suggests that either the developers do not care about quality, that they do not understand their work well enough to manage quality in a systematic way, or that they are too haphazard and disorganised to manage their project appropriately.
But cults do not do that, they just accuse non-believers, in this case, that they do not care about correctness.
That's like saying Messner and Habeler did not care about safety because they climbed extreme pitches unroped where other pairs roped up and moved one at a time. But M&H were very good climbers and got up and down twice as fast as the others, who doubled their risk of the weather turning on them by being "safe". If you know your mountaineering, the latter is usually how folks die on mountains.
Did you ask them about their practice? Did you ask how often they had to roll back deployments, or at least take a hit on something automated testing would have caught?
I asked them about their testing - turns out they were looking to have someone help them develop a way to test their software (so at least they want to do it).
I wish I'd asked them the two questions you listed at the end, they are much better questions than a bland "do you test?". They did break the build some times.
btw, I am glad no one asked the alternative to testing -- it would have been more a textbook on software development. <g>
In the even slightly long term, tests don't slow things down, they keep things fast. It is MUCH easier to change and maintain code with good tests. Think about it this way: when you write code, you damn well better be testing that it works as you write it. Why not test it with other code, and save that so that other people don't have to do it over again? Manual testing is slow, error prone, and very expensive. Better use it judiciously instead of making people track down stupid programming errors that could have been caught in 7 seconds with a decent unit test suite.
I talked to a very hot startup (100M+ valuation, very solid business model) that everyone here has heard of, and they had no tests at all.
Don't discount a company because of their testing situation. Heck, maybe you'll be the first engineer to start writing tests!
In an ideal software development scenario where you have a budget, then yes, testing should be there in the beginning.
But if it is a start-up, I'm tempted to give slack for the lack of a framework. And it seems like if you come in, you might be the person to lead the testing framework which would be a good thing.