<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><description>Beanstalk is your single process to commit code, review with the team and deploy the final result to your customers.</description><title>Beanstalk</title><generator>Tumblr (3.0; @beanstalkapp)</generator><link>https://blog.beanstalkapp.com/</link><item><title>The Need for Focus in Product Development &amp; Client Services</title><description>&lt;p&gt;As the clock winds down on 2016, there’s a growing emphasis for 2017 and the years to follow. And that emphasis is on the importance for knowledge workers to be able to focus in order to do their best work. The tool sets and work environments of the modern “office worker” are maximized for distraction, not for in-depth output. How can teams — big or small — ensure they’re set to be successful by consistently cranking out great work?&lt;/p&gt;

&lt;p&gt;In his book &lt;a href="http://calnewport.com/books/deep-work/"&gt;Deep Work&lt;/a&gt;, Cal Newport makes the case that the people who learn to minimize distractions and increase their ability to focus for long stretches will be the most successful in the decades to come. He lists what he believes are the two core qualities required in order to thrive in the coming years:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The ability to quickly master hard things.&lt;/li&gt;
&lt;li&gt;The ability to produce at an elite level, in terms of both quality and speed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And the key to growing these abilities is to learn to work deeply. What is “Deep Work”? According to Newport, this type of work would be defined as:&lt;/p&gt;

&lt;p&gt;&amp;gt; Professional activities performed in a state of distraction-free concentration that push your cognitive abilities to their limit. These efforts create new value, improve your skill, and are hard to replicate.&lt;/p&gt;

&lt;p&gt;And his end hypothesis is that this skill is becoming both more important and increasingly rare in our current economy, and those who master it will thrive. As a software engineer himself, Newport understands the importance. This quote from Rands &lt;a href="http://randsinrepose.com/archives/your-best-work/"&gt;nails it&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&amp;gt; If you’re a software engineer, your craft is code and you’re at maximum productivity when you have long uninterrupted minutes and each unexpected visual and auditory interruption is a unique opportunity to completely lose your train of thoughts, context, and hard to recover mental momentum.&lt;/p&gt;

&lt;p&gt;How about your team? Do your designers, developers, and teammates in all roles feel that they’re able to do their very best, day in and day out? From our experience, that is not the case for many.&lt;/p&gt;

&lt;p&gt;Early in 2016, I spent time doing in-depth interviews with 30 or so Beanstalk customers. When asked what the biggest pain point was, the following comment sums up a common sentiment:&lt;/p&gt;

&lt;p&gt;&amp;gt; Keeping on top of things (Slack, bots, Beanstalk, Basecamp, Zendesk) is taking more and more time, especially since I wear so many hats on the team. Having multiple tools to manage projects and client communication leads to feeling burnt out. There is a desire to find tools that keep things all in one place.&lt;/p&gt;

&lt;p&gt;From what we’ve heard, achieving focus is a difficulty more most teams. If you&amp;rsquo;re building a product or servicing clients, how can you improve in this area?&lt;/p&gt;

&lt;p&gt;At Wildbit, we think about this a lot and having taken many of the following steps.&lt;/p&gt;

&lt;h3&gt;Establish the culture&lt;/h3&gt;

&lt;p&gt;First, making any improvements in this area will be very hard if there’s no buy-in from your team at large. Having half of a team attempt to focus while the other half is responding to every email as they arrive, sending DM’s without thought, or stopping by the office or cubicle for any question is sure to lead to failure. While it is possible to make some small changes to your own habits, you’ll benefit far more — and experience less frustration — when this is a team effort.&lt;/p&gt;

&lt;p&gt;And (hopefully) it starts at the top. Newport advocates for knowledge workers to sell their employers/managers on this entire concept. And here at Wildbit, we’re fortunate to have founders who understand the importance of doing our best (there’s a reason we have values &lt;a href="http://d.pr/i/iiEW"&gt;like this&lt;/a&gt; highlighted on our site). When the suggestion was made early in 2016, our co-founder Natalie read Deep Work herself. And it had such an impact that focus was a key theme for our annual team retreat in 2016.&lt;/p&gt;

&lt;p&gt;Focus is important enough that the new Wildbit office was designed with this in mind. Designers, developers, product managers, marketers, and writers … we all need quiet and solitude to focus on our tasks in order to product our best work.&lt;/p&gt;

&lt;p&gt;It’s why &lt;a href="http://wildbit.com/blog/2015/08/05/wildbit-office-tour"&gt;our office&lt;/a&gt; was designed with &lt;a href="http://wildbit.com/blog/2015/03/06/wildbit-hq-ending-the-open-office-epidemic"&gt;a purpose&lt;/a&gt;.&lt;/p&gt;

&lt;figure class="tmblr-full" data-orig-height="638" data-orig-width="960" data-orig-src="https://d2mxuefqeaa7sj.cloudfront.net/s_177411605D8F2DFAB3E19B17575DA2A39D67F0DF747EDAC47D7F199A7C05761D_1481064540002_office-4th-floor-hallway.jpg"&gt;&lt;img src="https://64.media.tumblr.com/1de8036df8dbb85932b1b210cc0cfce3/tumblr_inline_p9f9wkxGn61qz9q2i_540.jpg" width="492" alt="Private office with doors are a must" data-orig-height="638" data-orig-width="960" data-orig-src="https://d2mxuefqeaa7sj.cloudfront.net/s_177411605D8F2DFAB3E19B17575DA2A39D67F0DF747EDAC47D7F199A7C05761D_1481064540002_office-4th-floor-hallway.jpg"/&gt;&lt;/figure&gt;

&lt;p&gt;And this is not something that is fixed once, then you’re set. In a recent town hall meeting, Natalie shared that it felt like as a team we were slipping back into old habits. This time around, she asked the entire team to read Deep Work so we’re all on the same page and reinforcing the practices.&lt;/p&gt;

&lt;p&gt;In order to have some success with a culture of this sort, the entire team should follow the practices.&lt;/p&gt;

&lt;h3&gt;Choose the right tools&lt;/h3&gt;

&lt;p&gt;Once a team has established what is important to them, you can start to look for the tools that can support your priorities. And when it comes to working as a remote team, this requires tools that allow for communication without distraction. As the Internet matures, it’s becoming more clear that how we communicate affects our work and how we feel. As Jason Fried mentions in &lt;a href="https://m.signalvnoise.com/is-group-chat-making-you-sweat-744659addf7d#.8wo33jbw5"&gt;Is group chat making you sweat?&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&amp;gt; We’ve also seen strong evidence that the method and manner in which you choose to communicate has a major influence on how people feel at work. Frazzled, exhausted, and anxious? Or calm, cool, and collected? These aren’t just states of mind, they are conditions caused by the kinds of tools we use, and the kinds of behaviors those tools encourage.&lt;/p&gt;

&lt;p&gt;As with many other teams, Wildbit uses a combination of Slack and Basecamp to achieve the goal of communication with minimal distraction. Both services include settings that enable us to keep up to speed on projects and activities related to our work (as well as build bonds with teammates), but without a constant disruption during the workday.&lt;/p&gt;

&lt;p&gt;Slack allows you to set yourself to &lt;a href="https://get.slack.help/hc/en-us/articles/214908388-Do-Not-Disturb-and-snooze-settings"&gt;DND&lt;/a&gt; (do not disturb), while Basecamp includes several related settings (latest activity, reports, &lt;a href="https://basecamp.com/1679267/announcements/55"&gt;email summaries&lt;/a&gt;, notifications, and &lt;a href="https://basecamp.com/3/work-can-wait"&gt;work can wait&lt;/a&gt;. And we’re all encouraged to turn off notifications, quit our communications tools, and even work away from our computers (example: we are all agreed to never use the @here qualifier in our product channels, instead mentioning specific people with their unique handles).&lt;/p&gt;

&lt;p&gt;However, the tools are only as good as the resolve of the person sitting in the chair. You twist all the knobs and pull all the levers to minimize distractions, then sabotage your efforts by “checking in” manually. This is why the culture is the foundation for doing consistent, focused work.&lt;/p&gt;

&lt;h3&gt;Build habits and routines&lt;/h3&gt;

&lt;p&gt;Last, each individual contributor on a team can help themselves do their best work by creating routines that build habits. After, all the end results of our lives are built on the little things we do with regularity. Or, as John Maxwell puts it:&lt;/p&gt;

&lt;p&gt;&amp;gt; You will never change your life until you change something you do daily. The secret of your success is found in your daily routine.&lt;/p&gt;

&lt;p&gt;At Wildbit, this comes out in different ways for people in various roles.&lt;/p&gt;

&lt;p&gt;Artem, one of our developers, has a strict routine for doing focused work, yet still make time to give advanced support to our customers. Each day, he does his project/feature work that requires depth and focus first. Then, he ends each day cleaning out his support queue.&lt;/p&gt;

&lt;p&gt;This allows him to use his highest levels of energy on the things that will move our products forward and helping in customers in the long run. But he also gives fantastic support to our customers right now, consistently. And that consistency wins him a lot of brownie points with our customer success team: we know we can count on him following this routine, which helps us provide better support as well.&lt;/p&gt;

&lt;p&gt;Another example is our customer success team. With 5 people supporting 3 products, we split our time between proactive success efforts and reactive support efforts. Providing top notch customer support has always been highly valued at Wildbit, but being in the inbox all day can make it hard to focus on a larger initiative.&lt;/p&gt;

&lt;p&gt;To ensure that everyone makes the most of their success time, we take entire days to work on success related items. Even further, we try to schedule our focus days back to back so there is less attention residue from the support given in the previous day.&lt;/p&gt;

&lt;p&gt;Putting little steps in place can have a big impact over time.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;Cultivating an environment that both values focus and produce great work is not an easy task. But it’s a vital one. Most of us are figuring it out as we go, wading through the tools, processes, and sources of entertainment that fragment our attention. Making change in this area requires proactive efforts.&lt;/p&gt;

&lt;p&gt;The details above cover some of how we’re achieving this here at Wildbit. If you and your team have fought the same battle, we’d love to hear what’s worked for you. Let us know!&lt;/p&gt;</description><link>https://blog.beanstalkapp.com/post/154389767359</link><guid>https://blog.beanstalkapp.com/post/154389767359</guid><pubDate>Mon, 12 Dec 2016 15:53:29 -0500</pubDate><dc:creator>chrisbowler</dc:creator></item><item><title>Tower for Windows Released</title><description>&lt;p&gt;Our good friends at &lt;a href="https://www.git-tower.com/"&gt;Tower&lt;/a&gt; have an exciting announcement. Their excellent Git client for macOS is now &lt;a href="https://www.git-tower.com/blog/tower-for-windows-launch/"&gt;available for Windows&lt;/a&gt;! It’s written natively with stability and performance in mind. This brings all the great features from their macOS client to Windows.&lt;/p&gt;

&lt;p&gt;Tower integrates with Beanstalk, allowing you to connect your Beanstalk account and create branches, new remote repositories, and more all from the app. Reverting a commit is as simple as right-clicking on a commit and selecting “Revert …” to roll back. If a merge has a conflict, it’s simple to resolve with Tower’s Conflict Wizard. And stashing and fetching is automatic with Tower.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/working-copy.png" alt="Git Tower working copy screenshot" class="image-center no-border" width="492"/&gt;&lt;/p&gt;

&lt;p&gt;If you’re a Git novice, Tower has you covered with extensive documentation, video tutorials, and an ebook. And if you’re a Git expert Tower includes great features you’ll love like support for git-flow and submodules.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/conflict-wizard.png" alt="Git Tower conflict wizard screenshot" class="image-center no-border" width="492"/&gt;&lt;/p&gt;

&lt;p&gt;We’re excited that our Windows customers can experience what an excellent Git client Tower is!&lt;/p&gt;</description><link>https://blog.beanstalkapp.com/post/153357527649</link><guid>https://blog.beanstalkapp.com/post/153357527649</guid><pubDate>Fri, 18 Nov 2016 16:52:44 -0500</pubDate><dc:creator>briankerr</dc:creator></item><item><title>Help your team transition to Git</title><description>&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/transition-git-header.png" style="border:0px" width="492" alt="image"/&gt;&lt;/p&gt;

&lt;p&gt;If you work in web development, you know how difficult it is to change from one tool to another. It can disrupt your workflow, and adjusting can be an uncomfortable and painful experience.&lt;/p&gt;

&lt;p&gt;On top of that, there’s a learning curve involved to get teammates up to speed with the new way of doing things. And if the adjustment is unbearable, you may find yourself wondering, “Was this change really worth the hassle?”&lt;/p&gt;

&lt;p&gt;Change can be difficult, especially in the tech industry. But without being open to the idea, you could miss out on new innovations that&amp;rsquo;ll make doing your job easier. &lt;/p&gt;

&lt;p&gt;That’s what we’re about at Wildbit. Today we’re going to talk about how Git brings you one step closer to doing just that.&lt;/p&gt;

&lt;p&gt;Most experienced developers know the &lt;a href="http://guides.beanstalkapp.com/version-control/intro-to-version-control.html#why-is-version-control-important"&gt;importance of version control.&lt;/a&gt;
But this article will highlight the benefits of Git, and how to help your team transition to it. &lt;/p&gt;

&lt;p&gt;First, let’s discuss what makes Git different from other VCS like Subversion.&lt;/p&gt;

&lt;h2&gt;What makes Git different?&lt;/h2&gt;

&lt;p&gt;Git is a &lt;i&gt;distributed&lt;/i&gt; VCS, while SVN is a &lt;i&gt;centralized&lt;/i&gt; system based on CVS. Centralized means that there is a single repository on a remote server that all team members work on. The centralized server stores code updates and, as long as that server is online, the code is accessible.&lt;/p&gt;

&lt;p&gt;Git uses a different approach from CVS and Subversion in that it uses the peer-to-peer model. Unlike SVN, Git allows you to base your repository on one or more remote repositories instead of a central location. &lt;/p&gt;

&lt;p&gt;You can also publish your repository for other developers to access or clone if needed. This makes Git great if you’re on a distributed team, or work on open source projects.&lt;/p&gt;

&lt;p&gt;If your SVN server goes down, there’s reason to panic. But with a Git repository, your colleagues can work with confidence, knowing they can still work on the repository locally. This saves you time, and worry when connection issues arise.&lt;/p&gt; 

&lt;p&gt;But that’s not the only advantage Git offers.&lt;/p&gt;&lt;br/&gt;&lt;h2&gt;The benefits of Git&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/branching-easy.png" style="border:0px" width="492" alt="image"/&gt;&lt;/p&gt;

&lt;p&gt; One way to help your team transition is to focus on the benefits of the change. It won&amp;rsquo;t be easy, but focusing on the advantages of Git will give your team something to look forward to.&lt;/p&gt; 

&lt;p&gt; Here are a few of many benefits of Git that&amp;rsquo;ll hopefully peak the interest of your team.&lt;/p&gt;

&lt;h3&gt; Branching made easy&lt;/h3&gt;

&lt;p&gt;Branching with Subversion can be a lot of work. First, you have to create a copy of your project tree in your repository using the svn copy command. This command creates a copy of your project in a new folder or directory. And you have to do this each time you want to create a new branch.&lt;/p&gt; 

&lt;p&gt;In Git, branches are pointers to a specific revision. There’s no need to create separate directories for each branch, Git takes care of that in a few keystrokes. Let’s think about what this all means for a moment.&lt;/p&gt;

&lt;p&gt;Think about how long it takes to create or merge a branch with SVN. If you’ve asked yourself, “Why is SVN taking so long to run a simple command?” then this is one benefit that you’ll appreciate.&lt;/p&gt;

&lt;p&gt;Git is fast, and most operations on Git take place on your local disk. This makes branching and merging happen almost instantly. No more waiting for commands to complete.&lt;/p&gt;

&lt;p&gt;To add, branches are relative to the repo you’re working with. Remember, in SVN there is one central repository. But Git allows you to have several remote repositories, and host a repository locally.&lt;/p&gt; 

&lt;p&gt;Each remote repository can have its own set of branches, with it’s own unique purposes. This means if you want to experiment with your repository, you can create a branch in your local copy and test your code without exposing it to the rest of your team.&lt;/p&gt;


&lt;h3&gt;The staging area&lt;/h3&gt;&lt;br/&gt;&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/staging-area.png" style="border:0px" width="492" alt="image"/&gt;&lt;/p&gt;

&lt;p&gt;Git gives you the ability to handpick the files you want to commit. SVN commits all changed files to your central repository when modified. Git does not work this way. Let’s say you made changes to two files, let’s call them File A and File B.&lt;/p&gt;

&lt;p&gt;You’re ready to commit File A, but you want to check with a colleague before committing File B. How do you save the changes made to File B and still commit File A? &lt;/p&gt;

&lt;p&gt;You can use the staging area as a holding place for files you’ve modified, but do not want to commit yet. For more information on how to use the staging area, check out our &lt;a href="http://guides.beanstalkapp.com/version-control/getting-started-with-git.html#the-staging-area"&gt;“Getting Started with Git” &lt;/a&gt; guide.&lt;/p&gt;

&lt;h3&gt;Ability to work offline&lt;/h3&gt;

&lt;p&gt;Another stark contrast is that Git allows you to get work done without an internet connection.&lt;/p&gt; 
  
&lt;p&gt;What happens if you’re wrapping up your work day, and you lose connection to the internet, or your corporate VPN is down? If you’re using SVN, you’ll be in a tough spot. But Git allows you to work uninterrupted by recording commits in your local repository. This means you don’t have to push changes to your remote repo until you’re ready to do so.&lt;/p&gt;

&lt;h3&gt;Workflow flexibility&lt;/h3&gt;

&lt;p&gt;Git will work with almost any &lt;a href="https://git-scm.com/book/ch5-1.html"&gt;workflow&lt;/a&gt;, and this includes a centralized workflow. While Git does not need a centralized server, you can sync with other Git repositories. This allows you to add multiple remote repositories to your project, and push and pull changes between them.&lt;/p&gt;

&lt;p&gt;You can also use the “read” and “write” permissions to set restrictions on your project. This gives you ultimate flexibility when choosing your workflow.&lt;/p&gt;&lt;br/&gt;&lt;h2&gt;Helping your team transition&lt;/h2&gt;&lt;br/&gt;&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/help-transition-git.png" style="border:0px" width="492" alt="image"/&gt;&lt;/p&gt;

&lt;h3&gt;Communicate&lt;/h3&gt;

&lt;p&gt;Don’t blindside your colleagues. Do yourself a favor and communicate your plans to transition as early as possible.&lt;/p&gt;

&lt;p&gt;This allows them to examine what&amp;rsquo;s needed  before making the switched. If you have any who oppose the idea, why not share with them the advantages Git offers? This is also a good time to answer a few key questions such as: &lt;/p&gt;


  &lt;p&gt;“How and when do we want to move to Git?”&lt;/p&gt;
 &lt;p&gt; “How long do we want this process to take?”&lt;/p&gt;


&lt;h3&gt;Educate&lt;/h3&gt;

&lt;p&gt;Whether you have a team of Git experts, or newbies — you want to get everyone on the same page. &lt;/p&gt;

&lt;p&gt;Educating your team goes beyond teaching them &lt;a href="https://try.github.io/levels/1/challenges/1"&gt;simple Git commands&lt;/a&gt;, but it also involves establishing a workflow. Or at least, starting a discussion about it. &lt;/p&gt;

&lt;p&gt;Trying to figure out the best workflow after you’ve transitioned your repos to Git can be a recipe for disaster.&lt;/p&gt;


&lt;p&gt;It’s also worthwhile to understand how to integrate git with other tools you use. Why not take a day or two to hack out these details with your team?&lt;/p&gt;

&lt;p&gt;Educate your team on what it takes to get started with git, and how &lt;a href="http://guides.beanstalkapp.com/version-control/branch-comparisons.html"&gt;creating and comparing branches&lt;/a&gt; can help avoid coding mistakes before they happen.&lt;/p&gt;


&lt;h3&gt;Implement&lt;/h3&gt;

&lt;p&gt;The last step in this process is to put what you’ve learned into practice. You could start by converting one of your repos to Git. This gives your team the opportunity to get comfortable running Git commands, or using a new client. &lt;/p&gt;

&lt;p&gt;Remember to be patient with yourself and your colleagues during this time. You will make mistakes when learning a new system, but the payoff will be worth it.&lt;/p&gt;

&lt;p&gt;Making the transition to Git isn’t a walk in the park. And it isn’t for everyone. But these are a few of the many benefits it offers.&lt;/p&gt;

&lt;p&gt;If you’ve thought about making the switch for a while, consider what’s preventing you from finalizing the move.&lt;/p&gt;

&lt;p&gt;If you work on a distributed team, and want to improve your branching process, Git may be a change worth making. If you don’t have any VCS in place, Git could be a good place to start.&lt;/p&gt; 

&lt;p&gt;You&amp;rsquo;ll save much time and energy you save investing in Git.&lt;/p&gt;</description><link>https://blog.beanstalkapp.com/post/149797803559</link><guid>https://blog.beanstalkapp.com/post/149797803559</guid><pubDate>Thu, 01 Sep 2016 12:20:47 -0400</pubDate><dc:creator>ashmeanything</dc:creator></item><item><title>The Extensibility of Beanstalk</title><description>&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/beanstalk_integrations.png" alt="The integrations of Beanstalk" class="image-center no-border" width="492"/&gt;&lt;/p&gt;

&lt;p&gt;Over the last few months on the Beanstalk blog we’ve been covering best practices from &lt;a href="http://blog.beanstalkapp.com/post/147799908084/commit-early-commit-often"&gt;commit messages&lt;/a&gt; to &lt;a href="http://blog.beanstalkapp.com/post/146606060099/the-importance-of-regular-consistent-deployments"&gt;deployment processes&lt;/a&gt;, and to &lt;a href="http://blog.beanstalkapp.com/post/143216181984/lost-in-a-forest-of-branches-3-questions-worth"&gt;branch management&lt;/a&gt;. We thought this would be a good time to look at how to extend Beanstalk and improve your productivity.&lt;/p&gt;

&lt;p&gt;There are three different ways to extend Beanstalk. The first is integrating your repository with other web apps. Our &lt;a href="http://beanstalkapp.com/features/integration"&gt;integration page&lt;/a&gt; highlights some of the possibilities. The other two ways come from &lt;a href="https://en.wikipedia.org/wiki/Webhook"&gt;webhooks&lt;/a&gt; and the &lt;a href="http://api.beanstalkapp.com/"&gt;Beanstalk API&lt;/a&gt;. Both of these allow anyone to extend Beanstalk.&lt;/p&gt;

&lt;h3&gt;Integration&lt;/h3&gt;

&lt;p&gt;Need to keep a colleague in the loop, but they don’t need Beanstalk access? Integration is the perfect solution.&lt;/p&gt;

&lt;p&gt;Built by the Beanstalk team, an integration connects Beanstalk to other web apps. These fit around three different themes: Issue Tracking/Project Management, Time Tracking, and Team Discussion. They help you tie commits to issues and support cases or track time spent on the new flagship feature.&lt;/p&gt;

&lt;p&gt;Integrations are on the repository level. To enable and explore integrations available, navigate to repository settings and click on “Integration”.&lt;/p&gt;

&lt;p&gt;Some of the possibilities available:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Track time you spent on a commit and send that information to &lt;a href="http://support.beanstalkapp.com/article/894-integrating-with-harvest"&gt;Harvest&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;After triggering a deployment, Beanstalk will post to a &lt;a href="http://support.beanstalkapp.com/article/965-integrating-with-slack"&gt;Slack&lt;/a&gt; channel.&lt;/li&gt;
	&lt;li&gt;Tie your commit to a &lt;a href="http://support.beanstalkapp.com/article/947-integrating-with-jira"&gt;JIRA&lt;/a&gt; issue and assign the issue to another team member. The commit in Beanstalk will also link to the JIRA issue.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Here’s what a commit message posting time to Harvest would look like:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-markup"&gt;Adjusted header logo position [time:30m task:webdev]&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This is what is looks like if you assigned a JIRA issue to a colleague via commit message:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-markup"&gt;Updated footer wording [#007 assign:John]&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Webhooks&lt;/h3&gt;

&lt;p&gt;Sending data from Beanstalk to another web service is a snap with webhooks. Support is available for both &lt;a href="http://support.beanstalkapp.com/article/955-modular-webhooks-integration"&gt;modular&lt;/a&gt; and &lt;a href="http://support.beanstalkapp.com/article/931-classic-webhooks-integration"&gt;classic&lt;/a&gt; webhooks. Like an integration, webhooks can be set-up in the &amp;ldquo;Integration&amp;rdquo; section of repositories settings.&lt;/p&gt;

&lt;p&gt;Webhooks send an HTTP Post to a URL that you specify and are triggered by events in the repository. After a webhook is triggered, Beanstalk will send a JSON payload to the URL with information about the event. Since this payload is in a JSON format, it can be parsed by the receiving server. This allows you to send data about the event and create services based on that data.&lt;/p&gt;

&lt;p&gt;An example event would be each time a push is done to a Git repository. In that situation, some of the information Beanstalk would pass on is what branch the push was to, who made the push, and what files were changed.&lt;/p&gt;

&lt;p&gt;To take things further with modular webhooks, you can run &lt;a href="http://support.beanstalkapp.com/article/938-how-do-i-trigger-hooks-before-and-after-a-deployment"&gt;pre/post deployment webhooks&lt;/a&gt;. For example, you could configure post-deployment webhooks with &lt;a href="http://support.beanstalkapp.com/article/968-integrating-with-jenkins"&gt;Jenkins&lt;/a&gt;. After a successful deployment, Beanstalk would trigger a Jenkins job to run tests against the environment.&lt;/p&gt;

&lt;p&gt;Here are all the events that can trigger a modular webhook:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;On each push (Git).&lt;/li&gt;
	&lt;li&gt;On each commit (SVN).&lt;/li&gt;
	&lt;li&gt;Every time a deployment is finished.&lt;/li&gt;
	&lt;li&gt;Any comment is posted on a changeset, a file or a code review.&lt;/li&gt;
	&lt;li&gt;When a branch is created.&lt;/li&gt;
	&lt;li&gt;When a branch is deleted.&lt;/li&gt;
	&lt;li&gt;When a tag is created.&lt;/li&gt;
	&lt;li&gt;When a tag is deleted.&lt;/li&gt;
	&lt;li&gt;When a Code Review is requested for a branch.&lt;/li&gt;
	&lt;li&gt;When a Code Review is approved.&lt;/li&gt;
	&lt;li&gt;When a Code Review is canceled.&lt;/li&gt;
	&lt;li&gt;When a canceled or approved Code Review is reopened.&lt;/li&gt;
	&lt;li&gt;When a new Issue is added to a Code Review.&lt;/li&gt;
	&lt;li&gt;When a Code Review Issue is marked as resolved. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;API&lt;/h3&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/beanstalk_integrations_API.png" alt="Beanstalk offers an API" class="image-center no-border" width="492"/&gt;&lt;/p&gt;

&lt;p&gt;For all plans, Beanstalk offers an &lt;a href="http://api.beanstalkapp.com/"&gt;API&lt;/a&gt;. If you want to build tools or services integrating Beanstalk, the API is for you. With the API you can do nearly action as you would in the web interface.&lt;/p&gt;

&lt;p&gt;Do you need to generate new deployment environments on the fly? Programmatically create a new repository? Assign permissions to the repository you just created? These are all done with ease if you know how to work with a well-documented API. Or, you can get creative and do things like &lt;a href="https://www.npmjs.com/package/grunt-beanstalk-api"&gt;share common Sass files between repositories&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There are some great third-party apps available. &lt;a href="http://www.magicbeanapp.com/"&gt;Magic Bean&lt;/a&gt; allows you to manage your deployments on iOS or Mac. &lt;a href="http://www.microedition.biz/habichuelas/"&gt;Habichuelas&lt;/a&gt; and &lt;a href="https://play.google.com/store/apps/details?id=com.onemightyroar.beansprout"&gt;Beansprout&lt;/a&gt; are mobile Beanstalk clients for iOS and Android.&lt;/p&gt;

&lt;p&gt;Zapier supports Beanstalk, allowing you to connect to thousands of web apps with Beanstalk. For example, when creating a new Beanstalk repository you could add a new card to a Trello list to assign tasks around the repository.&lt;/p&gt;

&lt;h3&gt;Extend Your Productivity&lt;/h3&gt;

&lt;p&gt;The tools and services you can extend Beanstalk with are limitless. From updating a status in your issue tracker or notifying your entire team of a recent deployment. We hope connecting Beanstalk with the other services your business depends on makes life a little easier.&lt;/p&gt;

&lt;p&gt;Is your favorite service missing an integration with Beanstalk? Leave a comment letting us know what you’d like to see!&lt;/p&gt;</description><link>https://blog.beanstalkapp.com/post/149000072049</link><guid>https://blog.beanstalkapp.com/post/149000072049</guid><pubDate>Mon, 15 Aug 2016 18:16:38 -0400</pubDate><dc:creator>briankerr</dc:creator></item><item><title>Commit Early, Commit Often</title><description>&lt;p&gt;&lt;a href="http://assets.wildbit.com/beanstalk/blog/images/commit_early_poster.png"&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/commit_early-blog.png" width="492" border="0" alt="image"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Any developer can commit code — but knowing when to commit is often up for debate.&lt;/p&gt;

&lt;p&gt;Most developers will admit that making a commit for every changed character, or keystroke is not best practice. After all, having too many commits can cause confusion, and clutter your commit history.&lt;/p&gt;

&lt;p&gt;On the other hand, committing large chunks of code could lead to unfocused and incoherent commits. Somewhere in there is a happy medium, but how do you find that?&lt;/p&gt;

&lt;p&gt;At Wildbit, we promote best practices by encouraging developers to commit early, and often. This article will focus on the benefits of doing just that. To begin, let’s focus on two attributes to keep in mind when making commits.&lt;/p&gt;

&lt;h3&gt;Commit Messages &lt;/h3&gt;

&lt;p&gt;We often talk about the importance of &lt;a href="http://blog.beanstalkapp.com/post/134929320564/writing-meaningful-commit-messages"&gt;writing meaningful commit messages&lt;/a&gt;. These messages define the commit itself, and should be about one specific set of changes. And those set of changes should support that message.&lt;/p&gt;

&lt;p&gt;In this light, addressing two separate bug fixes in a single commit, even if they are related would not be wise. Why? Good commit messages are often overlooked until you need to go back and find a specific change. But how do you locate that change if you habitually combine multiple changes into a single commit? It’s not impossible, but it’s not preferable, either.&lt;/p&gt;

&lt;p&gt;With that said, here’s a question to ask yourself if you’re wondering what code to include in your commit.&lt;/p&gt;

&lt;p&gt;“When I write my commit message, will it be about a single subject? Or will I be forcing other random and unrelated details from a separate issue?”&lt;/p&gt;

&lt;p&gt;If you foresee yourself having difficulties constructing a clear, and defined message, it may be better to create two or three separate commits to flesh out your work.&lt;/p&gt;

&lt;p&gt;What’s another way to test the quality of your commits?&lt;/p&gt;

&lt;h3&gt;Rolling Back&lt;/h3&gt;

&lt;p&gt;Let’s consider another scenario. Think in terms of rolling back to a previous commit. If you want to know if you’ve included too many changes in your commit, ask yourself:&lt;/p&gt;

&lt;p&gt;“If I rollback to the previous revision, how much work would I lose?”&lt;/p&gt;

&lt;p&gt;Let’s go back to our example earlier, but this time we&amp;rsquo;ll view this with a different lens.&lt;/p&gt;

&lt;p&gt;You’ve fixed two separate, but related issues. You add these changes to a single commit, but then you realized you introduced bad code when fixing one of the bugs. Now you need to rollback to a previous state. But how do you do that without removing the useful code you prefer to keep?&lt;/p&gt;

&lt;p&gt;This is where things can become tricky, and in most cases you find yourself wishing you had segregated each bug fix into their own commits. When you have the habit of committing early, and often it&amp;rsquo;s easier to see the journey of your feature.&lt;/p&gt;

&lt;p&gt;Don’t take my word for it. Let’s test this out. Here are two git log code snippets of the same repository. Which snippet tells you more about the feature that’s being added?&lt;/p&gt;

&lt;h4&gt;Example 1&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;commit b0e77532b5a8cf236d95f1b3324aabc194568c60
Author: Ashley
Date: Tue Feb 29 23:12:05 2011 -0600
added contact us box to homepage and about us page
&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Example 2&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;commit b0e77532b5a8cf236d95f1b3324aabc194568c60
    Author: Ashley
    Date: Tue Feb 29 23:32:03 2011 -0600
    added text fields on home page
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt;commit b0e77532b5a8cf236d95f1b3324aabc194568c92
    Author: Ashley
    Date: Wed Feb 30 00:52:09 2011 -0600
    added text fields on about us page
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt;commit b0e77532b5a8cf236d95ashdad44aabc194568c12
Author: Ashley
Date: Wed Feb 30 01:15:32 2011 -0600
added buttons, and edit and delete options
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The first code snippet describes the commit effectively. But that’s all it does. All the code has been consolidated into one single commit. If you’re looking for a specific piece of code, you’d have to sift through a lot of changes to find it. That’s not the ideal experience if you run into issues down the road.&lt;/p&gt;

&lt;p&gt;The second code snippet shows the journey of this feature and how it has evolved over time. Now, you can revert to specific points of your development, without the fear of losing all of your changes. With this approach, it’s easier to show your colleagues all the changes that led to the end result.&lt;/p&gt;

&lt;p&gt;Imagine walking up a flight of stairs that has missing steps. You may be able to get to the top, but if the gaps are too large, then it can be difficult. &lt;/p&gt;

&lt;p&gt;Likewise, making small atomic, and self sustaining commits help you to think through the implementation process and write better code. If there are too many gaps in your commit history, it can generate a lot of confusion making it difficult to journey through your project.&lt;/p&gt;

&lt;h3&gt;Benefits&lt;/h3&gt;

&lt;p&gt;To summarize, what are the benefits of committing early, and often?&lt;/p&gt;

&lt;p&gt;&lt;b&gt;It’s easier to share your code.&lt;/b&gt; If you’re on a distributed team, its best to share your code as much as possible. Your teammates can integrate changes, and avoid merge conflicts worry free.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Context.&lt;/b&gt; When you commit early, and often you give your team and yourself a great deal of context. How so? It’s easier to track where a change was introduced because you have a detailed commit history. Introducing too many changes in a single commit, it makes it harder to locate problems when they come up.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Scope.&lt;/b&gt; Committing early and often will help you to see the journey of your project, making it easier to rollback to a specific revision if needed&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Better commit messages.&lt;/b&gt; Better code. By committing often your messages will be focused, and meaningful because it relates to a specific set of changes, and not a series of unrelated modifications.&lt;/p&gt;

&lt;h3&gt;Summary&lt;/h3&gt;

&lt;p&gt;Remember, the purpose of the change is more important than the size of  the change. Some developers feel that if you’ve only changed 1 or 2 lines of code, then you’re cheating yourself by committing a small amount of work. But that’s not entirely true. A small change like fixing a typo is worthy of having its own commit.&lt;/p&gt;

&lt;p&gt;Don’t feel rushed to commit code because you’re wrapping up your work day. Remember, git stash is your friend that stores your changes until you’re ready to commit them. Save yourself time and improve the quality of your code by committing early, and often.&lt;/p&gt;

&lt;a href="http://assets.wildbit.com/beanstalk/blog/images/commit_early_poster.png" download="_blank"&gt;Click here to download our &amp;ldquo;Commit Early, Commit Often&amp;rdquo; poster.&lt;/a&gt;</description><link>https://blog.beanstalkapp.com/post/147799908084</link><guid>https://blog.beanstalkapp.com/post/147799908084</guid><pubDate>Fri, 22 Jul 2016 11:03:50 -0400</pubDate><dc:creator>ashmeanything</dc:creator></item><item><title>The Importance of Regular, Consistent Deployments</title><description>&lt;p&gt;In order to have a &lt;a href="http://blog.beanstalkapp.com/post/141906921099/establishing-a-great-development-process"&gt;reliable development process&lt;/a&gt;, you must take deployments into consideration. And while using services like Beanstalk or &lt;a href="https://deploybot.com"&gt;DeployBot&lt;/a&gt; are a step ahead of transferring files via FTP, you need more than just tools. If you put a solid, consistent process in place, your entire team and your customers will benefit.&lt;/p&gt;

&lt;p&gt;The primary goal of a reliable development process could be summed up as, “No surprises!” And deployments play a critical part in achieving that goal. As &lt;a href="https://zachholman.com/posts/deploying-software"&gt;Zach Holman puts it&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Your deploys should be as boring, straightforward, and stress-free as possible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let’s look at how a regular, consistent deployment process can help your team.&lt;/p&gt;

&lt;h3&gt;It takes more than bran flakes to promote regularity&lt;/h3&gt;

&lt;p&gt;The phrase &lt;em&gt;regular&lt;/em&gt; process indicates regularity. That means it’s a task your team conducts on a regular basis. This results in familiarity and the lack of surprises alluded to above. If you&amp;rsquo;re only deploying a huge change to your production environment once every 6 months, guess what? Your deployments will be &lt;em&gt;stress-filled&lt;/em&gt;, not stress-free.&lt;/p&gt;

&lt;p&gt;There’s a reason why continuous deployment is a goal for many teams. It achieves this regularity and gets your team to deploying more frequent changes of smaller impact. Beanstalk enables this type of process with automated deployments.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/automatic-env.png" alt="Environments can be set to automatic" width="492"/&gt;&lt;/p&gt;

&lt;p&gt;For your development, testing, or staging environments, Beanstalk can deploy your changes automatically on each commit or push.&lt;/p&gt;

&lt;h3&gt;Achieve clarity&lt;/h3&gt;

&lt;p&gt;As well, the phrase regular &lt;em&gt;process&lt;/em&gt; indicates structure. Your team is familiar with this activity in a certain manner. Better yet, if you document your process, there is an artifact to refer to for new team members or those still getting used to how your team does things. This makes it far easier for everyone to be aware of a few important facts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what was changed&lt;/li&gt;
&lt;li&gt;where was it changed&lt;/li&gt;
&lt;li&gt;who changed it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The team knows where to get this information because of the structure of your process. And Beanstalk provides &lt;a href="http://beanstalkapp.com/features/collaboration"&gt;plenty of options&lt;/a&gt; for how to find these details, ensuring the success of your process.&lt;/p&gt;

&lt;h3&gt;It’s easy to go back in time&lt;/h3&gt;

&lt;p&gt;Another advantage of a consistent deployment process is it enables you to think of your site or app in linear terms. You can picture your changes reaching back in time with each deployment highlighting a specific point your project/product’s timeline.&lt;/p&gt;

&lt;p&gt;The beauty of this is the ability to go backwards. If things go south, if you introduce some bad code (and you will), rolling back to a point in your timeline is a simple step. Most of us have experienced that sinking feeling moments after overwriting the previous state of a production web server with no means of going back.&lt;/p&gt;

&lt;p&gt;Having your code in version control gives you something to go back to in these scenarios. But that’s still a lot of work (rolling back your repo, finding the required files, or deploying from scratch once again). But when you use deployment services that focus on this stuff, rolling back is as simple as deploying the last clean version of your code. If you deploy frequently, rolling back involves a manageable, smaller group of affected files.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/rollback.png" alt="Redeploy your most recent successful deployment" width="492"/&gt;&lt;/p&gt;

&lt;p&gt;Again, Beanstalk enables this ability. Prepare a manual deployment and choose the desired commit to deploy again. Beanstalk will ensure your end destination is modified to resemble the state of your repo at the desired commit. Within seconds, you&amp;rsquo;re site or app is back to the previously working state.&lt;/p&gt;

&lt;h3&gt;Time better spent&lt;/h3&gt;

&lt;p&gt;Last, this consistent deployment process allows your team to make the most of their time. There does not need to be any lengthy investigation with team members asking, “What happened?” Investigation of a specific deployment takes seconds with a deployment service. Those questions above (who, what, where) are answered in a matter of seconds.&lt;/p&gt;

&lt;p&gt;Instead, teammates can focus on building that new feature with zero bugs. Or cutting page load times in half. Or deciding which new prototyping tool is best . Or whatev. When the toolset and the process are well known, it leads to a more relaxed environment where team members can focus on the things that matter most to them.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;I recently had a conversation with a non-technical customer who ran his own business. He came to us with the statement, “I’m tired of my developers overwriting each other’s work!” We understand that pain — it’s why we &lt;a href="http://wildbit.com/"&gt;build products&lt;/a&gt; that we hope make people’s jobs a little bit easier.&lt;/p&gt;

&lt;p&gt;But again, it takes more than just good tools. Every developer — and development team — needs to take the time to reflect on and formalize the process. &lt;a href="https://playbook.thoughtbot.com/"&gt;Nothing too crazy&lt;/a&gt; … just enough to get the job done each and every time!&lt;/p&gt;</description><link>https://blog.beanstalkapp.com/post/146606060099</link><guid>https://blog.beanstalkapp.com/post/146606060099</guid><pubDate>Tue, 28 Jun 2016 11:01:00 -0400</pubDate><dc:creator>chrisbowler</dc:creator></item><item><title>Cornerstone 3</title><description>&lt;h1&gt;Cornerstone 3 Released&lt;/h1&gt;

&lt;p&gt;We’re excited to share that our friends at Zennaware have announced that the latest version of Cornerstone is &lt;a href="http://www.zennaware.com/cornerstone/index.php"&gt;now available&lt;/a&gt;. Cornerstone has long been our &lt;a href="http://guides.beanstalkapp.com/version-control/clients.html"&gt;favourite client&lt;/a&gt; for Mac users who work with Subversion.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/cornerstone-3.png" alt="Cornerstone 3" width="492"/&gt;&lt;/p&gt;

&lt;p&gt;The latest version sports a completely redesigned interface, with major improvements to the source list and the inspector. As well, the new design fits more nicely with its environment, using Apple’s HIG (Human Interface Guidelines). It has also been updated to use macOS’s built in notifications. Performance and usability were also a focus and Cornerstone users should enjoy the changes!&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/cornerstone-view.png" alt="Cornertone 3 UI" width="492"/&gt;&lt;/p&gt;

&lt;p&gt;Visit their site to review the &lt;a href="http://www.zennaware.com/blog/2016/06/cornerstone-3-release-notes/"&gt;full list of what’s new&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don’t forget&lt;/strong&gt;: Beanstalk customers can get a discount on a Cornerstone license. Just use the code found on the Getting started link for any SVN repo in your account. If you have any questions, let us know.&lt;/p&gt;</description><link>https://blog.beanstalkapp.com/post/146362501624</link><guid>https://blog.beanstalkapp.com/post/146362501624</guid><pubDate>Thu, 23 Jun 2016 12:52:54 -0400</pubDate><dc:creator>chrisbowler</dc:creator></item><item><title>Creative Ways Employees of Wildbit Use Beanstalk</title><description>&lt;p&gt;
Being new to the Wildbit team, I was curious in learning how my new teammates use Beanstalk. At Wildbit, we use Beanstalk’s version control tools to ship every single one of our products. I also wanted to hear how my coworkers are using it for their own personal projects.
&lt;/p&gt;
&lt;p&gt;
Myself, I have a run of the mill use-case for Beanstalk. I keep my personal website hosted in a Git repository and use our deployment tools to be able to update my site. It’s fantastic not having to use an FTP Client or copying/pasting files to my server.
&lt;/p&gt;
&lt;h3&gt;Chris Bowler&lt;/h3&gt;
&lt;p&gt;
In Chris’s &lt;a href="http://wildbit.com/blog/2015/06/09/welcome-chris-bowler-to-the-customer-success-team"&gt;introductory blog post&lt;/a&gt; Shane mentioned Chris’s love for Nacho Libre GIFs. In the best way possible he doesn’t disappoint in his usage of the GIFs, he has one for every situation. Chris uses Beanstalk’s Git tools to keep his Nacho GIFs in version control and tracked. He uses Beanstalk’s deployment tools to deploy the GIFs to Amazon S3. Using S3 lets him upload the files to a public location where he can have the GIFs use his custom URL for them. To take things to another level, he also uses &lt;a href="https://textexpander.com/"&gt;TextExpander&lt;/a&gt; to create snippets to send reaction GIFs when appropriate.
&lt;/p&gt;
&lt;p class="image-center no-border"&gt;
&lt;img src="http://gifs.chrisbowler.com/nacho/smile.gif" alt="An example of a fine GIF from Chris" align="middle"/&gt;&lt;/p&gt;
&lt;p&gt;
He also uses Beanstalk’s Git tools help to maintain his personal website and blog. He uses &lt;a href="https://getkirby.com/"&gt;Kirby&lt;/a&gt;, a flat file CMS to be to write posts locally. Using Kirby allows his blog to live in a Beanstalk repository. With a brilliant collection of &lt;a href="http://chrisbowler.com/journal/blogging-tools"&gt;Hazel, Transmit, and Automator&lt;/a&gt; he’s able to publish his blog. Hazel helps him automate his file tagging, remind himself if there’s a blog post he wants to write, and create the folder structure for his blog post. With Transmit and Automator he’s able to automate sending his files to his server to have them posted.
&lt;/p&gt;
&lt;h3&gt;Natalie Nagele&lt;/h3&gt;
&lt;p&gt;
Natalie loves our code preview tools to review our user guides which we keep in a Beanstalk repository. Wildbit has a fantastic writing process for editing and creating the necessary illustrations. The wildcard everyone in development can relate to is: how do all the pieces look when it’s live?
&lt;/p&gt;
&lt;p class="no-border"&gt;
&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/natalie_section_preview_tool.png" alt="Beanstalk's preview tool" width="492"/&gt;&lt;/p&gt;
&lt;p&gt;
Since our guides are in version control, we can use Beanstalk’s preview feature. Our preview tools allow you to see what a web page looks like in the browser, including HTML, CSS, and Javascript, all within Beanstalk. It’s extremely convenient! Previewing the guides lets us see how the guide looks when it will be live on our site.
&lt;/p&gt;
&lt;h3&gt;Eugene Fedorenko&lt;/h3&gt;
&lt;p&gt;
Our talented front-end developer and designer uses Beanstalk to keep his dot files under version control. Since he sometimes works on different Macs, keeping his files in version control is ideal for him. He can make a change on one computer and push the changes to Beanstalk. When he’s on his other computer, he can pull down the most recent changes. If a config file has an undesired change, it&amp;rsquo;s a Git rollback away from being in the previous state.
&lt;/p&gt;
&lt;h3&gt;Ashley Harpp&lt;/h3&gt;
&lt;p&gt;
Ashley has a great use of Beanstalk! Along with her husband, they run a free summer technology program in the Atlanta area. The program is called TechPath (Formerly, &lt;a href="http://campbasic.tumblr.com/post/111410825553/what-is-camp-basic"&gt;Camp Basic&lt;/a&gt;). They teach the basics of HTML, CSS, and design. TechPath has a goal of mentoring students on technology or introducing students to coding.
&lt;/p&gt;
&lt;p&gt;
They use Beanstalk to teach the kids fundamentals of using version control in software development. When teaching, they&amp;rsquo;ve found two skills to help advance their students: sharing knowledge to build the learners confidence and always having patience. Patience is key as a student might have little tech knowledge and feel discouraged, and sharing knowledge helps them get over that hump.
&lt;/p&gt;
&lt;h3&gt;Artem Chistyakov&lt;/h3&gt;
&lt;p&gt;
One of our great developers, Artem, surprised and impressed me with how he’s using Beanstalk. &lt;a href="http://blog.beanstalkapp.com/post/35563285819/beanstalk-tools-for-sublime-text-2"&gt;Years ago&lt;/a&gt;, he developed a &lt;a href="https://github.com/temochka/sublime-text-2-beanstalk"&gt;Beanstalk extension&lt;/a&gt; for Sublime Text 2. If Sublime Text 2 is your text editor of choice, you have to check this out! 
&lt;/p&gt;
&lt;p class="no-border"&gt;
&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/artem_section_blame_tools.png" alt="Beanstalk's blame tool" width="492"/&gt;&lt;/p&gt;
&lt;p&gt;
From within Sublime Text you can run three different commands: View the file in your web browser with Beanstalk, preview the file using the before mentioned Beanstalk preview tools, and view the blame output for the file. Our blame output allows you to see which users modified a file, on which line they modified the file, and which revisions the modifications were done on.
&lt;/p&gt;
&lt;h3&gt;What about yourself?&lt;/h3&gt;
&lt;p&gt;
If you have an interesting use of Beanstalk, we would love to hear it!
&lt;/p&gt;</description><link>https://blog.beanstalkapp.com/post/145977128889</link><guid>https://blog.beanstalkapp.com/post/145977128889</guid><pubDate>Wed, 15 Jun 2016 16:58:38 -0400</pubDate><dc:creator>briankerr</dc:creator></item><item><title>Introducing the Beanstalk Code Snippet Slack Bot</title><description>&lt;p&gt;Wildbit is a truly remote company with more than half of the team working from around the world. This means we rely heavily on our communication tools. For day-to-day communication, we use Slack, which is a great and extensible communication platform. Today we’re excited to release a Slack bot that improves the experience of sharing code hosted on Beanstalk in Slack.&lt;/p&gt;

&lt;p&gt;When working on Postmark’s &lt;a href="https://status.postmarkapp.com"&gt;new status page&lt;/a&gt; we had a lot of Slack conversations around the source code. There are a couple of ways to do that on Slack: you can either use Markdown or upload a whole file. Markdown is a great way to write a short code snippet from scratch, while uploading a file seems more appropriate for sharing something bigger. The latter even adds syntax highlighting that looks classy. What neither of them allows, though, is to specify a context and point to a specific line.&lt;/p&gt;

&lt;p&gt;At the same time, at Wildbit we use Beanstalk to host and organize the source code for our projects. And Beanstalk has an awesome code browser that allows you to highlight a specific line, grab the URL and share it with co-workers.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/beanstalk-code-ui.png" width="492" alt="code looks good in Beanstalk"/&gt;&lt;/p&gt;

&lt;p&gt;It turns out, for sharing existing code, it’s easier to just grab a URL from Beanstalk and paste it into the channel. And, as you might already know, Slack parses and creates rich content for known URLs like Twitter, images (we love animated GIFs), etc. — a process called “&lt;a href="https://api.slack.com/docs/unfurling"&gt;unfurling&lt;/a&gt;”. When sharing Beanstalk URLs though, Slack doesn’t know much about it. And even if it did, it still would need a valid authorization token to access the file contents. So, pasting lots of Beanstalk URLs to the Slack channel looks far from being helpful:&lt;/p&gt;

&lt;p&gt;&lt;img border="1" src="http://assets.wildbit.com/beanstalk/blog/images/beanstalk-unfurled.png" width="492" alt="default Beanstalk links do not look so good in Slack"/&gt;&lt;/p&gt;

&lt;p&gt;In order to read the code, you have to click a link, login (if you’re not) to your Beanstalk account, take a look at the contents of the file and switch back to Slack to continue the conversation. And as you might know already, &lt;a href="http://www.bryanbraun.com/2012/06/25/multitasking-and-context-switching"&gt;context switching&lt;/a&gt; is the &lt;a href="https://blog.trello.com/why-context-switching-ruins-productivity/"&gt;productivity killer&lt;/a&gt;. It will also completely lack the context in the future, so you can’t just go back in history and re-read it. Add the fact that file contents could change in the meantime to make it even more frustrating. So after a few such conversations, I had a strong feeling about writing a Slack bot that would allow us to paste Beanstalk URLs to files and inject the contents of mentioned files directly into the conversion so you can get more context right in Slack.&lt;/p&gt;

&lt;p&gt;Something like this:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/beanstalk-loves-js.png" width="492" alt="More useful content in Slack is the goal here"/&gt;&lt;/p&gt;

&lt;p&gt;During our &lt;a href="http://wildbit.com/blog/2016/05/18/planning-a-company-retreat"&gt;last company retreat&lt;/a&gt;, Derek and I hacked together a side-project that implements this. And since Derek already had an experience with &lt;a href="https://howdy.ai/botkit/"&gt;Botkit&lt;/a&gt; — a very nice JavaScript SDK for writing bots by howdy — we decided to stick with it. It turns out, the SDK allows you to create a bot from scratch quite easily and we’ve got most of the code written in a couple of days during the retreat (in times between &lt;a href="http://wildbit.com/blog/2016/05/11/how-we-built-a-product-vision-and-roadmap"&gt;sticking notes to the window&lt;/a&gt; and &lt;a href="http://wildbit.com/blog/2016/05/18/planning-a-company-retreat"&gt;drinking beers while sitting in a pool&lt;/a&gt;. What wasn’t so easy, though, is to make the bot usable by other teams. Since getting file contents via the Beanstalk API requires authorization, we would need to require teams to provide us with a username and auth token to use the API. And since we didn’t want to host such sensitive information ourselves, we looked for some solution that would allow us to make this easy and secure. After a quick research we decided to give a new Bot hosting platform called &lt;a href="https://beepboophq.com"&gt;Beep Boop&lt;/a&gt; a try.&lt;/p&gt;

&lt;p&gt;Beep Boop is a hosting platform based on &lt;a href="https://www.docker.com/"&gt;Docker&lt;/a&gt; and tailored specifically for running Slack and Facebook bots. It uses a GitHub repository to check out and start the bot’s server-side code on each push to the master branch. It also has a nice way of configuring your bot using a simple &lt;code&gt;*.yml&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/beanstalk-bot.png" width="492" alt="The Beanstalk code snippet Slack bot is how we improved it"/&gt;&lt;/p&gt;

&lt;p&gt;The cool thing is an ability to add custom fields to require additional information. After you add these fields to the bot.yml Beep Boop will request this information when you add a bot to your team for the first time. Provided information will be then available at the runtime via Beeb Boop’s &lt;a href="https://github.com/BeepBoopHQ/beepboop-botkit"&gt;JavaScript SDK&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/beanstalk-cred.png" width="492" alt="Credentials required"/&gt;&lt;/p&gt;

&lt;p&gt;Beep Boop then will request (using a nice UI) and provide this information to at bot’s runtime. In development mode, it is also possible to add multiple teams to emulate production environment. Or even emulate the Beep Boop environment locally!&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/beanstalk-bot-env-variables.png" width="492" alt="Some Slack setup is required"/&gt;&lt;/p&gt;

&lt;h3&gt;Limitations&lt;/h3&gt;

&lt;p&gt;We initially built a bot that listened to the conversation and waited until someone pasted the Beanstalk URL. It when fetched the contents of the file, got the context around the highlighted line and put it into the channel. What we’ve found out later is that it won’t work for private (direct) conversations (apparently, they are called private for the reason).&lt;/p&gt;

&lt;p&gt;In order to work around this, we created an additional &lt;a href="https://api.slack.com/slash-commands"&gt;slash command&lt;/a&gt;. So now, all it takes to share a code snippet is to type &lt;code&gt;/code&lt;/code&gt; and paste the URL. It is clearly not as convenient as just pasting the URL, but it solves the “privacy” problem.&lt;/p&gt;

&lt;p&gt;Another general limitation of Slack is that we can’t do any syntax highlighting for these snippets. We hope the Slack platform will evolve and will allow language specific syntax highlighting in the future.&lt;/p&gt;

&lt;h3&gt;Open Source&lt;/h3&gt;

&lt;p&gt;The bot’s code is open-source and can be found &lt;a href="https://github.com/wildbit/beanstalk-code-snippet-bot"&gt;on GitHub&lt;/a&gt;. So if you find a bug or have a suggestion, feel free to report an issue or submit a PR.&lt;/p&gt;</description><link>https://blog.beanstalkapp.com/post/145256972519</link><guid>https://blog.beanstalkapp.com/post/145256972519</guid><pubDate>Wed, 01 Jun 2016 10:21:27 -0400</pubDate><dc:creator>okonetwildbit-blog</dc:creator></item><item><title>Don’t waste time - Test changes before committing</title><description>&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/tbc-test.png" style="border:0px" width="492" alt="image"/&gt;Any software development team that values their code knows the importance of testing. It’s a process used for validating code quality, and functionality. Testing is often thought of in the context of &lt;a href="https://en.wikipedia.org/wiki/Unit_testing"&gt;unit&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Integration_testing"&gt;integration&lt;/a&gt;, and &lt;a href="https://en.wikipedia.org/wiki/Regression_testing"&gt;regression&lt;/a&gt; tests. But there is another form of testing that’s worth adding to this bunch. Testing changes &lt;i&gt;before&lt;/i&gt; committing them could save you much time.&lt;/p&gt;

&lt;p&gt;Some developers test pre-committed code by default, while others prefer to wait and see how the code performs on their server. Which process is more favorable? To be clear, testing before you commit isn’t reinventing the wheel of testing. In fact, here are 3 things to keep in mind if you frequently test pre-committed code.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Testing code before it’s committed should not substitute for QA testing.&lt;/li&gt;
&lt;li&gt;It does not replace the standard code review process. Code reviews are important. It’s one of the primary features in Beanstalk and &lt;a href="http://guides.beanstalkapp.com/code-review/the-big-picture.html#why"&gt;we’ve written about its benefits.&lt;/a&gt;&lt;/li&gt; 
&lt;li&gt;It is not a substitute for &lt;a href="https://en.wikipedia.org/wiki/Continuous_integration"&gt;continuous Integration&lt;/a&gt; (running tests automatically after each push)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Testing before you commit is simply an added layer of protection. It helps you to find errors, and bugs more quickly, before they are pushed to your server. There are several benefits to this form of testing, but let’s start by discussing why some developers choose not to test before committing.&lt;/p&gt;

&lt;h3&gt;But I can just revert…&lt;/h3&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/tbc-revert.png" style="border:0px" width="492" alt="image"/&gt;&lt;/p&gt;

&lt;p&gt;Let’s be honest, VCS’s like Git have made it easy to reverse changes. In fact, our team has written articles that discuss &lt;a href="http://support.beanstalkapp.com/article/1004-how-do-i-undo-things-in-git"&gt;how to undo things in Git.&lt;/a&gt; The writers of the book, &lt;a href="https://git-scm.com/book/en/v2"&gt;“Pro Git”&lt;/a&gt; have done so as well, with guides like &lt;a href="https://git-scm.com/book/en/v2/Git-Basics-Undoing-Thing"&gt; “Undoing Things”&lt;/a&gt;. In a few keystrokes you can undo changes and be on your way to the next task. While this is viable option, is it the most efficient?&lt;/p&gt;

&lt;p&gt;The git revert command can be be useful in some cases, and we’re not discouraging the use of it. But if you’re reverting to adjust trivial mistakes, or typos, then testing locally before you commit could work wonders for your process. There’s an anonymous quote out there, and I’d love to know who thought of it. It says:&lt;/p&gt;

&lt;p&gt;&lt;i&gt;“Why do we never have time to do it right, but always have time to do it over?”&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;It takes more time to revert and revise a commit, than it does to test a change before it’s committed. How so? If you have a local environment, you can save the changes in your code editor, and then test them without committing. But if you choose to commit first, and then test your code, there are a few steps involved in that process.&lt;/p&gt;

&lt;p&gt;First, you’d have to make the changes to your code, and then commit them. Then, you’ll need to wait until the commit has deployed to a testing server. Finally, you’re in a position check and make sure everything is working properly. If you notice typos, broken image links, or if your code just doesn’t work — you’ll have to revert your commit, or make another commit to fix your code. This process could repeat multiple times and become time consuming.&lt;/p&gt;

&lt;h3&gt;But my code is perfect…&lt;/h3&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/tbc-perfect-code.png" style="border:0px" width="492" alt="image"/&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.smashingmagazine.com/2010/09/what-is-the-worst-design-or-programming-mistake-you-ve-ever-made/"&gt;Even seasoned developers make mistakes&lt;/a&gt;. And if you’re still not convinced of the idea &amp;ndash; try to view testing as a way to validate your greatness. Having a process for testing doesn’t make you a bad developer — it makes you a thorough one. It&amp;rsquo;s easier to focus on security holes, and larger issues that you might be overlooking when the real testing begins. But what else does testing do, other than save you time? There are several benefits, but we’ll focus on one today.&lt;/p&gt;

&lt;h3&gt;The benefits - Clean commit history&lt;/h3&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/tbc-history.png" style="border:0px" width="492" alt="image"/&gt;&lt;/p&gt;

&lt;p&gt;Your commit history should tell a story. And a great story is informative, detailed, and organized. When your commit history is clean and tidy — any developer can view it and have a general idea of what’s going on. &lt;a href="http://blog.beanstalkapp.com/post/134929320564/writing-meaningful-commit-messages"&gt;Commits should be meaningful&lt;/a&gt; and intentional because they represent a milestones in your project. Are the majority of your commits like this?&lt;/p&gt;

&lt;p&gt;&lt;i&gt;“just realized the typo in last commit..fixed”&lt;/i&gt;
&lt;i&gt;“oh snap! I forgot this file” “Oh no! The sky is falling”&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;If your commit history is full of minor adjustments, and quick fixes, think about what you could do to limit these mistakes.Consider this illustration:&lt;/p&gt;

&lt;p&gt;Joe is working on a feature branch and is short on time. He writes his code and then commits his changes without testing them. Everything looks okay from Joe’s perspective, but the code didn’t compile after a large merge. Later, Joe’s colleague, Chris commits his code on top of Joe’s changes, but it doesn’t work.&lt;/p&gt;

&lt;p&gt;This is a typical scenario, so what’s the point? If Joe had tested before committing his changes he could have saved a lot of time. Now, both developers will need to review the code to understand &lt;i&gt;what&lt;/i&gt; happened. And they’ll likely be adding more commits to explain what went wrong.&lt;/p&gt;

&lt;p&gt;It’s not easy to follow this process, especially when you’re confident that your code is written well and free of mistakes. But committing untested, and possibly broken code into your repository is never ideal. Sometimes, it may be acceptable to commit something that’s unfinished. But this is not the preferred route. &lt;a href="https://www.git-tower.com/learn/git/ebook/en/command-line/appendix/best-practices"&gt;Best practice supports making complete, and logical commits&lt;/a&gt;. So now that we know one way testing helps, how do we begin the progress?&lt;/p&gt;

&lt;h3&gt;Setup a local test environment&lt;/h3&gt;

&lt;p&gt;Assuming that you already have a code editor like &lt;a href="https://atom.io/"&gt;Atom&lt;/a&gt;, or &lt;a href="https://www.sublimetext.com/"&gt;Sublime Text&lt;/a&gt; in place, the next step is to setup your local web server. A server, in this instance, is software that you can install on your &lt;a href="http://jason.pureconcepts.net/2015/10/install-apache-php-mysql-mac-os-x-el-capitan/"&gt;Mac&lt;/a&gt; or &lt;a href="http://www.sitepoint.com/how-to-install-apache-on-windows/"&gt;Windows&lt;/a&gt; computer that will allow you to run your project locally. If you’re working on a website or web application, there are a lot of options out there such as &lt;a href="https://httpd.apache.org/"&gt;Apache&lt;/a&gt;, &lt;a href="https://www.lighttpd.net/"&gt;LightTPD&lt;/a&gt;, &lt;a href="http://nginx.org/"&gt;NGINX&lt;/a&gt;. There are a few others out there but Apache is a popular one because it comes pre-installed on every Mac.&lt;/p&gt;

&lt;p&gt;After you’ve installed your web server, you’ll need to setup your database server like MySQL and PHP or any server side language of your choice. In most cases, this process is a one time setup. Once your testing server is ready, you can make changes to your code without committing them and view the results on your localhost or test server. If you’re looking for a detailed guide, the &lt;a href="https://developer.mozilla.org/en-US/"&gt;Mozilla Developer Network&lt;/a&gt; has a nice article on &lt;a href="https://developer.mozilla.org/en-US/Learn/Common_questions/Set_up_a_basic_working_environment"&gt;“how to setup a basic working environment”.&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;At Wildbit — testing isn’t an option&lt;/h3&gt;

&lt;p&gt;&lt;i&gt;“A good developer tests their own code instead of relying on QA to find every bug.“&lt;/i&gt;
&lt;i&gt;credit: &lt;a href="http://wildbit.com/good-bad/developer"&gt;Wildbit - Good / Bad Developer&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;For the Wildbit team, testing is a requirement. The understanding is mutual among the development team that code should be tested before it’s committed. It’s inevitable though, at some point someone will commit code that doesn’t build, or work as expected. This is normal, but if your goal is to save time, and minimize the frequency of changes we recommend testing as often as possible.&lt;/p&gt;

&lt;p&gt;We don’t believe in sacrificing the quality of our code to meet delivery deadlines. Do yourself a favor and value your commits by testing before committing, and view your commit history as a solid piece of work that tells the journey of your project.&lt;/p&gt;</description><link>https://blog.beanstalkapp.com/post/144815485419</link><guid>https://blog.beanstalkapp.com/post/144815485419</guid><pubDate>Mon, 23 May 2016 14:06:21 -0400</pubDate><dc:creator>ashmeanything</dc:creator></item><item><title>Lost in a forest of branches - 3 questions worth considering to keep them tidy</title><description>&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/lfob-header.png" style="border:0px" width="492" alt="image"/&gt;In comparison with most version control systems, creating branches with Git is effortless. Before the standard branch process, software teams used various methods to add features and fix bugs. Not long ago, a developer would make copies of the root directory in separate folders on their server to create new features. Once the feature was ready to go live, they&amp;rsquo;d hope that there wouldn&amp;rsquo;t be any unexpected file conflicts when merging into root directory. This process was error prone, and led to much frustration. And trying to figure out &lt;em&gt;who&lt;/em&gt; made &lt;em&gt;what&lt;/em&gt; change, and which version to backup can be just as exhausting.&lt;/p&gt;

&lt;p&gt;That’s where version control comes into play, and where a solid branching process makes life easier and more productive. Branches provide a lot of flexibility, and depending on your workflow, you can accumulate a lot of them in a short amount of time. This could lead to issues as it can harm performance in hosting services like &lt;a href="http://beanstalkapp.com"&gt;Beanstalk&lt;/a&gt;, &lt;a href="http://bitbucket.com"&gt;Bitbucket&lt;/a&gt;, and &lt;a href="http://github.com"&gt;Github&lt;/a&gt;. To be fair, there is no golden rule on how many branches a repo should have. But there are indicators when a branch is no longer needed, or has little relevance. &lt;/p&gt;

&lt;h3&gt;Deleting branches are hard&lt;/h3&gt;

&lt;p&gt;Deciding whether a branch is worth deleting can be a challenge. You may want to preserve a branch in case a bug returns once it goes into production. Maybe you have a colleague who wants to focus on that feature — without the hassle of sifting through all files in the master copy. We understand then, why there are no written rules about when to remove a branch. It depends on your workflow and team process. But if you’re overwhelmed with the number of branches in your repo, you may be in desperate need of a cleanup. Here are 3 key questions to consider when deciding if it’s time to &lt;a href="http://support.beanstalkapp.com/article/899-how-do-i-delete-a-branch"&gt;delete a branch.&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;When was the last commit?&lt;/h3&gt;
&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/lfob-commit.png" style="border:0px" width="492" alt="image"/&gt;If your most recent commit to a branch was a year ago, you should reevaluate its relevance. Creating branches in Git can be a breeze. And in a few keystrokes you can find yourself coding away new ideas and fixes to add on top of your master copy.&lt;/p&gt;

&lt;p&gt;There is no harm in experimenting and testing ideas. But, if you have outdated branches in your repo that haven’t been accessed in years, you’ll want to consider if its worth keeping.&lt;/p&gt;

&lt;p&gt;Let&amp;rsquo;s face it, if you&amp;rsquo;re knee deep in branches, you may have a tough time locating the outdated ones. Here’s a command that can help you view all your branches, starting with the most recent:&lt;/p&gt;

&lt;p&gt;&lt;i&gt;git for-each-ref &amp;ndash;sort=&amp;rsquo;-authordate:iso8601&amp;rsquo;
&amp;ndash;format=&amp;rsquo; %(authordate:iso8601)%09%(refname)&amp;rsquo; refs/heads&lt;/i&gt;
&lt;/p&gt;

&lt;p&gt;This command displays the date of the most recent commit for each of your local branches. Remote branches are not included, but this is great way to declutter local branches. If you’re a Beanstalk customer, you can access this data in the “branches” section of your repository. You can view the latest commits for each remote branch, without having to search for them via command line or GUI client. &lt;/p&gt;

&lt;h3&gt;Was the branch merged?&lt;/h3&gt;
&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/lfob-branches-merged.png" style="border:0px" width="492" alt="image"/&gt;If having outdated branches is your least concern, then you’re off to good start. The next step in the cleaning process is to locate merged branches.  In most cases, if you merged a feature branch into the master it’s safe to delete it. This can be a scary concept to grasp if you’re new to Git, but it’s not as daunting as it sounds.&lt;/p&gt;

&lt;p&gt;It’s important to remember that branches are &lt;em&gt;pointers&lt;/em&gt; to a commit. If you have merged a feature branch into the master, then both branches will now point to the same commit. Whether a branch was deleted previously or not, they can always be recreated. In fact, you can create a branch that points to any commit in your repo history.&lt;/p&gt;

&lt;p&gt;This gives you a peace of mind knowing that your commit history will be preserved after completing a merge. Some teams have found success adding &lt;a href="https://git-scm.com/book/en/v2/Git-Basics-Tagging"&gt;tags&lt;/a&gt; on the master branch that point to &lt;em&gt;where&lt;/em&gt; a branch was released or merged. This helps you keep track of each branch release after merging it into the master. For tips on branch management, we recommend “&lt;a href="https://git-scm.com/book/en/v2/Git-Branching-Branch-Management"&gt;Git Branching - Branch Management&lt;/a&gt;&amp;ldquo;. You’ll find commands that you could run to view merged (and unmerged) branches.&lt;/p&gt;

&lt;h3&gt;Is the review process for this branch complete?&lt;/h3&gt;
&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/lfob-review-process.png" style="border:0px" width="492" alt="image"/&gt;Many software teams use a &lt;a href="http://guides.beanstalkapp.com/code-review/guide-to-code-review.html"&gt;code review process&lt;/a&gt; or an &lt;a href="https://en.wikipedia.org/wiki/Issue_tracking_system"&gt;issue tracking&lt;/a&gt; product like &lt;a href="https://sifterapp.com/"&gt;Sifter&lt;/a&gt; to review code. If you use a tool like this, you’ll want to find out if there are any open or pending cases in your branch. If you stumble across resolved ticket issues, and approved code reviews, dig deeper. Consider what else is there left to do. Is it possible to merge the branch and then delete it? Is the feature discontinued? If the code review process is in limbo, take steps to ensure that it hasn&amp;rsquo;t become the forgotten branch no one wants to work on anymore. If that has already happened, consider if it should removed.&lt;/p&gt;

&lt;p&gt;To delete an abandoned branch, run:
&lt;code&gt;git branch -D old-abandoned-feature&lt;/code&gt;
Removing local branches that are no longer on your server is another way to keep things tidy. The &lt;a href="http://stackoverflow.com/questions/4040717/git-remote-prune-didnt-show-as-many-pruned-branches-as-i-expected"&gt;git remote prune origin &lt;/a&gt;&lt;a href="http://stackoverflow.com/questions/4040717/git-remote-prune-didnt-show-as-many-pruned-branches-as-i-expected"&gt;command&lt;/a&gt; can be handy during these moments. This is the tip of the iceberg when it comes to pruning your repo and keeping tidy branches.&lt;/p&gt;

&lt;h3&gt;Summary&lt;/h3&gt;
&lt;p&gt;Keeping your branches minimal, and clean can help cut confusion for your team. It’s important to remember that version control was built to make the development process easier. In a sense, it’s a safety net that protects you from mistakes, allowing you to backup to any previous state. This means that most changes made to a branch are reversible. If you have merged a branch, you can &lt;a href="https://git-scm.com/blog/2010/03/02/undoing-merges.html"&gt;undo the merge&lt;/a&gt;. If you delete a branch by accident, you can recover it by using the &lt;a href="https://git-scm.com/docs/git-reflog"&gt;git reflog &lt;/a&gt;command.&lt;/p&gt;
&lt;p&gt;In fact, we have a help article designed to educate teams on &lt;a href="http://support.beanstalkapp.com/article/1004-how-do-i-undo-things-in-git"&gt;how to undo things in Git&lt;/a&gt;. Never underestimate the power of Git by being your own safety net. Taking advantage of it’s robust features can have a tremendous impact on your team and workflow. If you are lost in a  forest of branches, why not take a moment tidy up, and boost your productivity today. &lt;/p&gt;</description><link>https://blog.beanstalkapp.com/post/143216181984</link><guid>https://blog.beanstalkapp.com/post/143216181984</guid><pubDate>Fri, 22 Apr 2016 09:55:39 -0400</pubDate><dc:creator>ashmeanything</dc:creator></item><item><title>Establishing a Great Development Process</title><description>&lt;p&gt;In the current state of web development, it doesn’t take much work to put tools in your tool belt. Finding the options for any given job is quick work and the biggest challenge you’ll face is choosing &lt;em&gt;which&lt;/em&gt; tool to use.&lt;/p&gt;

&lt;p&gt;If tools are in abundance, what stops some teams from producing great results, time after time? What differentiates the prolific teams from the average ones? While there are usually a few factors, a big one is the lack of a solid, consistent development process.&lt;/p&gt;

&lt;h3&gt;Process Is Not a Dirty Word&lt;/h3&gt;

&lt;p&gt;If your eyes start to glaze over when someone says “process”, no need. Every team has a process, even if it’s not on paper and never talked about. Even the lack of formal structure is itself a process.&lt;/p&gt;

&lt;p&gt;Taking a bit of time to discuss how you do your work is a smart investment. Although the best teams spend more time &lt;em&gt;doing&lt;/em&gt; than &lt;em&gt;talking about doing&lt;/em&gt;, &lt;strong&gt;never&lt;/strong&gt; discussing your process(es) will cause you and your team headaches. Making a point of reviewing how you do your work once or twice a year provides a chance to step back and see the forest, not just the trees.&lt;/p&gt;

&lt;p&gt;The point of this article is not to define what makes a great development process. We’ll tackle that another day (and you can get a sense for our opinions with &lt;a href="http://guides.beanstalkapp.com/"&gt;our guides&lt;/a&gt;). Today the focus is on how to establish a process for your team.&lt;/p&gt;

&lt;p&gt;If you struggle to complete your web or app projects, or want to ensure your successes are repeatable, this is for you!&lt;/p&gt;

&lt;h3&gt;Discuss&lt;/h3&gt;

&lt;p&gt;As alluded to above, your team needs to invest time to take a step back, evaluate things, and talk as a team. This can be hard in the rush of project deadlines, but you should make it a priority. Although discussing process does not have a direct financial return like launching a client’s website, it will contribute to the bottom line.&lt;/p&gt;

&lt;p&gt;So find time in your annual schedule to meet and discuss. Identify where you could be doings better. Celebrate where you do things well. And most important, ask your teammates where they are feeling pain in their job.&lt;/p&gt;

&lt;p&gt;At &lt;a href="http://wildbit.com/"&gt;Wildbit&lt;/a&gt;, we meet as an entire team once or twice a year. Unlike some teams, this is not just a time to lay on the beach and sip cocktails (although that’s also important, especially for remote teams). We take these opportunities to think big, identify our goals, and come up with 6–12 month plans to meet those goals. And we take time to evaluate our tools, how we use them, and yes, discuss our processes.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/retreats.png" width="492" class="image-center" alt="Wildbit puts emphasis face to face time with mandatory annual retreats"/&gt;&lt;/p&gt;

&lt;p&gt;Make the time! It should start from &lt;a href="https://www.helpscout.net/blog/employee-onboarding/"&gt;the first day&lt;/a&gt; someone starts with your team, then continue on with annual discussions at the least.&lt;/p&gt;

&lt;h3&gt;Document&lt;/h3&gt;

&lt;p&gt;Talking about process is only the first step. You also need to get it into a format that you can share. For your current team, but also for your future team. How great would it be for new designers/developers to receive a documented development workflow as part of your onboarding material?&lt;/p&gt;

&lt;p&gt;The key with documenting (and processes in general) is to find the comfortable middle ground. Too few details will confuse your team members and leave them with questions. But too much detail means you’ll have to update things too frequently.&lt;/p&gt;

&lt;p&gt;The team at Thoughtbot takes this to the extreme with their &lt;a href="https://playbook.thoughtbot.com/"&gt;Playbook&lt;/a&gt; (which they’ve made publicly accessible). They’ve documented their entire process, from their approach to building products, to how they setup their laptops, to their hiring practices. You could argue this is overkill. But in a remote economy, new hires to &lt;strong&gt;this&lt;/strong&gt; team know where to go when they have a question!&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/playbook.png" width="492" class="image-center" alt="Thoughtbot put a lot of effort into their Playbook"/&gt;&lt;/p&gt;

&lt;p&gt;Find the right amount of fidelity so that your team has a grasp of the process, and the tools or services involved. Everything can then become routine.&lt;/p&gt;

&lt;h3&gt;Distribute&lt;/h3&gt;

&lt;p&gt;Last, get the results of the conversation and the documentation to your team. It’s important to have everyone review the discussion while things are still fresh. Your internal knowledge base or Intranet is a great place to store formal or official documentation like policies and procedures. That way, everyone knows where to go and find the archive of the discussion, plus the resulting documentation.&lt;/p&gt;

&lt;p&gt;This is vital in 2016. As remote work becomes increasingly prevalent, documenting and sharing oral discussions is critical. There’s no point in talking about process if your developer in Serbia is unaware of the decisions. For remote teams, &lt;a href="http://stet.editorially.com/articles/making-remote-teams-work/"&gt;overcommunicating&lt;/a&gt; is the best course to follow.&lt;/p&gt;

&lt;p&gt;Once a discussion is complete, someone on the team (preferably someone in a leadership position) should create a clean summary and post it online. Then ensure each and every person is aware of it. Using tools like &lt;a href="https://basecamp.com/"&gt;Basecamp&lt;/a&gt; or &lt;a href="https://honey.is/"&gt;Honey&lt;/a&gt; are great for storing documentation with some permanence, where as Slack or other chat tools are great for informing people about new documents.&lt;/p&gt;

&lt;p&gt;The team at Zapier is &lt;a href="https://zapier.com/about/"&gt;100% remote&lt;/a&gt;. Like many of us, they use Slack for sharing news, GIFs, and water cooler chat. But their documentation and processes are &lt;a href="https://zapier.com/learn/the-ultimate-guide-to-remote-working/how-build-culture-remote-team/"&gt;stored in P2&lt;/a&gt;, a WordPress theme. This gives both the original document and any resulting commentary a more permanent home.&lt;/p&gt;

&lt;h3&gt;Discipline&lt;/h3&gt;

&lt;p&gt;But you’re not done yet. Having a “set it and forget it” mentality is the surest way to ensure a process is never adopted. Once you have defined a process, documented it, and shared it with your team, you will have to reinforce it. Not in a punitive sense, but in the sense of reminding everyone of the discussion and decisions.&lt;/p&gt;

&lt;p&gt;A great way to carry this out is at significant project/product events. At the first project kickoff or launch, point to the process. Pull out the documentation and review it once again. Ensure everyone involved is thinking back to the discussion and on board with the process.&lt;/p&gt;

&lt;p&gt;How you do this differs from team to team. Dainius Runkevičius &lt;a href="http://thenextweb.com/insider/2015/04/14/the-fundamentals-of-running-a-successful-remote-team/"&gt;shares the processes of several teams&lt;/a&gt; and finishes with this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;As you may have noticed, different companies employ different practises to keep everyone updated and make processes as clear and transparent as possible. However, like everywhere else, there is no single rule for that. As a result, experiment yourself, try different approaches to manage processes within your company and find the one that fits your team best.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Talking about work can leave a bad taste. It’s so &lt;em&gt;meta&lt;/em&gt;. But in the right doses, it will result in a better process. Which results in a better team.&lt;/p&gt;</description><link>https://blog.beanstalkapp.com/post/141906921099</link><guid>https://blog.beanstalkapp.com/post/141906921099</guid><pubDate>Tue, 29 Mar 2016 13:33:38 -0400</pubDate><dc:creator>chrisbowler</dc:creator></item><item><title>Combat Cowboy Coding</title><description>&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/cowboy-header.png" style="border:0px" width="492" alt="image"/&gt;&lt;/p&gt;&lt;p&gt;“Good programmers write code that humans can understand.” - Martin Fowler&lt;/p&gt;

&lt;p&gt;Have you ever read a line of code and thought, “this is great, but I’m not sure I understand what’s making it work”. It may have even been your own code you were reading when having this epiphany. In either case, Martin Fowler’s statement is a powerful one, and few have tried to refute it. Code that is consistent, understandable, and well tested has high value in the development world.&lt;/p&gt;

&lt;p&gt;But let’s face it, even experienced developers flirt with the idea of “&lt;a href="https://en.wikipedia.org/wiki/Cowboy_coding"&gt;cowboy coding&lt;/a&gt;” from time-to-time. It can be easy to see an issue in your code, and be tempted to implement a quick fix without going through the standard test and review process. There’s no judgment here. But there is a danger though, when cowboy coding becomes a habit.&lt;/p&gt;

&lt;p&gt;Coding in the moment with little regard for future consequences or maintenance costs can be detrimental to you and your team. Quick-fixes are rarely practical solutions in the long-term. While there can be edge case scenarios to support cowboy coding, it is often stemmed by a lack of awareness for accepted best processes.&lt;/p&gt;

&lt;h3&gt;The root of cowboy coding&lt;/h3&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/root-of-cowboy-coding.png" style="border:0px" width="492" alt="image"/&gt;&lt;/p&gt;

&lt;p&gt;Demanding clients, and a lack of experience can make cowboy coding appear to be a valid way to work. Yet, while some clients may delight in the outcome, this could result in long term issues.&lt;/p&gt;

&lt;p&gt;For example, coding fast to solve a bug issue while dismissing revision control, documentation, tests, and methodologies can be detrimental to the client in the future. Imagine you’ve built an application for a company and the end result was exactly what they expected. Some years later though, the company decides to hire another developer to work on the application. But the person hired for the job struggles because the code is unreadable, and buggy. This is not helpful to you and often is a huge disservice for the client.&lt;/p&gt;

&lt;p&gt;Inexperience could also encourage cowboy coding. For example, an unseasoned developer may opt to use a local version control system. Instead of using GIT or SVN, perhaps they prefer to copy files into another directory. At face value, this could appear to be the most simple, and efficient route.&lt;/p&gt;

&lt;p&gt;But often overlooked, is the high probability of error. For instance, copying files to the wrong directory, and overwriting files you want to keep. If you’ve found yourself or your team going down this path, you’re not alone. Here are a few practical tips that can combat the urge to cowboy code.&lt;/p&gt;

&lt;h3&gt;Focus on mentorship&lt;/h3&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/cowboy-mentorship.png" style="border:0px" width="492" alt="image"/&gt;&lt;/p&gt;

&lt;p&gt;Mentorships are opportunities to share knowledge, and to help those with less experience become better developers. This is true in any discipline, but the benefits are obvious in the development world. Statistics show that &lt;a href="http://www.management-mentors.com/about/corporate-mentoring-matters-blog/bid/102403/Statistics-Why-having-a-mentor-is-important-for-you-and-for-your-company"&gt;35% of employees who do not receive regular mentorship will look for another job within 12 months&lt;/a&gt;.This is a broad statistic and isn’t specific to any field of work, but there is much to glean from it.&lt;/p&gt;

&lt;p&gt;At some point in your professional career, you’ll need guidance. One way to remedy this would be to focus on mentorship. There are plenty of online programs available but options could also exist at your employer. Working alongside a senior developer could work wonders for inexperienced developers. Here are a few of the many online mentor programs available.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="https://www.airpair.com/code-mentoring"&gt;AirPair&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thinkful.com/"&gt;Thinkful&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.codementor.io/"&gt;Code Mentor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Another way to fight against cowboy coding is working on an open source project. This also gives a sense of accountability. Knowing that other developers will be building on top of your code will force you to think twice about the quality of it. Learning is an ongoing event, and accepting help from more experienced team members will enhance your productivity and your code.&lt;/p&gt;

&lt;h3&gt;Emphasize the benefits of best practices&lt;/h3&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/cowboy-benefits.png" style="border:0px" width="492" alt="image"/&gt;&lt;/p&gt;

&lt;p&gt;Understanding the benefits of following best practices can be helpful to new developers. Instead of wondering why best practices are widely accepted — why not try to implement them and see how they can help boost productivity?&lt;/p&gt;

&lt;p&gt;Embrace unit testing and other processes created to save time down the road. Investing in code reviews, quality assurance, and design inspection will go a long way for combatting cowboy coding. Using a version control system and valuing best practices is the foundation for writing structured, consistent and organized code. But while using a VCS has it’s advantages, it’s only the tip of the iceberg.&lt;/p&gt;

&lt;p&gt;To get to the root of the problem, consider implementing a code review process. By enabling code reviews, code is connected to it’s author, thus assigning responsibility and a sense of ownership to the writer. This means that if you’re in a bind, or are in a rush to code you’ll be mindful of the way you code. Knowing that someone else will be reviewing what you’ve coded will remind you to create clear, and understandable code.&lt;/p&gt;

&lt;p&gt;A solid code review process can help maintain a uniform coding style across the entire development team. This is one of the many reasons why &lt;a href="http://guides.beanstalkapp.com/code-review/guide-to-code-review.html#why"&gt;your team should be doing code reviews.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A healthy amount of research could also extinguish any lingering doubts about why productive development teams use such methods. Here are a few guides and articles that we recommend checking out.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.tutsplus.com/tutorials/top-15-best-practices-for-writing-super-readable-code--net-8118"&gt;10 Best Practices for writing readable code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.git-tower.com/learn/git/ebook/command-line/appendix/best-practices"&gt;Git Tower Best Practices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://support.beanstalkapp.com/category/998-best-practices"&gt;Best Practices recommended by Beanstalk&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Keep learning and be happy&lt;/h3&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/cowboy-keep-learning.png" style="border:0px" width="492" alt="image"/&gt;&lt;/p&gt;

&lt;p&gt;While cowboy coding can be an enticing at times, being a catalyst for accepted best practices will go a long way for you professionally. Help your team flourish by valuing good policies, rather coding with little direction and without process. Think of ways for your team to share resources that can help everyone improve.&lt;/p&gt;

&lt;p&gt;At &lt;a href="http://www.wildbit.com"&gt;Wildbit&lt;/a&gt;, we created a list of &lt;a href="http://wildbit.com/blog/2015/06/11/what-makes-a-good-or-bad-role-definitions"&gt;role definitions&lt;/a&gt;. That way, each person knows the expectations for their role. Yes, there will never be a perfect developer. But that certainly should not stop us from improving. After all, accepting responsibility for mistakes and learning from them, doesn’t make you a bad developer — it makes you human.&lt;/p&gt;</description><link>https://blog.beanstalkapp.com/post/141439075429</link><guid>https://blog.beanstalkapp.com/post/141439075429</guid><pubDate>Mon, 21 Mar 2016 13:29:21 -0400</pubDate><dc:creator>ashmeanything</dc:creator></item><item><title>3 Security Features Worth Considering</title><description>&lt;p&gt;Security is a big deal here at &lt;a href="http://www.wildbit.com"&gt;Wildbit&lt;/a&gt;. For us, it’s not just mere lip service. We value your code as much as you do, and are committed to keeping it secure. But how can you be sure? There are so many tools available that can used for code hosting.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/sf-header-logo.png" width="492" alt="image"/&gt;&lt;/p&gt;

&lt;h3&gt;What’s available with Beanstalk?&lt;/h3&gt;

&lt;p&gt;In truth, it&amp;rsquo;s difficult to highlight &lt;em&gt;one&lt;/em&gt; thing that makes Beanstalk’s security top notch. It is our goal to ensure that our infrastructure is robust, and that your code remains protected. After all, we use Beanstalk to host our own code. &lt;/p&gt;

&lt;p&gt;While great security is of utmost importance to us, we realize that not all our customers desire to have every feature imposed upon them. Thus, we provide the freedom of choice. Each Beanstalk account owner has the power to control exactly how secure their account will be. &lt;/p&gt;

&lt;p&gt;Here are a few simple, key features you can put in place now to improve security, without making it a long and painful process for the rest of your team.&lt;/p&gt;

&lt;h3&gt;Two Step Verification &lt;/h3&gt;

&lt;p&gt;“Treat your password like a toothbrush. Don’t let anybody else use it, and get a new one every six months”~ Clifford Stoll&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/sf-verification.png" width="492" alt="image"/&gt;&lt;/p&gt;

&lt;p&gt;Have you ever heard that expression? If so, then you know the various measures many have taken take keep their accounts safe and sound. With two factor authentication users select two or three factors to prove their identity. A password is still needed to log in, but you’ll also need your phone or another device to gain full access to your account.&lt;/p&gt;

&lt;p&gt;By default, &lt;a href="http://support.beanstalkapp.com/article/901-2-step-login-verification"&gt;2 step verification&lt;/a&gt; is disabled with Beanstalk. It is available to all Beanstalk customers, regardless of your  account plan or size.&lt;/p&gt;

&lt;p&gt;Once enabled, Beanstalk will ask the account owner to set up, and verify their phone number. Each user on the account will need to complete this process to ensure that the account remains secure. Each user invited to your account after 2 step verification is enabled will need to enter their phone number after accepting the invitation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Benefits of Having a Backup Option&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What happens if your phone is lost, or simply unavailable? We strongly recommend providing a backup number in these cases. This number will only be used in the event that the primary number is not available. You can use any secondary number you have as long it accepts messages, so a home phone number would not work in this instance.&lt;/p&gt;

&lt;p&gt;Another great option would be using Google Authenticator. This is a free app for iPhone and Android that can generate verification codes in the event your device has no data or network connectivity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Warning:&lt;/strong&gt; If you’re using Beanstalk API and have 2-step verification enabled, all users will need to authenticate with an access token provided by Beanstalk. The API will not allow usage of passwords for all API requests, so this is very important. You can generate an access token by simply going to your Profile Settings (clicking on your name at the top right, then clicking “Access Tokens). You’ll want to ensure that all apps (like Git Tower) or web services that require your Beanstalk credentials to connect over the API are using the access tokens &lt;em&gt;before&lt;/em&gt; you enable 2-step verification.&lt;/p&gt;

&lt;h3&gt;Restrict Access by IP Address&lt;/h3&gt;

&lt;p&gt;Another way to ramp up your security is to restrict access by IP address. This means that you can limit access to a particular IP address by sharing which addresses will be allowed to access Beanstalk.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/sf-ip.png" width="492" alt="image"/&gt;&lt;/p&gt;

&lt;p&gt;The benefit? You can restrict a user’s access to a specific location or trusted network. This can limit the collective damage from an account if compromised. &lt;/p&gt;

&lt;p&gt;This feature will be disabled by default, but can be enabled by the account owner in the security settings. Our help article can help you get up to speed with &lt;a href="http://support.beanstalkapp.com/article/839-restricting-access-by-ip"&gt;restricting IP addresses&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This feature is only available to those on the Business plan, and can only enabled by the account owner. &lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;Automatic Login&lt;/h3&gt;

&lt;p&gt;For many customers, automatic login provides a ton of convenience. It can enhance the user experience beyond measure as there’s no need to recall a user name or password. You can simply go to the URL of your account from your default computer, and you’re ready to get started. But what if you view automatic login as more harmful than helpful? &lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/sf-login.png" width="492" alt="image"/&gt;&lt;/p&gt;

&lt;p&gt;Automatic login will be enabled by default for each account. But it can easily be &lt;a href="http://support.beanstalkapp.com/article/876-can-i-disable-automatic-login-for-my-account"&gt;disabled in the security settings&lt;/a&gt; by the account owner. &lt;/p&gt;

&lt;p&gt;If you want the best of both worlds - and would like some type of password protection, you can always trigger a password protected screensaver to your work computer. That way, if you’re working in the office, and someone walks by, they will not be able to make changes to your Beanstalk account, without providing a password. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note: Disabling Automatic Login is only available to business accounts only. &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These features are only a tip of the iceberg when it comes to how we handle &lt;a href="http://beanstalkapp.com/features/security"&gt;security&lt;/a&gt;. We pride ourselves on being as transparent as possible with our customers. In fact, our rigid employee policies ensure that only a select few are allowed access to the servers where customer information is stored. Keeping your data safe is not an option for us — it’s a requirement. &lt;/p&gt;

&lt;p&gt;If you have any questions or concerns about how we feel about security, please email us directly at &lt;a href="mailto:support@beanstalkapp.com" target="_top"&gt;support@beanstalkapp.com&lt;/a&gt;.&lt;/p&gt;</description><link>https://blog.beanstalkapp.com/post/135397911694</link><guid>https://blog.beanstalkapp.com/post/135397911694</guid><pubDate>Thu, 17 Dec 2015 15:20:34 -0500</pubDate><dc:creator>ashmeanything</dc:creator></item><item><title>Writing Meaningful Commit Messages</title><description>&lt;p&gt;Detailed commit messages are an essential part of any good development process.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/cm-confused.png" width="492" alt="image"/&gt;&lt;/p&gt;

&lt;p&gt;Have you ever read someone else’s commit message, and wondered what on earth were they doing? Perhaps you’ve gone back and read some of your own commit messages wondering what you were doing?&lt;/p&gt;

&lt;p&gt;At some point, most of us have fallen victim to writing commit messages that simply have no value. Perhaps you had a busy day, and didn’t have time to craft a meaningful message. Or maybe you simply felt that a commit you made didn’t warrant much detail because no one would need to circle back and read it again.&lt;/p&gt;

&lt;p&gt;Whether it’s a matter of being lazy, or not having the time — commit messages are important. They are an communication tool that can elevate the productivity of your entire team. And when written effectively, your future self and your team will thank you for crafting such thoughtful and informative messages.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/cm-timeline.png" width="492" alt="image"/&gt;&lt;/p&gt;

&lt;p&gt;If you ask any developer to describe what an ideal commit message would look like, what would they say? Some reason, “If I commit several times a day, and I haven’t finished a feature — what am I writing about?” Others may say, “why do I need to write a commit when you can simply view the code”?&lt;/p&gt;

&lt;p&gt;From the surface, these arguments may appear valid, but it dismisses the purpose of what commit messages are designed to do. Commit messages that are written with purpose and provide context help you get the most out of version control.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/cm-backlog.png" width="492" alt="image"/&gt;&lt;/p&gt;

&lt;p&gt;Meaningful messages do more than state the obvious, they indicate why a change happened. While anyone can simply inspect the revision history to see what has changed, it will not reveal what the developer intended to do.&lt;/p&gt;

&lt;p&gt;Effective commit messages help you and your team understand why certain changes were introduced. Also, it simplifies the debugging process as you don&amp;rsquo;t have to review hundreds of commits to discover where a problem resides.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/cm-log.png" width="492" alt="image"/&gt;&lt;/p&gt;

&lt;p&gt;Imagine reading a history book, that only contained dates of when certain events happened. There was not much detail.  The reader is then forced to assume much of the context of various historical accounts.&lt;/p&gt;

&lt;p&gt;How useful would such a book be at helping the reader to discern the underlying cause and effect of problems?&lt;/p&gt;

&lt;p&gt;Likewise, bad (or lazy) commit messages are essentially timelines that state the obvious — but leaves too much to the imagination.&lt;/p&gt;

&lt;h3&gt;What is a good commit message composed of?&lt;/h3&gt;

&lt;p&gt;Linus Torvalds (the “inventor” and main maintainer of Linux) put it this way:&lt;/p&gt;

&lt;p&gt;A good commit message looks like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Header line: explaining the commit in one line

Body of commit message is a few lines of text, explaining things
in more detail, possibly giving some background about the issue
being fixed, etc etc.

The body of the commit message can be several paragraphs, and
please do proper word-wrap and keep columns shorter than about
74 characters or so. That way "git log" will show things
nicely even when it's indented.

Reported-by: whoever-reported-it
Signed-off-by: Your Name 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That header line really should be meaningful, and really should be
just one line.That header line is what is shown by tools like gitk and
shortlog, and should summarize the change in one readable line of text,
independently of the longer explanation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/matthewhudson/1475276"&gt;Source&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While there’s no strict definition of what a commit message is, there are a few guidelines and best practices to keep in mind. Good commit messages communicate the thoughts, ideas, and possible drawbacks of a change.&lt;/p&gt;

&lt;p&gt;Here are 3 questions to keep in mind to up your awesome when writing commit messages.&lt;/p&gt;

&lt;p&gt;Do your commit messages answer these questions?&lt;/p&gt;

&lt;h4&gt;Why was this change made?&lt;/h4&gt;

&lt;p&gt;Did you add a new feature? Fix a typo, or a bug? Did you improve performance in some area?        &lt;/p&gt;

&lt;p&gt;For example: Instead of saying, “changed background” you could say, “Change background color based on 4/15/2015 A/B Test Results”.&lt;/p&gt;

&lt;h4&gt;What is the method behind the madness?&lt;/h4&gt;

&lt;p&gt;This simply answers why you decided to take a specific approach. Reference any online resources (like a Trello card, blog articles, etc) or relevant commits that will help provide context.&lt;/p&gt;

&lt;p&gt;This may not be necessary to include for every single commit you make. But it should, at a very high level, explain how you decided to address the issue at hand.        &lt;/p&gt;

&lt;h4&gt;What are the possible drawbacks of this change?&lt;/h4&gt;

&lt;p&gt;This is a very important question. It should contain helpful information in the event you have issues related to this commit later. It may also expose that too many changes are taking place, and you need to simplify your commit. Learn more about &lt;a href="http://seesparkbox.com/foundry/atomic_commits_with_git"&gt;atomic commits&lt;/a&gt;.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;Taking time to thoughtfully create your commit messages, are well worth the investment. Informative messages provide a peak in the mind of the developer.&lt;/p&gt;

&lt;p&gt;They are relevant, concise, and can save you and your team from much distress down the road.&lt;/p&gt;

&lt;p&gt;We&amp;rsquo;ve added a few more helpful links below to help improve the quality of your commit messages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Helpful Resources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html"&gt;A note about Git commit messages&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://mislav.net/2014/02/hidden-documentation/"&gt;Hidden documentation&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.getoffmalawn.com/blog/on-the-subject-of-commit-messages"&gt;On the subject of commit messages&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;</description><link>https://blog.beanstalkapp.com/post/134929320564</link><guid>https://blog.beanstalkapp.com/post/134929320564</guid><pubDate>Thu, 10 Dec 2015 12:48:14 -0500</pubDate><dc:creator>ashmeanything</dc:creator></item><item><title>Empowering New Teammates</title><description>&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/problem.png" class="image-center" width="492"/&gt;&lt;/p&gt;

&lt;p&gt;One of the more exciting aspects of working as a team is adding new team members. But after going through the process of adding the new potential all star, reality kicks in: internal onboarding is a &lt;strong&gt;lot&lt;/strong&gt; of work. You can do yourself, and your team, a lot of good with &lt;a href="http://www.helpscout.net/blog/employee-onboarding/"&gt;some preperation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When it comes to hiring developers, this need is acute. Sometimes you hire an experienced dev who has worked on teams of various sizes. Othertimes, you hire a raw talent straight out of school. While the former are usually familiar with tools and frameworks, they still need to get up to speed on how &lt;em&gt;your&lt;/em&gt; team works. And you hire the latter for potential, but they may have to learn new tools as well as getting acquainted with your workflow.&lt;/p&gt;

&lt;p&gt;And, as many of you know, getting started with version control can be a daunting step for many. The following are a few helpful steps we’ve learned along the way. Both from our own team, as well as talking to customers of all shapes and sizes!&lt;/p&gt;

&lt;h3&gt;Document&lt;/h3&gt;

&lt;p&gt;This is where you and your existing team can help your future selves. As much as possible, document your current process. The tools you use, how you use them, and where the credentials are &lt;a href="https://blog.agilebits.com/2015/11/03/introducing-1password-for-teams/"&gt;stored&lt;/a&gt; are all crucial for a new hire.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/document.png" class="image-center" width="492"/&gt;&lt;/p&gt;

&lt;p&gt;Imagine the difference for that person when they can spend the first couple of days reading documentation rather than worrying about asking too many questions. Imagine the difference to your current team members as well (also important).&lt;/p&gt;

&lt;h3&gt;Schedule a question period&lt;/h3&gt;

&lt;p&gt;As a follow up to the first step, schedule time for the new hire to spend with key members of the team. Questions will come up as they read about how the team works and the tools you use. Encourage them to document each one in the first couple of days, then give them a forum to get answers.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/questions.png" class="image-center" width="492"/&gt;&lt;/p&gt;

&lt;p&gt;This will help the new person be comfortable in asking questions. And it will help your current team members remember &lt;strong&gt;what they forgot they knew&lt;/strong&gt;. Gaining experience leads to increased knowledge. Foundational facts become so ingrained that we take them for granted. Teaching someone else forces a person to remember all the little steps along the way.&lt;/p&gt;

&lt;h3&gt;Have a playground&lt;/h3&gt;

&lt;p&gt;Once you’ve helped the new hire get set up with equipment, shared the team’s toolset, and discussed the workflow, let ‘em loose. Give them a playground environment to muck around. Trying things out without fear of negative consequences empowers people to experiment.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/playground.png" class="image-center" width="492"/&gt;&lt;/p&gt;

&lt;p&gt;If this feels too expensive (in terms of money &lt;em&gt;or&lt;/em&gt; time), ask yourself whether &lt;strong&gt;not&lt;/strong&gt; having this in place costs more. The time required upfront to get some infrastructure in place for new hires will pay for itself. It can lead to confidence and familiarity when it comes time to work on something concrete!&lt;/p&gt;

&lt;h3&gt;Take the fear out of changes&lt;/h3&gt;

&lt;p&gt;For inexperienced developers,  there is a crippling fear about breaking things. Help new hires remember this is exactly why version control exists! For many people, rolling back a document to a previous version with a tool like Dropbox is simple and intuitive. But for many, committing changes to your team’s repo is a much scarier step to take.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/submit.png" class="image-center" width="492"/&gt;&lt;/p&gt;

&lt;p&gt;Remind them that commits are not permanent changes. Reinforce the idea that rollbacks and reverts are possible. Share your team’s processes for scenarios where this necessary. Remember your documentation we mentioned up top? Include why your team prefers to merge rather than rebase, or when to use a &lt;a href="http://stackoverflow.com/questions/8358035/whats-the-difference-between-git-revert-checkout-and-reset"&gt;revert vs. a reset&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Documenting your team’s workflow, giving space to ask questions, and letting new hires play in a safe environment will help them when they begin to make changes in your projects.&lt;/p&gt;

&lt;h3&gt;Code Reviews are an opportunity to mentor&lt;/h3&gt;

&lt;p&gt;Last, make sure your team has a full, robust development workflow. This includes code reviews. Most developers understand the importance of such reviews for releasing &lt;a href="https://sifterapp.com/academy/process/review/"&gt;quality code&lt;/a&gt;. But don’t underestimate the opportunity for mentorship.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/review.png" class="image-center" width="492"/&gt;&lt;/p&gt;

&lt;p&gt;Code reviews are a place for your experienced team members to check in on how new hires are maturing. They can create a safe place to give and receive feedback, allowing the less experienced developer to ask, “How would you approach this problem?” With the right approach, code reviews will bring the learning experience full circle!&lt;/p&gt;

&lt;h4&gt;Helpful Tools for onboarding a teammate&lt;/h4&gt;

&lt;p&gt;Here at Wildbit, we’re fresh off several new hires. Here are a couple of the tools that have helped us get our new friends up to speed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://honey.is"&gt;Honey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.agilebits.com/2015/11/03/introducing-1password-for-teams/"&gt;1Password&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://paper.dropbox.com"&gt;Paper&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All the above will take you a little time, but consider it an investment. Be intentional and help yourself, your team, and your potential hires down the road.&lt;/p&gt;</description><link>https://blog.beanstalkapp.com/post/134466186744</link><guid>https://blog.beanstalkapp.com/post/134466186744</guid><pubDate>Thu, 03 Dec 2015 10:43:13 -0500</pubDate><category>onboarding</category><category>development</category><dc:creator>chrisbowler</dc:creator></item><item><title>Introducing a New Dashboard</title><description>&lt;p&gt;Today we’re happy to introduce an enhanced and more useful dashboard. Our team uses Beanstalk every day and we felt like the current version needed some love and some key features. And you — our customers — told us the same thing.&lt;/p&gt;

&lt;p&gt;After crunching data, analyzing feature requests, and multiple iterations, we’re excited to show you the biggest update to the Beanstalk dashboard to date.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://assets.wildbit.com/beanstalk/blog/images/new_dashboard.png" class="image-center" width="492"/&gt;&lt;/p&gt;

&lt;p&gt;The Beanstalk dashboard addresses two basic needs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;To provide a starting point for accessing repositories.&lt;/li&gt;
&lt;li&gt;To give a high-level overview of what your team is working on.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Our old design wasn’t doing a great job for either. It gave a list of 15 recent commits across all repositories. This was not a good indicator of activity, even if your team is fairly small. And our research confirmed that most people ignored the dashboard and headed straight to the “Active repositories” list instead.&lt;/p&gt;

&lt;p&gt;In the redesigned dashboard, we not only preserved that list, but made it a center element of the page and enhanced its functionality. It now it includes a number of commits and contributors during the last 14 days. Activity charts are relative to each other, so you can clearly see which repository has been the most active. (BTW, if a list of commits was an essential part of your workflow, it’s still available by clicking the “See all commits” link in the end of “Top 10 committers” section.)&lt;/p&gt;

&lt;p&gt;One of the things that I personally find the most exciting is seeing recently deployed repositories and environments included on the dashboard. We discussed this concept years ago, but it never felt like a good idea for various reasons. With this redesign, we decided to include only environments in Manual mode on Dashboard. They are likely to be your most important production environments and won’t be updated after every push.&lt;/p&gt;

&lt;p&gt;The “Your assigned reviews” section now shows names and descriptions of branches — that’s something we’ve been asked about a lot. It’s much easier to notice that you’ve been assigned a new review and get straight to it.&lt;/p&gt;

&lt;p&gt;If you’ve ever wondered what your team is currently working on or who’s been the most active, you’ll like our new “Top 10 committers” leaderboard. It shows how many commits every person pushed this week, and also breaks them down by repository. You can even click on a bar and see a timeline of these commits filtered by user and repository!&lt;/p&gt;

&lt;p&gt;We hope you’ll enjoy using the new dashboard as much as we do. If you have any ideas or suggestions please don&amp;rsquo;t hesitate to &lt;a href="http://support.beanstalkapp.com/"&gt;let us know&lt;/a&gt;!&lt;/p&gt;</description><link>https://blog.beanstalkapp.com/post/134343423054</link><guid>https://blog.beanstalkapp.com/post/134343423054</guid><pubDate>Tue, 01 Dec 2015 13:31:30 -0500</pubDate><dc:creator>chrisbowler</dc:creator></item><item><title>Moar Changes</title><description>&lt;p&gt;Hey folks,&lt;/p&gt;
&lt;p&gt;Summer is a time for kicking back and enjoying the cool breezes off the water. But it’s also a good time to take a step back to review things, then do a little maintenance on your house.&lt;/p&gt;
&lt;p&gt;That’s what we’ve been doing with Beanstalk over the past weeks. We’ve recently made a few smaller updates that can make life a little easier for our customers.&lt;/p&gt;
&lt;h3&gt;Code Snippets for Issues&lt;/h3&gt;
&lt;p&gt;Previously, Beanstalk’s Code Reviews included a bit too much friction when highlighting issues in your code for your teammates. You had to toggle back and forth between the Issues tab and the Code tab in Beanstalk to review the code flagged in the issue. No longer!&lt;/p&gt;
&lt;p&gt;We’ve updated that portion of the app so that the code snippet in focus is included within the issue itself:&lt;/p&gt;
&lt;p&gt;&lt;img width="492" src="http://assets.wildbit.com/beanstalk/blog/images/snippets.png" alt="snippets within your issues"/&gt;&lt;/p&gt;
&lt;p&gt;This should speed up your code reviews and makes for a more comfortable experience!&lt;/p&gt;
&lt;h3&gt;Individual Commits: Review Status&lt;/h3&gt;
&lt;p&gt;We also made a few changes to how individual commits are handled from the review perspective.&lt;/p&gt;
&lt;p&gt;First, we renamed the “Expand Changes” function to “Inspect” for the sake of clarity.&lt;/p&gt;
&lt;p&gt;&lt;img width="492" src="http://assets.wildbit.com/beanstalk/blog/images/inspect.png" alt="Inspect your changes, better"/&gt;&lt;/p&gt;
&lt;p&gt;As well, you can now see the code review status for commits inside Inspect. As you can see in the image above, commit messages are shown (and can be expanded) and approved commits are highlighted in green. We hope this helps when tracking down more complex problems!&lt;/p&gt;
&lt;h3&gt;Deleting Unmerged Branches&lt;/h3&gt;
&lt;p&gt;Lastly, deleting branches. Previously, you were not able to delete an unmerged branch in Beanstalk. Instead, that had to be done in your version control system itself.&lt;/p&gt;
&lt;p&gt;&lt;img width="492" src="http://assets.wildbit.com/beanstalk/blog/images/delete-branches.png" alt="Beanstalk, now with more delete"/&gt;&lt;/p&gt;
&lt;p&gt;We’ve tweaked that now so that any branch on your Branches page of your repo can be deleted (use the trash can icon on the far right).&lt;/p&gt;
&lt;hr&gt;&lt;p&gt;Again, these are small improvements. But we hope they make your day a little easier. Have any thoughts or suggestions? &lt;a href="http://beanstalkapp.com/requests/new"&gt;Let us know&lt;/a&gt;, we’d love to hear them!&lt;/p&gt;</description><link>https://blog.beanstalkapp.com/post/127096543174</link><guid>https://blog.beanstalkapp.com/post/127096543174</guid><pubDate>Wed, 19 Aug 2015 15:37:03 -0400</pubDate><dc:creator>chrisbowler</dc:creator></item><item><title>Small Changes, Big Impact</title><description>&lt;p&gt;We rolled out a couple of small updates this week that could give you and your team a boost with your workflow.&lt;/p&gt;

&lt;h3&gt;Creating Repos&lt;/h3&gt;

&lt;p&gt;Until this week, only Beanstalk account owners and account admins could create a new repo. For some teams, this caused a bit of pain as regular users would have to make a request for each new repo to be created. This small step was a bit of unnecessary friction that we&amp;rsquo;re happy to remove!&lt;/p&gt;

&lt;p&gt;If you have non-admin users whom you’d like to be able to create a repo, owners and admins can enable this access. To do so, simply open the profile of the user in question and select the bottom check box shown here:&lt;/p&gt;

&lt;p&gt;&lt;img alt="create repo permissions" src="http://assets.wildbit.com/beanstalk/blog/images/create-repo.png" width="492"/&gt;&lt;/p&gt;

&lt;h3&gt;Bulk Approval of Commits&lt;/h3&gt;

&lt;p&gt;Another great aspect of Beanstalk is the ability to &lt;a href="http://guides.beanstalkapp.com/code-review/guide-to-code-review.html"&gt;review code&lt;/a&gt; written by your team members. And while we advocate a &lt;a href="http://guides.beanstalkapp.com/version-control/branching-best-practices.html"&gt;branch based workflow&lt;/a&gt;, many customers perform reviews commit-by-commit, rather than by branch.&lt;/p&gt;

&lt;p&gt;For those who do, there are times when it would be handy to approve more than one commit at a time. It’s easy to fall behind!&lt;/p&gt;

&lt;p&gt;If that’s your team, we’ve got you covered. If you ever need to perform an approval of all outstanding commits in a repo, you can do so under Repo &amp;gt; Settings &amp;gt; Code Review. At the bottom of the page, there is a new “Mark all commits as Approved” option.&lt;/p&gt;

&lt;p&gt;&lt;img alt="bulk approvals" src="http://assets.wildbit.com/beanstalk/blog/images/bulk-approve.png" width="492"/&gt;&lt;/p&gt;

&lt;p&gt;We try to think of the big picture and help you focus on the same. Namely, developing and deploying your projects. We hope these two changes will help Beanstalk customers keep focused on just that!&lt;/p&gt;</description><link>https://blog.beanstalkapp.com/post/125433520779</link><guid>https://blog.beanstalkapp.com/post/125433520779</guid><pubDate>Thu, 30 Jul 2015 11:05:20 -0400</pubDate><dc:creator>chrisbowler</dc:creator></item><item><title>Today’s Downtime: Failed Storage Server</title><description>&lt;p&gt;At just over two hours of downtime, today&amp;rsquo;s outage deserves some details and explanation. It was one of the more significant outages we&amp;rsquo;ve had in our eight years in business. This severely impacted our customers and we let you down, so I want to give some more insight into the situation and how we plan to improve it in the future.&lt;/p&gt;

&lt;p&gt;At about 8:36am EST, myself and the rest of team received down alerts for all major services on Dploy and Beanstalk. We quickly jumped on and determined that one of our storage servers was inaccessible. As you can imagine, these servers are critical for our service since they store the majority of repository data for accounts.&lt;/p&gt;

&lt;p&gt;All of our infrastructure is hosted in our own data center, so we have full control over hardware and network. In this case, the server was not responding at all. After looking at the console, we could tell it was hardware related - most likely failed memory by the message. Our focus moved to replacing the bad memory and rebooting the server to get the service accessible again.&lt;/p&gt;

&lt;p&gt;In most cases this process is easy. However, when you have almost 200GB of RAM, figuring out which stick of RAM is broken is time consuming. We opted to just pull all of the RAM and replace everything entirely. This process took quite a bit of time (two hours) since we had to determine the issue and coordinate remote hands in the data center to repair the physical hardware. Once we replaced the RAM the server posted fine and everything was back online. This happened around 10:40am EST. At that time we started to bring our front-end servers back for everyone.&lt;/p&gt;

&lt;p&gt;You may be asking yourself, why would one server going down affect everything? It&amp;rsquo;s a great question, especially when the majority of our stack has redundancy, including our network. The answer comes down to our decision in file storage. A few years back &lt;a href="http://blog.beanstalkapp.com/post/34706145918/new-servers-the-hardware"&gt;we invested heavily in bare metal and ZFS&lt;/a&gt;, considering we have tens of terabytes of repo data. After researching our options, it was clear that clustered file systems are slow and that file replication systems (such as DRBD) are mostly reliable, but can be scary when they are not. The larger commercial solutions are unrealistic in price and have their own issues and downsides as well. At Beanstalk, our primary goal is data consistency, even before availability. This means that we are willing to accept downtime if it means we have more confidence in making sure we never lose data. This is where ZFS sold us. It&amp;rsquo;s extremely simple and built on one of the most reliable systems in the world. However, ZFS did not have a graceful way to avoid a single point of failure.&lt;/p&gt;

&lt;p&gt;The single point of failure was something we were willing to accept because ZFS gave us confidence in data consistency and backups as well as comfort in overall uptime and reliability. To reduce downtime, we purchased spares of every part of the servers in our data center. We also create multiple nodes of file servers to make sure that if one went down, only a portion of customers were affected. Through ZFS snapshots, we&amp;rsquo;re also performing backups to two locations every 60 seconds. In almost three years, this in the first time we had a major outage on these servers.&lt;/p&gt;

&lt;p&gt;Today, the recovery plan bit us in two places:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;We didn&amp;rsquo;t have enough RAM on site (200GB) to replace it quickly. This meant asking our DC for RAM, which took longer.&lt;/li&gt;
&lt;li&gt;Even though we have multiple file servers, the single server outage caused high load on our front-ends and interrupted all customers. &lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;This led to more than two hours of downtime, impacting all customers.&lt;/p&gt;

&lt;p&gt;To improve this situation in the future, we&amp;rsquo;re going to look at a few things. First, we&amp;rsquo;re going to make sure that we have proper spares for more situations, even if it means having an entirely built server on hand and racked. It will not allow us to have real time replication, but we could quickly recover if an entire server went failed. Second, we&amp;rsquo;ll need to review why the high load happened across all accounts. We plan to isolate this traffic more so downtime on a node only affects a portion of customers. And finally, it&amp;rsquo;s been a few years since we implemented this storage infrastructure. In that time, a few ideas have come up for high availability on ZFS, including ZFS on Linux which could make use of several other technologies.&lt;/p&gt;

&lt;p&gt;I want to personally apologize for the problems today. Beanstalk is a service that you should constantly rely on for not only availability, but performance. No feature we build is more important than this. We&amp;rsquo;ll work hard to avoid problems like these in the future.&lt;/p&gt;

&lt;p&gt;If you have any concerns or questions, you can email &lt;a href="mailto:support@beanstalkapp.com"&gt;support&lt;/a&gt; or &lt;a href="mailto:chris@wildbit.com"&gt;me directly&lt;/a&gt;.&lt;/p&gt;</description><link>https://blog.beanstalkapp.com/post/122795296704</link><guid>https://blog.beanstalkapp.com/post/122795296704</guid><pubDate>Mon, 29 Jun 2015 17:50:31 -0400</pubDate><dc:creator>cnagele-blog</dc:creator></item></channel></rss>
