{"id":981,"date":"2010-02-23T17:28:36","date_gmt":"2010-02-24T00:28:36","guid":{"rendered":"http:\/\/blog.mozilla.org\/sumo\/?p=981"},"modified":"2010-02-23T21:04:21","modified_gmt":"2010-02-24T04:04:21","slug":"the-evolution-of-sumo","status":"publish","type":"post","link":"https:\/\/blog.mozilla.org\/sumo\/2010\/02\/23\/the-evolution-of-sumo\/","title":{"rendered":"The Evolution of SUMO"},"content":{"rendered":"<p><em>(Guest post by <a href=\"http:\/\/coffeeonthekeyboard.com\/\">James Socol<\/a> of the webdev team. <\/em><em>Comments or questions? Head on over to <a href=\"http:\/\/coffeeonthekeyboard.com\/the-evolution-of-sumo-339\/\">James&#8217;  original blog post<\/a> and comment there!<\/em>)<\/p>\n<p>When I joined the <a title=\"SUpport dot MOzilla dot com\" href=\"http:\/\/support.mozilla.com\/\" target=\"_blank\">SUMO<\/a> team six  months ago, the team was just starting a discussion of \u201cwhere do we go  from here?\u201d\u00a0 SUMO was built on a <abbr title=\"Content Management System\">CMS<\/abbr> called <a href=\"http:\/\/tikiwiki.org\/\" target=\"_blank\">TikiWiki<\/a>, and  had diverged pretty significantly in two years. (David Tenser wrote <a href=\"http:\/\/blog.mozilla.org\/sumo\/2010\/02\/18\/the-bright-future-of-the-sumo-platform\/\" target=\"_blank\">a more detailed history<\/a> if you\u2019re interested.)<\/p>\n<p>After a few months of talking and testing\u2014and a few changes of  direction\u2014we\u2019ve decided that SUMO will follow our colleagues on <a title=\"Addons dot Mozilla dor Org\" href=\"https:\/\/addons.mozilla.org\/\" target=\"_blank\">AMO<\/a> and move to a custom web application, built on <a href=\"http:\/\/www.djangoproject.com\/\">Django<\/a>, a development  framework in Python.<\/p>\n<p>Why are we committing to such a dramatic new direction? Three major  reasons. <em>Keep in mind that SUMO was built  on TikiWiki 1.10, a little more than two years out of date.<\/em><\/p>\n<h3>Performance<\/h3>\n<p>TikiWiki is a very feature-rich application. An unfortunate trade-off  for us is performance, especially on a site serving 16 million users  every week. <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=532498\" target=\"_blank\">As our European users<\/a> in particular know, SUMO can  be unacceptably slow at times, especially when editing articles. Many of  the changes we made to the platform\u2014most of which were contributed back  over the past few months\u2014were to improve performance via tools like  output caching, database replication, and just refactoring. When we  evaluated the latest version of TikiWiki, we found that performance was  around the same, on average.<\/p>\n<p>In the new platform, we\u2019ll be taking advantage of techniques now  available, including query and template\/fragment caching and expect to  see dramatic performance improvements. We\u2019ll also be avoiding some of  the performance pitfalls that TikiWiki fell into over the years with  improvements to the security, database, and templating layers, among  others.<\/p>\n<p>But the biggest performance impact\u2014I expect\u2014will be moving from a  general-purpose CMS to a dedicated web application, focused on providing  the SUMO experience.<\/p>\n<h3>Hackability<\/h3>\n<p>To work on SUMO, you have to overcome a steep learning curve.  Components tend to be tightly-coupled, or grouped in unintuitive ways,  and are not as extensible as we\u2019d like. The lack of a comprehensive test  suite leaves changes to important sections of code open to introducing  regressions in otherwise unrelated, dependent areas. SUMO 1.x also fails  to function without a relatively complete copy of its database, which  makes it difficult for community members outside the company to  contribute.<\/p>\n<p>With the new platform, and some discipline from the team, our goal is  to improve all of these and make it easier for someone to get started  hacking on SUMO.<\/p>\n<ul>\n<li>We\u2019ll be striving to keep code loosely-coupled and  extensible\u2014including using existing or external libraries whenever  possible, and turning our own contributions into external libraries  where possible.<\/li>\n<li>We\u2019re adopting a test-driven development workflow to ensure that our  components are easier to safely hack, and lighten the load on our <abbr title=\"Quality Assurance\">QA<\/abbr> team by reducing regressions.<\/li>\n<li><abbr title=\"Test-Driven Development\">TDD<\/abbr> and Django will  make it easier to work without a copy of the database, using fixtures  and migrations to minimize the dependence on real data.<\/li>\n<\/ul>\n<p>The net effect of these decisions will be to lower the barrier to  entry to SUMO development, and hopefully make useful code available to  other projects. Wil Clouser <a href=\"http:\/\/micropipes.com\/blog\/2009\/11\/17\/amo-development-changes-in-2010\/\" target=\"_blank\">listed more strengths<\/a> of Django as a platform when  the AMO team decided to switch.<\/p>\n<h3>Strength in Numbers<\/h3>\n<p>By using the same platform as AMO, both teams will benefit from  sharing code and resources. We\u2019re already using the same template  adapter, database router, caching layer, and HTML sanitizer. As open  source developers often say: \u201cwith enough eyes, all bugs are shallow,\u201d  and by sharing code we get more eyes on it. We\u2019ll benefit from insights  the AMO team has gleaned by starting the process of moving from a PHP  framework to Python just ahead of us. We\u2019ll even be able to send code  reviews across teams and benefit from deeper knowledge of the various  problem domains we share: have a question about localization? Both teams  can share expertise and best-practices.<\/p>\n<p>Solving problems once and sharing the solution directly reduces the  amount of work both teams have to do. And when SUMO writes code in such a  way that AMO can use it, we can also release it separately so others  can benefit from our solutions\u2014and point out flaws and contribute  improvements.<\/p>\n<h3>Other Changes<\/h3>\n<p>Also among the changes coming in the next year:<\/p>\n<ul>\n<li><strong>Version Control System. <\/strong>Though we don\u2019t have a  specific plan in place, it seems likely that SUMO will be moving from  SVN to Git for source control. Because Git is distributed, it allows us  to use a more <a href=\"http:\/\/nvie.com\/archives\/323\" target=\"_blank\">collaborative  workflow<\/a>, and it\u2019s easier for us to push our code to public  repositories like <a href=\"http:\/\/github.com\/\">Github<\/a>.<\/li>\n<li><strong>Continuous Integration.<\/strong> We\u2019ll be using <a href=\"https:\/\/hudson.dev.java.net\/\">Hudson<\/a> for continuous  integration, which will automate our tests and alert us to potential  issues and regressions. The web QA team has also been working to make  sure our <a href=\"http:\/\/seleniumhq.org\/\">Selenium<\/a> tests can run  through Hudson, greatly increasing test coverage for a web application  like SUMO.<\/li>\n<li><strong>Interface Localization<\/strong>. One of the ways we plan to  improve the SUMO experience this year is by moving our interface  localization to <a href=\"http:\/\/www.gnu.org\/software\/gettext\/\">gettext<\/a>,  which is an industry-standard tool for localization. As we move parts  of the site from TikiWiki to Django, those new sections will be  localized via gettext, which helps us take advantage of our great  community with tools like <a href=\"http:\/\/localize.mozilla.org\/\">Verbatim<\/a>.<\/li>\n<\/ul>\n<h3>A Foundation for the Future<\/h3>\n<p>The goal of all of this work\u2014and it will be a lot of work\u2014is to put  SUMO on a solid foundation for future growth and, at the same time,  improve the experience for everyone\u2014from developers to contributors to  localizers to visitors. We have a daunting and aggressive road ahead of  us, but I\u2019m confident that we\u2019ll emerge in a better place.<\/p>\n<p>SUMO 2 is codenamed <a href=\"https:\/\/wiki.mozilla.org\/Support\/Kitsune\">Kitsune<\/a>, and is  already <a href=\"http:\/\/github.com\/jsocol\/kitsune\">up on Github<\/a>.<\/p>\n<p><em>Comments or questions? Head on over to <a href=\"http:\/\/coffeeonthekeyboard.com\/the-evolution-of-sumo-339\/\">James&#8217; original blog post<\/a> and comment there!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>(Guest post by James Socol of the webdev team. Comments or questions? Head on over to James&#8217; original blog post and comment there!) When I joined the SUMO team six &hellip; <a class=\"go\" href=\"https:\/\/blog.mozilla.org\/sumo\/2010\/02\/23\/the-evolution-of-sumo\/\">Read more<\/a><\/p>\n","protected":false},"author":174,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[47,24],"tags":[34981,553,815,793,814],"_links":{"self":[{"href":"https:\/\/blog.mozilla.org\/sumo\/wp-json\/wp\/v2\/posts\/981"}],"collection":[{"href":"https:\/\/blog.mozilla.org\/sumo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mozilla.org\/sumo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/sumo\/wp-json\/wp\/v2\/users\/174"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/sumo\/wp-json\/wp\/v2\/comments?post=981"}],"version-history":[{"count":0,"href":"https:\/\/blog.mozilla.org\/sumo\/wp-json\/wp\/v2\/posts\/981\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.mozilla.org\/sumo\/wp-json\/wp\/v2\/media?parent=981"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mozilla.org\/sumo\/wp-json\/wp\/v2\/categories?post=981"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mozilla.org\/sumo\/wp-json\/wp\/v2\/tags?post=981"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}