There is no direct native support for upgradable contracts in Ethereum. This is because pure decentralization cannot be achieved if a contract is upgradable. Once contract code becomes immutable, then only you can trust that the code and its logic will never be changed. However, due to invisible bugs present in contracts, a lot of hacking has taken place; therefore, ZeppelinOS came up with upgradable contracts to avoid bugs in contracts, even if they have already been deployed.
ZeppelinOS should not be used until there is a real need for it. You should write immutable contracts to have pure decentralization for your applications. If you plan to upgrade your contracts in future, then you should consider using ZeppelinOS.
In the next chapter, we will build our own ERC20 token from scratch. We will go through the process and design decisions, using the tools and libraries...