Developing software that is to be distributed on the public Ethereum blockchain requires a new set of skills that for most of us will seem foreign. Being that the blockchain is an immutable data structure makes it both very secure but at the same time challenging to maintain software on. Imagine deploying a new web app and never being able to update it again? Doesn't that seem wrong to you?
From what I am learning there are many ways to mitigate this fact by exposing function calls only certain users can call to composing your Dapp with multiple contracts each will a method to update contract interfaces they call into. This is currently a very active area of research.