I’ve currently joined a project as the only iOS Developer. I’ve inherited a codebase that’s passed through the hands of 4-5 guys over the course of 3 years. 3 years is already at least a yellow flag in terms of iOS Development. In my view, the only reason the same project should be allowed to live for 3 years is if you have older devices to support, or a massive userbase and a fat client architecture (making loss of data an issue). For startups, you should always consider re-writing your Minimum Viable Product, as so many lessons are learned, so many pivots are made, so many corners are cut, to get you to where your codebase is today. Cruft (look it up) is your biggest problem.
Poorly structured code will hurt your bottom line. It becomes increasingly expensive to work with, and adding new features will not be easy, and the chances of introducing bugs will be high. As much as one can talk about Test Driven Development (TDD), I’ve rarely heard of teams (in the startup world at least) that write tests, and if they do, they write them *after* the code has been written. (This has proven to be the most expensive way to implement tests). So, fine, the world is not perfect. In these cases I would hope that if you are a developer reading this, you will at least put comments in your code and also NSAssert statements (the poor man’s sanity check / testing shortcut).
Let me now define what I mean by Hacker in the context of this post. A Hacker is someone who may look good to any non-developer. He gets the job done. The code “works”. He appears passionate as he types away in a frenzy, trying to make things ‘just right’. The thing about a Hacker is that he may be self-taught and completely lack the principles of good software design. He writes spaghetti code (that works). He may say things like “I don’t need to put comments, the code should speak for itself.” (If that’s true it is saying “Help me!” or “I’m taking hostages!” or “Your time now belongs to me!”). But the worst thing about a Hacker on your team is that he will write code that is often a testament to every anti-pattern you have ever known, and to have to work with that person’s code is like being sabotaged before you can even begin. Because to work with that code, you essentially have to rip out everything he’s done to make the codebase useable again. So before you can begin to be awesome, you have to weather the storm of management (who can’t possibly know your struggles) saying “I’m noticing progress is slow”, or “but it’s working now, what do you mean you need to rewrite it…?”
In short, a Hacker in charge of your codebase is basically signing a death warrant for your current codebase, or paying for a huge financial hangover after he’s gone. A Hacker on your team can have some benefit (thinking outside the box, enthusiasm), but be wise and make sure he’s not in charge of architecture, and make sure you do code reviews.