Static schemas can enforce many things at compile time, whereas dynamic schemas don’t. This means that static schemas are more strict but neither forwards or backwards compatible (you can’t add a new field, remove an old field, change a field), but dynamic schemas can do any of those with the cost of having schema skew.