Sorry I wasn't clear on the original comment, how can NDA stop a developer to use what he knows while writing code or creating procedures?
If you are a developer and worked on a code for 2 years. NDA cannot cover what you know what you don't. Your know-how that you captured on that company can simply be replicated in another company. You'll write the code from scratch, and NDA or copyright, or even patent in majority of the cases will not be enough to enforce or stop such a think. In rare cases patent can solve it but do we want all companies to patent everything?
What you're describing isn't "intellectual property", it's experience. The company you work for has no legal claim to your experience. Your experience is a personal asset which has value in the market and is a direct reason why a company hires and compensates you to do that job.
And that's exactly my point. This is why non-compete makes sense. To repeat, because none of the stuff you have mentioned can replace what non-compete provides.
If you replace "developer" with "general contractor" and "writing code" with "constructing a building", do you believe your argument holds up? How about "doctor" and "practicing medicine"? "Attorney" and "practicing law"? "Salesperson" and "selling effectively"? I could go on.
While employed, a person necessarily learns skills in order to perform their duties; as an employer, it would be impossible to derive value from the worker without training and knowledge transfer. Your argument is that it should be a two-way street until employment is terminated, then it becomes a one-way restriction against the employee. That's not fair to workers and is extremely biased toward the employer.
My argument was about software development and I don't know how much it would hold up for other fields.
Employer pays the time for that employee to acquire the knowledge, employer serves the know-how that the employee might never ever able to learn by herself. How is it not reasonable to expect that knowledge to be used against the employer? Why is it one-way? I'm not talking about knowledge in a sense that "good code should include comment" kind of dev best practice. I'm talking about domain specific know-how that the employer came up with in many years by spending lots of money (R&D, trial & error, field studies etc).
If you are a developer and worked on a code for 2 years. NDA cannot cover what you know what you don't. Your know-how that you captured on that company can simply be replicated in another company. You'll write the code from scratch, and NDA or copyright, or even patent in majority of the cases will not be enough to enforce or stop such a think. In rare cases patent can solve it but do we want all companies to patent everything?