Slashdot Mirror


Ask Slashdot: How Often Do You Push To Production?

First time accepted submitter Stiletto writes "I work for a traditional 'old school' software company that is trying to move into web services, now competing with smaller, nimbler 'Web 2.0' companies. Unfortunately our release process is still stuck in the '90s. Paperwork and forms, sign-off meetings, and documentation approvals make it impossible to do even minor deployments to production faster than once a month. Major releases go out a couple of times a year. I've heard from colleagues in Bay Area companies who release weekly or daily (or even multiple times a day), allowing them to adapt quickly. Slashdotters, how often do you push software changes into production, and what best practices allow you to maintain that deployment rate without chaos?"

33 of 182 comments (clear)

  1. Visual Studio by PieDkaj · · Score: 5, Funny

    I push to production fairly often. Our company's Visual Studios have been configured with test cases that make testing easy, and therefore we can push to production much more often than those who do not use Visual Studio.

    1. Re:Visual Studio by MyLongNickName · · Score: 4, Funny

      Hello, Pie. I am afraid I can't pay you full price for this review. Our contract clearly states a 300 word minimum, first post, and at least one real life example of someone using the product. You met one of the three criteria, but this isn't enough. Please try harder next time.

      --
      See my journal for slashdot ID's by year. Mine created in 2005. http://slashdot.org/journal/289875/slashdot-ids-by-year
    2. Re:Visual Studio by avandesande · · Score: 4, Funny

      It's a 'shroll'

      --
      love is just extroverted narcissism
    3. Re:Visual Studio by jameshofo · · Score: 2

      Don't you know? They can't put anything on the internet that's not true!

      --
      Good leaders run toward problems, bad leaders hide from them.
  2. Be careful that 'nimble' doesn't become 'untested' by Anonymous Coward · · Score: 4, Insightful

    Why not talk to your colleagues and suggest ways of speeding things up?

    It's good to talk.

    Release when ready is quite a good frequency :-)

  3. chaos by Anonymous Coward · · Score: 4, Insightful

    >> Slashdotters, how often do you push software changes into production,

    3 times a month, generally.

    >> and what best practices allow you to maintain that deployment rate without chaos?"

    IMHO, you can't. Having a deadline every week, programmers cut corners to make dates. QA cuts corners to make the date. This much code changing without any "bake time" inevitably leads to an unstable code base, full of "corner cuts" from the last N releases.

    1. Re:chaos by jythie · · Score: 2

      This pretty much sums up my thoughts. While there is always value in cutting away unnesseary beucracy, once that is gone you get into the tradeoff between flexibility and stability. Plenty of web-centric companies follow waterfall or other risk adverse patterns and do just fine.

      So it really comes down to examining how important rapid changes vs stability/validity are. Many of those 'web2.0' companies that can adjust rapidly are pretty flakey and have no paper trail to be able to show auditors (or underwriters/insurance carriers) that they have done due dillagence.. nor can they generally cope with mutliple stakeholders. Ever wonder why so many of those companies have a 'my way or the highway' attitude twoards feature sets? It isn't just arrogence, it is their development process. This works really well for some companies and can burry others.

      So at the end of the day, you need to sit and figure out what is the best balance for one's particular company.. not look at young sexy rising stars in tangental industries and try to emulate them.

  4. As soon as it's ready by knetcomp · · Score: 5, Informative

    Most companies I've worked for have a continuous deployment cycle. All changes, from small bug fixes to major releases go through a ticketing system. After the ticket has gone through all the steps (code review, QA, UAT) it goes into the deployment manager's queue, who then deploys the change to production depending on each ticket's priority. This means that in general, changes go out as soon as they are ready, sometimes up to two times a day for the same project.

  5. Set a schedule by Anonymous Coward · · Score: 2, Insightful

    I think customers don't really NEED the frequent updates that you're getting used to seeing with apps. I would think only the foolish really expect rapid releases. That's been a side-effect of "apps" - not what we expect of software in the business world. If you set and can stick to a release schedule, I think your clients will appreciate it.

    End users find updating all the time a headache - only super-geeks like us like seeing every possible iteration of an application. The average user doesn't want to be bothered with YET ANOTHER UPDATE (ahem... Flash and Java). But they do appreciate when you have their security interests at heart (like an out-of-cycle Windows Update).

    I would say every other month for 'service releases' - every six months for major releases. The biggest exception being "out of cycle" emergency releases when deemed necessary.

    1. Re:Set a schedule by JohnFen · · Score: 2

      I agree totally with this, but I may be biased. As a user, I find this rapid-release trend to be incredibly annoying. So annoying that it is a factor against my using a particular piece of software. Aside from emergencies, I cannot think of any compelling benefit rapid-release gives me, and it gives me two main headaches: an ever-changing piece of software, and the introduction of new bugs at any random time -- so it's a net minus.

  6. Depends by falcon5768 · · Score: 5, Insightful

    This really seems like it depends on WHAT your company does. Pushing to production a browser or a utility weekly or even daily is a lot easier and less disruptive than say a OS or a major software product thats used by hundreds of large companies. I would say the biggest obstacle is to get rid of the paper process, bring in git or something else for changes that everyone can view, and limit the signing offs to production, QA, or gold master (or whatever your company calls them) while keeping the dev stuff out of it so that the dev team can be more flexible. Also have a pretty good test lab/suite that will enable you to test stuff on the fly on multiple machines and configuration. Case in point Apple has a testing lab of EVERY machine they have made for the last 3 years in multiple configurations for their software. Granted they are a closed ecosystem so its easy for them to do that, but generally you could get a good roundup of machines to use that span from the insane configs to the "are you fing kidding me you are using that???" type stuff.

    --

    "Slashdot, where telling the truth is overrated but lying is insightful."

  7. Sounds like you have a good process. by John+Hasler · · Score: 3, Insightful

    Or were you looking forward to having to explain why your database got cracked and leaked 2 million passwords or that tens of thousands of customer machines will have to be manually patched to repair the damage done by your last update?

    --
    Warning: this article may contain humor, sarcasm, parody, and perhaps even irony. Read at your own risk.
    1. Re:Sounds like you have a good process. by Anonymous Coward · · Score: 2, Insightful

      Wait, what? How about explaining why your database got cracked due to your *lack* of updates?

      You can do rapid deployments poorly and you can do them well. But when you really really need to deploy and *can't* because of the red tape involved, you're in bad shape.

  8. when the business calls for it by Anonymous Coward · · Score: 3, Interesting

    Sounds like yours wants a process. You push as the business feels comfortable with it.

    But think about this...

    Lets say you are dealing with peoples financial statements. You want to make sure they are pretty good and accurate. If it is wrong people loose money and you get sued. Your audience dislikes sudden change. So you put process around that to insure that (test/qa/forms/etc).

    Now lets say you are running a forum where it is the stats from some online game. It can be a little off. Your audience likes sudden new features. Stuff might not render correctly... But you can fix it tomorrow and the only gripe will be on a forum.

    One business you have to be careful in creating 0 downtime and 0 mistakes. The other, a mistake here and there is tolerated and can be fixed at will.

    Now I am not saying you can only create the first one where it takes a month or two for a push. I am saying those sorts of situations where caution is warranted. If you want a quicker process your process will need to be able to break things into small pieces and a bad ass testing system. Some situations they are contractually obligated to go at a particular rate. If you can not see the difference then I suggest you let your question simmer for a few years and get some exp doing it.

  9. Read the Facebook Model? by Malenx · · Score: 4, Informative

    Slashdot posted this story earlier,

    http://www.businessweek.com/articles/2012-10-04/facebook-the-making-of-1-billion-users

    Interesting read on how Facebook, arguably the largest website challenge so far this century updates daily.

  10. From Decision to Release in less than an hour by preaction · · Score: 4, Informative

    At $dayjob, we decide to release and our process takes about an hour. All the automated tests are run by Jenkins CI, and are run again during the release on every box being deployed to in order to ensure stability. We tend to deploy to User-Acceptance Testing boxes before full production boxes.

    At the game company, we wrote a system that works like:

    1) Tag release in git
    2) Release is pushed to beta servers. Beta players get immediate updates.
    3) Click button in Jenkins to run stable release

    Completely automated, even down to restarting the servers in a staggered fashion to ensure that users always have a game to connect to (even if they have to disconnect in 20 minutes to receive the client update).

    Automated testing, Continual Integration, and automated release processes (including cfengine3 and custom Perl scripts working with Git) come together to produce a painless release process. Since it's easy, we can do it whenever we want. As soon as it starts releasing bad code, we'll have to put process in place to ensure bad code does not reach our stable users.

  11. The goal isn't to push to production more often by Omnifarious · · Score: 3, Interesting

    The goal is to always be able to push to production. Have a continuous integration and test system that allows you to have confidence that you can always push the latest build to production. Automate as much of your testing as possible so your build and test process can produce something that a human test team actually has to work hard to break.

    Also, you should pipeline your approval process. Always be in the process of approving a new build to go out while you're working on the next one. This will put a lot of pressure on this process to be faster and more efficient. Holding the people responsible for this process accountable for production breaks will put counter-pressure ensuring that they do not become more efficient at the expense of actually doing the job.

  12. It depends on how critical the product is by Glires · · Score: 4, Insightful

    Sometimes all of those meetings and paperwork serve a useful purpose when an application is critical. If a one-day build of instagram doesn't work, then the only consequence is that there are fewer grainy photographs of someone's cat. If a one-day build of a power distribution system doesn't work, then an entire city loses electricity.

    --
    -Glires
  13. As soon as the automated tests pass by DeadSea · · Score: 4, Interesting

    Push to production as soon as the (many) automated tests that you have pass. This means you should have comprehensive unit tests and tests that run in the browser, probably written in Selenium. You'll also want to script your release so that you can do it with the push of a button. Once the tests pass, and the mechanics of a release are trivial, there is little reason to hold up a release.

    I worked for a top 500 website (East coast) for 7 years that did weekly releases. Since I left, they decided that wasn't fast enough and now release multiple times per week. I'm now self-employed on my own website and release within an hour of finishing development of a feature.

    I started my development career writing firmware for laser printers. When you are shipping code on a physical product, the cost of bugs can be quite high. Especially when it leads to returns or recalls because customers are not satisfied. Our release cycles there were 6 months+. Quite appropriately, IMO.

    On the web, the cost of bugs is much lower. In most cases it is the only cost of another release. Sometimes it could cost more because of downtime, but good automated test coverage mitigates that risk pretty well (especially if there is load testing involved). The worst case would be data-corruption, but I've never actually seen that in practice from a release, that has only been related to hardware failure or accidents in my experience.

  14. Re:Be careful that 'nimble' doesn't become 'untest by Anonymous Coward · · Score: 4, Interesting

    I think the submitter IS talking to colleagues and looking for suggestions right here...

    We do a major release about every 2 months, with maintenance stuff going every 2 weeks. There's pressure to speed this up. On the release side of things we're streamlining our documentation requirements and automating everything we can. We're also moving to a continuous delivery model for our regular test builds... if it's tagged, it goes to QA and an automagical report goes out with a list of resolved defects. This requires the developers to package things cleanly and consistently, but it also gives us an amazing amount of data to mine and I like to think that it helps to improve our overall quality.

    This doesn't address requirements gathering or development methodologies, but I can't really speak to those.

  15. As a customer by ZombieBraintrust · · Score: 4, Insightful

    As a customer I hate daily updates to my applications. Unless the application is in Alpha or Beta it is very disconcerting to see updates at that frequency. I only want to see an update that quick when something is really broken. If brokeness is a daily occurence then maybe you need to slow down.

  16. Quit and move to a company with a process you like by cryfreedomlove · · Score: 2

    Life is short. You seem like a talented person who knows what you want. If you current company does not modernize in the next 6 months then they are holding you back. The market is starved for really talented software engineers. Take the time to research your opportunities and then jump ship if the one you are on is still stuck in the 90's.

  17. Re:Daily? by SchroedingersCat · · Score: 2

    That's not true. If you have good automated regression, have reasonable coverage and do continuous integration you can cut the release as soon as you have a clean regression. It may take a few hours or a day to prep the release (sign-offs, paperwork, push, etc) but it can be done in parallel. There is always a balance. Prepping the release incurs costs in manpower and resources. Pushing daily may not be practical if cost/benefit is not there. For example if it takes 6 hours to prep the release then doing so for a wording change on the page that get 10 hits per day is not practical. on the other hand, if dev team cranks out dozen cool and exciting features daily it may be worth to staff release and QA automation teams to allow them to prep multiple releases per day.

  18. Path to Victory by Electrawn · · Score: 3, Interesting

    I am a Release manager at Acquity Group and have worked for "Old School" software companies that have their eyes blazing at all the new web companies that release release release all day long.

    Here is the abbreviated philosophic path to victory:

    DevOps.

    Your developers need to act like operations (knowing how the code is deployed and configuration settings, routes and the like) guys and your operations guys need to start coding (as in ruby for puppet and chef, automation and automation and automation)

    This leads to...

    Infrastructure as Code.

    Hire a Release Engineer or convert a sysadmin to start automating builds. Now you start automating code deployments, you start automating infrastructure deployments so they are repeatable.

    This leads to...

    Test Automation.

    Now you need to stop focusing on smoke testing and have test automation engineers write automated test code.

    One more thing...

    Automated Rollback

    When things go nuts, with fast deploys you need fast rollback. Capistrano is a great tool for deploying this way, rollback is very easy.

    Now you can ...

    Continuous Delivery.

    Great, you got this far, your builds, testing, deploys are automated!

    For Developers:

    Coding for Continuous Delivery is a different paradigm where unfinished code makes it to production. This means that in the production configuration, settings for the new code must be activated by switches to turn new feature sets on. You don't want that unfinished code mucking up your site, right?

    People Processes:

    Do you have CAB boards and ITIL processes? Great, make them faster and more as DEV/TEST/QA becomes automated and just focus on UAT/Prod environments. See this book: http://www.amazon.com/The-Visible-Ops-Handbook-Implementing/dp/0975568612/

    I can also gloss over on waterfall/Agile and hybrid software models.

    Finally, unless your culture wants to shift, it may be damned near impossible to change the culture unless management wants to. If it's doomed, it's doomed!

  19. Gotta raise his Joel Test Scores, first by Safety+Cap · · Score: 5, Interesting

    If he can't deploy to production in one step, he needs to fix that first.

    I'm not talking about from dev box to production. I'm talking about the physical act of someone running a single command (or for the Winlazy, pressing a button) then walking away. All code checkouts from source control, database changes, app server code deployments, web server restarts—whatever—happen without user intervention.

    He should also be able to roll back in one step.

    For all the meetings, forms, etc., it sounds like there is A LOT of CYA in that company. In that case, it is cultural and can only be changed from the top. Until/unless the company becomes less risk adverse, there is no point in trying to become more "agile" (i.e., risk-accepting) except making your job easier. Build your tools/scripts/whatever to make it easier to do stuff.

    tl;dr: If you want a more nimble company, switch jobs.

    --
    Yeah, right.
    1. Re:Gotta raise his Joel Test Scores, first by Lordofthestorm · · Score: 3, Informative

      Absolutely

      One-step prep/audit/deploy/post-deploy audit/rollback/post rollback audit are critical and not dependent on your tool stack, pretty much any stack can be made to perform this function with proper attitudes/process design/automation. (also needs some break-point analysis ~ things like DB schema changes complicate roll-backs if you don't want to lose production data - some low latency design shops leave error checking out of certain high traffic code areas on purpose and they'll break on a rollback. This is also true of internal product dependency with multiple-roll outs that overlap, I'm sure there's many examples).

      Where/what you check is situation dependent ~ ie name/value config pairs, binary checksum's, target env state/settings, do you have enough drive space, etc ~ depends on your particular organizational weaknesses.

      I'm a big fan of buttons, downstream users tend to regress as you make their environments easier until button clicking is your final stop. Besides, humans make typo's, just accept it, buttons rock.

      Meetings/forms - I'd recommend pushing most of this to electronic data entry that is prefilled based on use case ~ saves a ton of time/work, gives you clearly defined queues and gives you CYA all at the same time. I'm a big fan of really limiting facetime meetings that don't involve some type of problem related brainstorming on a whiteboard. The rest are typically low bandwidth information exchanges that are best communicated through data systems.

      Nimble company - You can have nimble areas in larger companies, the data-driven ins/outs are critical in that, you'll never escape CYA in a large corporate environment, just build it into your framework and make sure to publicly display your KPI's, people will go after easier targets. You need a champion though, its lonely on the bottom.

      elephants/peanuts ~ we usually talk about monkeys/banana's but that works to. ;)

    2. Re:Gotta raise his Joel Test Scores, first by Lordofthestorm · · Score: 3, Insightful

      Oh yes, and its worth noting that if you're not careful - easy deployment can quickly result in lower software quality. If you make deployment too easy quality drops like a rock if people think they can fix it easily the next day or even intraday. Some cultures reward by the # of releases/features in prod without looking at the total impact. 'Faster' is not necessarily better although useful in certain situations certainly.

  20. A few times over 15 years. Ideally only once. by Yoda222 · · Score: 2
    On my recent project, we aim to deliver only once the software. Off course you always have to do some small modifications after the first productions test. In my last company after the launch of the production, I remember of 4 different push in production in one year. But it was a brand new product. (I have left the company since that time, but as far as I know there was no new modification in the production. A new feature should be pushed in a near future)

    In my current company, in one year I have not seen any modification on the main product, if we don't count new launched product. (in fact no change on the real product, but change in the software used to manage the product are more frequent)

    Oh, by the way, when I say launch of the production, it's really called a launch, with a launcher, and satellite on the top of it.

  21. GitHub as an example by kav2k · · Score: 3, Informative

    I invite you to read the GitHub blog post on how they deploy.

  22. Time to market is not always the metric by einar2 · · Score: 3, Insightful

    It depends on your business which metric is meaningful. E.g. for a global bank, quality is more important than time to market. Make sure that your business really gains something by playing release time against quality.

  23. Re:Weekly. by terbeaux · · Score: 2

    If parent bothered to post AC then they should have mentioned that they work at Facebook and have like 500,000 servers. See parent links for subtle indication.

  24. Updates daily? by Anonymous Coward · · Score: 2, Funny

    Many a user of that site wishes they would STOP updating.

  25. Whenever I need to test my code by theinvisibleguy · · Score: 2

    And don't want to do it myself.