{"action":"created","issue":{"url":"https://api.github.com/repos/optimizely/oui/issues/360","repository_url":"https://api.github.com/repos/optimizely/oui","labels_url":"https://api.github.com/repos/optimizely/oui/issues/360/labels{/name}","comments_url":"https://api.github.com/repos/optimizely/oui/issues/360/comments","events_url":"https://api.github.com/repos/optimizely/oui/issues/360/events","html_url":"https://github.com/optimizely/oui/issues/360","id":146701930,"number":360,"title":"Implement a better release process to make upgrades less painful","user":{"login":"danoc","id":916038,"avatar_url":"https://avatars.githubusercontent.com/u/916038?v=3","gravatar_id":"","url":"https://api.github.com/users/danoc","html_url":"https://github.com/danoc","followers_url":"https://api.github.com/users/danoc/followers","following_url":"https://api.github.com/users/danoc/following{/other_user}","gists_url":"https://api.github.com/users/danoc/gists{/gist_id}","starred_url":"https://api.github.com/users/danoc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/danoc/subscriptions","organizations_url":"https://api.github.com/users/danoc/orgs","repos_url":"https://api.github.com/users/danoc/repos","events_url":"https://api.github.com/users/danoc/events{/privacy}","received_events_url":"https://api.github.com/users/danoc/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":3,"created_at":"2016-04-07T18:06:57Z","updated_at":"2016-04-08T17:20:37Z","closed_at":null,"body":"OUI has been releasing often and, due to the \"everything is global\" nature of CSS, many changes are not backwards compatible. This leads to _huge_ releases full of breaking changes. \r\n\r\n**Problems with the current system:**\r\n\r\n1. Upgrading the Optimizely app to support a large release is painful and error-prone.\r\n2. \"Unreleased\" breaking changes prevent us from being able to release smaller patch and feature (backwards compatible) changes. This is mostly a problem in the Optimizely app since other repositories have less incentive to upgrade (especially since the documentation is now versioned).\r\n\r\nFWIW, I think it's fine that we release often because our audience (ourselves and third-party Optimizely Apps developers) are either willing to do the upgrade work or are content sticking to the version they are on.\r\n\r\n**Proposal to fix this problems:**\r\n\r\nWe can fix these problems by adopting a new release policy: All developers that want to merge a breaking change must release a version after merging and update the Optimizely app to support it.\r\n\r\nIf we follow this:\r\n\r\n1. Breaking changes should never sit in the \"Unreleased\" queue for more than a few minutes.\r\n2. OUI should always be ready to release a backwards compatible release.\r\n3. Optimizely should always be on the latest version of OUI to allow backwards compatible changes to be pulled in automatically.\r\n\r\n**Potential pain points:** \r\n\r\n1. We currently only care that the Optimizely repo is on the latest version of OUI. This will be more painful if we have to always upgrade multiple repositories.\r\n2. We might begin to second-guess if breaking changes are worth the hassle of upgrading. (I'd also argue that this can be a good thing.)\r\n3. We'll have to communicate to ensure that we're not trying to merge two breaking changes at the same-ish time.\r\n\r\n**Longer term solution:**\r\n\r\nTom and I spoke a lot about this, but we may want to investigate splitting the components off into small individual repos. I'm concerned about increased maintenance cost and a (potentially) weird dependency tree, but apparently the [Financial Times has been doing this successfully](http://origami.ft.com/) and it is similar to how [Intuit](https://github.com/inuitcss) is structured. I think this is worth investigating in a few months.\r\n\r\nRegardless, the first step towards this would be grouping components within their own directories. I think that is something we should start doing to make our codebase more modular. (I'll create another issue about that later.)\r\n\r\n***\r\n\r\n@tscanlin, @kwalker3690, @daverau-optimizely – I'd love to hear thoughts and ideas!"},"comment":{"url":"https://api.github.com/repos/optimizely/oui/issues/comments/207524079","html_url":"https://github.com/optimizely/oui/issues/360#issuecomment-207524079","issue_url":"https://api.github.com/repos/optimizely/oui/issues/360","id":207524079,"user":{"login":"danoc","id":916038,"avatar_url":"https://avatars.githubusercontent.com/u/916038?v=3","gravatar_id":"","url":"https://api.github.com/users/danoc","html_url":"https://github.com/danoc","followers_url":"https://api.github.com/users/danoc/followers","following_url":"https://api.github.com/users/danoc/following{/other_user}","gists_url":"https://api.github.com/users/danoc/gists{/gist_id}","starred_url":"https://api.github.com/users/danoc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/danoc/subscriptions","organizations_url":"https://api.github.com/users/danoc/orgs","repos_url":"https://api.github.com/users/danoc/repos","events_url":"https://api.github.com/users/danoc/events{/privacy}","received_events_url":"https://api.github.com/users/danoc/received_events","type":"User","site_admin":false},"created_at":"2016-04-08T17:20:37Z","updated_at":"2016-04-08T17:20:37Z","body":"@tscanlin – Haha, yes. This one is pretty painful. I'm most of the way there though."}}