"When building a big system you need uninterrupted hacking time to make sure you can keep all that state in your head."<p>I think that this is wrong. 
Or at least it should be wrong. 
I used to think it was true.<p>State is another way of saying 'Number of things I have to hold in my head'.<p>So what you are saying is that because you have a too many things to hold in your head at one time, you need uninterrupted hacking time. Otherwise something gets forced out and you make mistakes.<p>But another option here would be to increase the amount of abstraction within the code. If you increase abstraction, you reduce the amount of state, and reduce the chances of something important getting pushed out.<p>A side benefit of this would be to increase the readability of the code. If it is very well abstracted, it will be easy to understand when you come back to it.