New in Basecamp: The “My Stuff” Menu

A great thing about the Home screen in Basecamp 3 is that your drafts, bookmarks, and assignments are all easily accessible. Load up Home, click a link, and see all of your assignments or your drafts in one place.

There’s just one problem with this approach: You have to leave whatever you’re doing to get to these links. We wanted to make it easier to find and access these “My…” links, and now you can!

Always available

Inspired by our mobile apps, we’ve removed these links from Home and added a dedicated menu called “My Stuff.” Now, no matter where you are, you can access your important links:

Open the menu and you’ll see your links up top plus a small collection of pages you’ve recently visited inside Basecamp:

Keyboard navigation

While we were building this new menu, we found it so useful that we wanted to use it without taking our hands off the keyboard. Just like the Find menu, we’ve added a keyboard shortcut to open My Stuff:

My Stuff: ⌘/Ctrl + ;
Find: ⌘/Ctrl + /

Once open, you can use your up & down arrows to navigate the links. Choose the link you want and hit Enter to visit that page — no mouse required!

Give it a try!

We hope this update makes it easier to access things like your unpublished drafts, assignments, and Boosts. Let us know what you think!

Thanks again for being a Basecamp customer.

Postmortem on the read-only outage of Basecamp on November 9th, 2018


Last Thursday, November 9th, Basecamp 3 was in read-only mode for almost five hours starting 7:21am CST and ending 12:11pm CST. That meant users could access existing messages, todo lists, and files, but no new information could be entered, and no existing information could be altered. Everything was frozen in place.

The root cause was that our database hit the ceiling of 2,147,483,647 on our very busy events table. Almost every single activity in Basecamp is tracked in this table. When you post a message, update a todo list, or applaud a comment, we track that activity in the events table. So when we became unable to write new events to that table, every attempt to do practically anything in Basecamp was halted.

This was an avoidable problem. We were actively working on expanding the capacity of the events table in the days prior to this outage, but we failed to properly account for how quickly we were running out of headroom.

To compound the avoidable factor, we should had been aware of the general issue much sooner. The programming framework we use, Ruby on Rails (which was originally extracted from Basecamp!), moved to a new default for database tables in version 5.1 that was released in 2017. That change lifting the headroom for records from 2,147,483,647 to 9,223,372,036,854,775,807 on all tables. Which ended up being the same root-cause fix that we applied to our tables.

It’s bad enough that we had the worst outage at Basecamp in probably 10 years, but to know that it was avoidable is hard to swallow. And I cannot express my apologies clearly or deeply enough.

We pride ourselves at Basecamp on being “boring software” because it just works and it’s always available. Since Basecamp 3 was launched, and up until this outage, we’ve had an uptime record of 99.998%. This near five-hour outage has taken that impressive statistic down to a more humbling 99.978%.

Some companies might choose to weasel around an outage like ours by claiming that it was only a “partial outage”, because the application remained available in read-only mode for the majority of this time. But that’s not what we’re going to do at Basecamp. We’re going to take the scar in our uptime record as a reminder to do better.

Because we owe everyone using Basecamp to do better. It’s embarrassing and humbling to have suffered the biggest outage at Basecamp in a decade from an issue that we should have addressed years ago, and that we were actively working on addressing, but failed to complete in time.

As the CTO of Basecamp and the creator of Ruby on Rails, I accept full responsibility for our failures. I should have been more vigilant with our own database schema when Rails 5.1 announced the new default, and I should have followed up and asked the right questions when we finally did start work on remediation. I’m really sorry to have failed you 😢

If you have any questions, or if we can help in any way, please reach out to our wonderful support crew who’ve been dealing with each report individually.

I also want to express my deep gratitude to everyone who’ve been so gracious with their kind words of encouragement and support during and after this ordeal. I don’t know if we’ve earned such understanding, given our clear culpability, but we are extremely grateful none the less.

Note: If you weren’t using Basecamp at the time, you can see how we kept everyone in the loop using our status.basecamp.com updates and a play-by-play record on our blog. We can’t promise to be perfect, but we promise always to keep you informed in a timely and completely transparent manner.


On a personal note, I want to apologize for not posting this postmortem until today. The plan was to have this final summary ready on Friday, but then the Woolsey fire hit, and our family was forced to evacuate our home in Malibu. It’s been a crazy week 😬

Basecamp 3 for Android: The Latest and Greatest

We added a few great features in the latest version of Basecamp 3 for Android. Download version 3.12 from the Google Play Store today.

3 new things to try:

1. Swipe Up for Quick Add and Recently Visited

You could always Add a To-do, Upload a File, Post a Message, or Add an Event right from the Home Screen. Most people, however, just needed to browse projects or the Hey! menu without the “Big Green Add Button” in the way.

Now you can simply swipe up on the Home Screen navigation to reveal these Quick Add options. We’ve also added a list of Recently Visited sections for easy reference. Just tap on one of these to jump right back to it.

Swipe up to quickly add To-dos, Files, and more. Jump to recently visited places

2. Comments with Image Galleries

We’ve improved the interface for commenting on Basecamp Messages. Now you can format your comments using Bold, Italic, and Bullets. You can also select multiple images to attach to form an Image Gallery in Basecamp.

Tap the Paperclip icon. Then select the images one at a time in the order you want them to appear. Tap Upload Files, and they’ll be grouped together into an Image Gallery. You can add and edit captions too.

Format your comments, make an Image Gallery

3. Reply Directly inside a Notification

If your phone supports it (Android 8.0 and above) you can now have Basecamp conversations without opening the app. Just reply to a Ping or Message notification. You’ll see a running history of what’s been said.

Reply to Basecamp discussions without opening the app

We hope these features help you get around Basecamp easier, give detailed suggestions, and reply to discussions without losing focus. We’ve got more planned! Stay tuned. Until then, get the latest on Google Play.

Thanks again for being a Basecamp customer.

— The Android Team @ Basecamp

Update on Basecamp 3 being stuck in read-only as of Nov 8, 9:22am CST

Basecamp 3 is now back online for reading and writing. All data was confirmed to be fully safe and intact. No emails that were sent to Basecamp during the outage were dropped. We may still have some backlogs on processing things like incoming emails, and you may still see some slowdowns here and there as we catch up. But we are back, and we are safe.

We will be following up with a detailed and complete postmortem soon. All in, we were stuck in read-only mode for almost five hours. That’s the most catastrophic failure we’ve had a Basecamp in maybe as much as decade, and we could not be more sorry. We know that Basecamp customers depend on being able to get to their data and carry on the work, and today we failed you on that.

We’ve let you down on an avoidable issue that we should have been on top of. We will work hard to regain your trust, and to get back to our normal, boring schedule of 99.998% uptime.

Note: If you were in the middle of posting something new to Basecamp, and you got an error, that data is most likely saved in our browser-based autosave system. If it doesn’t appear automatically, we can help you recover that data. Please contact support if you’re in this situation, and we’ll have a team ready to assist.

Below is the timeline for today:

At 7:21am CST, we first got alerted that we had run out of ID numbers on an important tracking table in the database. This was because the column in database was configured as an integer rather than a big integer. The integer runs out of numbers at 2147483647. The big integer can grow until 9223372036854775807.

At 7:29am CST, the team diagnosed the problem and started working on the fix. This meant writing what’s called a database migration where you change the column type from the regular integer to the big integer type. Changing a production database is serious business, so we had to test this fix on a staging database to make sure it was safe.

At 7:52am CST, we had verified that the fix was correct and tested it on a staging database, so we commenced making the change to the production database table. That table in the database is very large, of course. That’s why it ran out of regular integers. So the migration was estimated to take about one hour and forty minutes.

At 10:56am CST, we completed the upgrade to the databases. This was the largest part of the fix we needed to address the problem. But we still have to verify all the data, update our configurations, and ensure that we won’t have more problems when we go back online. We’re working on this as fast as we can.

At 11:33am CST, we’re still verifying that all data is as it should be for Basecamp 3. The database migration has finished, but the verification process is still ongoing. We’re working as fast as we can and hope to be back fully shortly.

At 11:52am CST, verification of the databases is taking longer than expected. We have 4 databases per datacenter and we have two datacenters with databases. So a total of 8 databases. We need to be absolutely certain that all the data is in proper sync before we can go back online. It’s looking good, but 99% sure isn’t good enough. Need 100%.

At 12:22pm CST, Basecamp came back online after we successfully verified that all data was 100% intact.

At 12:33pm CST, Basecamp had another issue dealing with the intense load of the application being back online. This caused a caching server to get overwhelmed. So Basecamp is down again while we get this sorted.

At 12:41pm CST, Basecamp came back online after we switched over to our backup caching servers. Everything is working as of this moment, but we’re obviously not entirely out of the woods yet. We remain on red alert.

I will continue to update this post with more information, and we will provide a full postmortem after this has completed.


Further insight on the technical problem: It’s embarrassing to admit, but the root cause of this issue with running out of integers has been a known problem in our technical community. We use the development framework Rails (which we created!), and the default setting for that framework move from integer to big integer two years ago.

We should have known better. We should have done our due diligence when this improvement was made to the framework two years ago. I accept full responsibility for failing to heed that warning, and by extension for causing the multi-hour outage today. I’m really, really sorry 😢

New in Basecamp: Sort the Message Board

Basecamp 3’s Message Board is a central place for your team to post updates and gather feedback on the record. It’s great for announcements, internal pitches, and just bouncing ideas back and forth.

Since Basecamp 3 first launched, the Message Board has been sorted so new posts appear at the top with older ones below. That’s great most of the time, but many of you have asked for other ways to sort your posts.

New ways to sort

With this update, we’ve added a new sort order setting to Basecamp 3’s Message Boards. You can access this setting on your computer, tablet, or phone from the menu in the upper right corner of the Message Board:


Now, you can sort your posts three ways:

  1. By original post date: Messages posted recently will always be shown first. This is still the default setting.
  2. By latest comment: Messages with new comments be shown first. This keeps the most active discussions right up at the top.
  3. Alphabetically A-Z: Messages will be sorted based on their title. If you use the Message Board like a table of contents for your team or company, this option will come in handy.

Applies to everyone on the project

Whatever you choose, this will affect everyone on the project. That way, everyone will know where to put things and where to find things—you’ll all see posts in the same order.

Different projects, different settings

Each project has its own setting. If you prefer organizing your Company HQ alphabetically, your client projects by latest comment, and your marketing team by original post date that’ll work great!

What’s more, Message Board posts on your project’s home screen will remember your sort order, too:

The Message Board card, sorted alphabetically

That’s it!

We hope this update gives you more flexibility and makes the Basecamp Message Board even more useful. Let us know what you think!


Curious how we build features like this while working sane, 40-hour weeks? Be sure to check out our new book: It Doesn’t Have To Be Crazy At Work.

The next big jump in Basecamp accessibility!

How we made the Basecamp 3 Jump Menu accessible

The Basecamp 3 Jump Menu

Earlier this year I wrote about How we stopped making excuses and started improving Basecamp’s accessibility. Accessibility improvements in Basecamp 3 have come in two ways: All new features we’ve shipped over the past year and a half have been designed and tested to meet WCAG AA guidelines (The Web Content Accessibility Guidelines, or WCAG, provides a shared standard that web developers can follow to make sure their products are accessible).

At the same time, we’ve gone back and retrofitted existing features and interactions for better accessibility. Today I’m excited to announce that we just completed some significant improvements to the Basecamp 3 Jump Menu!

The jump menu has always been the quickest way for getting to a person, project, recently visited page, and My assignments/bookmarks/schedule /drafts/latest activity. Here’s a look at it in action:

Note the small-ish “Press ⌘+J to show the menu” label

In setting out to make the jump menu more accessible we identified a few specific areas in need of help.

1. Provide an alternate way to trigger the menu

The ⌘/Ctrl + J shortcut for opening the jump menu isn’t communicated in a non-visual way, and initiating multi-key commands can be difficult for people who have motor function challenges.

To improve this, we added a button-based trigger, implemented as an invisible button that appears when someone first presses their tab key after loading up Basecamp. This technique is very similar to the common “Skip Navigation” link technique used around the web (we added one to Basecamp at the end of last year).

The Show Jump Menu button. We used the opportunity to reinforce the keyboard shortcut for those who prefer using it to open the menu.

2. Clear non-visual instructions for how to interact with it

As a visual user it’s fairly obvious how the jump menu works: We show the placeholder “Jump to project, person, or recently visited page…” with a blinking cursor, and a list of entries below it that filters down as you type.

To clarify this interaction for customers using a screen reader, we created a visually hidden <span> element with more verbose instructions, “Type to filter and use the up and down arrow keys to navigate this list of people, projects, and recently visited pages.”

3. Announcing the selected item and number of results as you filter

If you’re using a screen reader to filter through a list, how do you to know how many items are listed as your search term increases? And which item is selected as you arrow up/down or tab to navigate through the list of results?

This required the use of some specific HTML markup and JavaScript to convey this information to the Accessible Technology (such as screen reader software) that I’ll go into below.

Implementation

The first step in making a complex element like this one accessible is doing some research. We look for examples of similar elements from around the web for inspiration and guidance on the proper markup to use. The W3C WAI-ARIA examples site (get ready for a long one! “World Wide Web Consortium’s Web Accessibility Initiative (for) Accessible Rich Internet Applications”) is a great place to start. The second example on their Combobox with Listbox Popup Examples page, “List Autocomplete with Automatic Selection,” seemed most similar to the behavior of our Basecamp jump menu.

Authoritative as this site may seem, it’s worth testing the examples on real screen readers. There’s an abundance of quirks across screen reader + web browser combos that means these examples often don’t work quite as expected. When that happens, additional code is often required to get screen reader announcements to fire in the way you’d like. Expect lots of trial and error 😊


The implementation we settled on uses the aria-activedescendant property. This technique provides a way to keep DOM focus on the <input> while updating your selection as you move through the list of results. This is the key that allows the screen reader software to understand what’s happening on the screen. Here’s a look at the final product in action, followed by all of the dynamic and static attributes we used to get this working. For further reading about these attributes check out the W3C article linked above where many of the following definitions are borrowed from.

Demo

Code

  1. On the combobox container <div>, our <bc-content-filter> element:
  • role="combobox": This identifies the element as a combobox.
  • aria-haspopup="listbox": This indicates that the combobox is associated with a pop up list of suggested values.
  • aria-owns="jump-menu__results": This associates the combobox with the results container.
  • aria-expanded="true": This indicates that the associated results listbox popup element is displayed. Since in our case the list of results is always shown when the jump menu is shown, we don’t need to toggle this attribute. If it only appeared after some text was entered, we would need to toggle the attribute between this and aria-expanded="false".

2. On the text box <input>:

  • aria-autocomplete="list: Indicates that the autocomplete behavior of the string that’s entered is to suggest a list of possible values in a popup.
  • aria-labelledby="a-jump-menu__description": A sort of backup label for instructions on how to use the jump menu.
  • aria-controls="jump-menu__results": Points to the popup element that lists the suggested values.
  • Dynamic attribute: As up/down arrow keys or tab are used to navigate the list of results JavaScript is used to update the value of aria-activedescendant="IDREF" with the ID of the focused item.

3. A non-visible status <span> to communicate the number of results (e.g. “Home, 1 of 14”). Making it an aria live region with role=”status” and aria-live=”assertive” ensures that the screen reader will immediately speak any new text content that gets pushed into it. Just make sure the <span> is present in the DOM before pushing text into it, or it won’t work!

  • id=”a-jump-menu__status”
  • role=”status”: A type of aria live region used for conveying advisory information.
  • aria-live=”assertive”: This makes sure that when the selection changes, announcing it takes priority over anything else the screen reader might be saying.
  • Dynamic attribute: When the jump menu is first rendered we inject the name of the auto-selected first item in the list followed by the directions for using the widget (“Type to filter and use the up and down arrow keys to navigate this list of people, projects, and recently visited pages”). As you arrow/tab through the list of entries, we use a helper to update the contents of the span to again communicate the current selection, followed by your current location in the list, for example “Management team project – Match 2 of 3”.

4. Another hidden description <span>, referenced by aria-labelledby, provides a better description for how to use the jump menu than the visual placeholder:

  • id=”a-jump-menu__description”
  • Text content: “Type to filter and use the up and down arrow keys to navigate this list of people, projects, and recently visited pages”

5. On the listbox results container <div>:

  • id=”jump-menu__results”: Used as a reference by the combobox element.
  • role=”listbox”: Defines it as a container for the list of results.

6. On each <article> element in the list of results:

  • A unique id for each result in the list.
  • role=”option”: This defines the element as a listbox option.
  • Dynamic attribute: Using JavaScript we set aria-selected=”true” as you move through results. This correlates with when the item is referenced by aria-activedescendant on the <input>.

We also use some additional JavaScript to generate and set the “Match X of Y” status text:

https://gist.github.com/bergatron/71f0eac50c3a8b11d3d8715819c77c58


I hope this walkthrough was helpful! I would have loved to see more examples like this one as we were building the feature out. If you have any questions, please let us know!

Basecamp is hiring a data analyst

Come work with us!

Basecamp is hiring a data analyst to help us make better decisions in all areas of the business. This includes everything from running A/B tests with statistical rigor to forecasting revenue for the year to tracing performance problems to analyzing usage patterns.

We’re looking for an experienced candidate who’s done similar work elsewhere (as you’ll be the only one at Basecamp with this specialty). But nobody hits the ground running. You won’t be able to answer every question immediately or know how all the systems work on day one — and we don’t expect you to.

We want strong, diverse teams built from different backgrounds, experiences and identities. We’re ready for the ongoing work that goes into building an inclusive, supportive place for you to do the best work of your career. That starts with working no more than 40 hours a week on a regular basis and getting 8+ hours of sleep a night. Our workplace and our benefits are designed to support a sustainable, healthy relationship with your work. (We literally just wrote a book on the topic!)

Today, our team works from 32 different cities spread across 6 countries. You can work from anywhere in the world, so long as you can design a normal working day with 4 hours or more overlap with Chicago time (CST/UTC-6). Nomads welcome.

About the job

Data informs almost everything we do at Basecamp, but we’re not a “data-driven organization” in the sense that data dictates decisions. Data is there to clear the head, but ultimately we drive the company with our heart.

This means the job isn’t about maximizing revenue or minimizing costs. Yes, we want to make money and we don’t want to be wasteful, but we also want to be kind, considerate, fair, flexible, and calm. You won’t be looking for ways to squeeze the last sour drop out of the lemon at Basecamp.

But you will help us make sense of the data. Establish the facts. Put a price on the choices we make. Help us understand the business, our software, and its customers.

Here are some examples of projects you might work on:

  1. Analyzing the performance of a new marketing page. Track the cohort that signed up with this variation. Keep us patient for a statistically significant result. Compute the value of the change.
  2. Identify when a brute-force login attack started, quarantine the IP addresses involved, work with technical operations to bolster our defenses, and write up the forensics report at the end.
  3. Analyze our purchase records to locate transactions within states that are starting to collect sales tax on software like ours, work with our accounting company to document that sourcing method, and help evaluate whether we should buy or build a sales-tax engine.
  4. Help product strategy analyze usage data to figure out whether a certain feature is working as intended, and if it is, who it’s important to.
  5. Illuminate how we’re spending money on cloud computing today, and estimate how much we’ll be spending next year, given our growth patterns.
  6. Answer the question: Has Basecamp 3 gotten slower in the last 6 months? Compare aggregate performance data to find the high-level trends, then help us pinpoint data tipping points or code regressions.

Answering these questions usually means formulating and running queries against our big data infrastructure. But it also means just doing the basic math, and ensuring we’re being statistically rigorous. You should be able to do both the technical and statistical work to answer questions like the ones in the examples above.

That’s a lot of different areas of responsibility! So you probably won’t be an expert in all of them, and that’s fine. A solid fundamental approach to analysis will pave the way.

And you’ll have plenty of help! Basecamp has a Security, Infrastructure, and Performance (SIP) group that’s responsible for managing the data pipeline, storage, and analytical interfaces. And a Operations (Ops) group that’s responsible for running our servers, network, and cloud services. It’s a plus if you’re able to help evolve these systems, but by no means a requirement.

About you

In broad strokes, Managers of One thrive at Basecamp. We’re committed generalists, eager learners, conscientious workers, and curators of what’s essential. We’re quick to trust. We see things through. We’re kind to each other, look up to each other, and support each other. We achieve together. We are colleagues, here to do our best work.

You’ll probably have a degree that has exposed you to the rigor of the analytical work. Social scientists welcome. If you don’t have a degree in Theoretical Statistics, that’s not a showstopper — and it’s not what we’re looking for, anyway! We care about what you can do and how you do it, not about how you got there.

While we currently have an office in Chicago, you should be comfortable working remotely — most of the company does! This means that the bulk of our work is written, whether that be in the form of long reports or short chats. We value good writers.

We also value people who can take a stand yet commit even when they disagree. We subject ideas to rigorous debate, but all remember that we’re here for the same purpose: to do good work together. Charging the trust battery is part of the work.

About our pay & benefits

Our pay is within the top 10% of the industry, for the matched role and experience, based on San Francisco rates. This comes to a range at hiring of between $115,000 and $141,000, depending on your seniority. No matter where you live. Plus, with two years under your belt, you’ll participate in our profit-growth sharing program.

Our benefits at Basecamp are all about helping you lead a healthy life away from work. While we have a lovely office in Chicago, it’s not where you’ll find foosball tables constantly spinning, paid lunches, or any of the other trappings that companies use to lure employees into staying ever longer at work.

Work can wait. Our benefits include 4-day Summer Weeks, a yearly paid vacation, a one-month sabbatical every three years, and allowances for CSA, fitness, massage, and continuing education. We have top-shelf health insurance and a retirement plan with a generous match. See the full list.

How to apply

Please send an application tailored to this position that speaks to us. Introduce yourself as a colleague. Show us that future. As we said, we value great writers, so please do take your time with the application. Forget that generic resume. There’s no prize for being the first to submit!

We’d like to hear about how you’d approach some of the example projects outlined in the description about the job. Imagine you’re doing the work and walk us through your thinking.

All that being said, don’t send in a copy of War & Peace. We hire rarely at Basecamp, so when we do, there’s usually hundreds of applicants. Be kind to the people doing application triage and keep your cover letter to fewer than 800 words and the thoughts on project approaches below the same ceiling.

Go for it!

We are accepting applications for this position until Friday, October 12. We’ll let you know that we’ve received your application. After that, you probably shouldn’t expect to hear back from us until after the application deadline has passed. We want to give everyone a fair chance to apply and be evaluated.

As mentioned in the introduction, we’re eager to assemble a more diverse team. In fact, we’re not afraid of putting extra weight on candidates from underrepresented groups at Basecamp.

We can’t wait to hear from you!

(And again, imposters: We are too. Take heart. Step up.)

Basecamp 3: New feature round-up

Summer is winding down, kids are back in school and the Basecamp team has a fresh batch of updates to share. Here’s a quick look at some recent improvements that are available right now in all of your projects.

Getting over the hill

Hill Charts are a completely new way to track progress and a Basecamp 3 exclusive. People everywhere are loving this unique way to see where their projects really stand and answer the hard questions that get them un-stuck. Now it’s much faster to choose which lists to track on the Hill Chart. Take a look…

Set up Hill Charts.

Profile cards

Clicking someone’s avatar in Basecamp is often the best way to get a little more information about people you’re collaborating with—especially when you work with clients, people you’ve never met, or on a team spread across time zones. Now profiles show you which company someone is a part of, their role in Basecamp (Administrator, Owner, or Client), and what time it is where they live. These details can help you track down an admin, figure out who the new person on the project is, or avoid bugging someone in the middle of the night.

Profile now cards display additional details.

Coloring folders

Now you can color folders just like you could other items in Docs & Files. Add a little personality, make something important stand out, or come up with your own color-coding system.

Coloring and organizing folders.

Project tools

Basecamp features seven distinct tools to handle every situtation in your projects from communicating to organizing to tracking work. With the latest update it’s easier than ever to choose which combination of tools to use on each project.

Managing project tools.

Improved invites

One of the best things about Basecamp is it keeps everyone on the same page so that nothing falls through the cracks. That only works, however, if the right people are involved in the project. So we’ve removed some steps, cut some complexity and streamlined the process so that getting people into your projects is easier than ever.

Inviting people is clearer and more direct.

Managing My Drafts

You write a lot in Basecamp, we get it. Drafts let you work on that post, announcement, article, or note in private until you’re ready to share it. But not everything gets published and before this update it could be a lot of work to figure out what was what or simply get rid of the ones you no longer needed. With this update, you can see all of your draft Messages and Documents, when they were last edited, and in which project they live. Not only that, but you can trash them right from the list without having to click into each one first. More info, faster edits, less pain = win!

Managing My Drafts

Jump to projects

For Basecamp pros, the Jump Menu is a speedy way to get around in Basecamp. Just hit ⌘+ J to return to something you saw recently or type a few characters to quickly filter Projects, Teams, and People. With our latest update we made it easier to jump to another project by making them pop up to the top of the list. This makes the Jump Menu hands-down the fastest way to get to a project in Basecamp.

Filtering in the Jump menu now makes jumping to another project even faster.

Thank you ❤️

We’re so grateful for all our customers and we hope these improvements make your time working more calm, effective, and enjoyable. If you’re not yet a Basecamp customer and feeling overwhelmed because your business is growing, you’re buried in email, stuff is slipping through the cracks, and communication is a struggle maybe it’s time to give us a try. You can try Basecamp completely free and unlimited for 30 days. No credit card needed to sign-up!

New in Basecamp: Recurring Events

Now you can add [daily, weekly, monthly, yearly] repeating events to the Basecamp schedule. Here’s how it works:

When you add an event in Basecamp 3…


…you’ll see a new option to repeat the event…


…the options include every day, every week day, once a week, once a month, and once a year…


…you can choose to repeat the event forever, or until a certain date…


…the repeat frequency is shown on the event page as well…



This feature has been a long time coming. Thanks to everyone who sent in a request, to Merissa on the support team for championing the push to make this happen, and to Jeff, Conor, Pratik, and everyone else who pitched in to help make it all work. The new feature is live for all Basecamp 3 customers on all platforms (Web, Mac Desktop, Windows Desktop, iOS iPhone + iPad, and Android). We hope you find it useful.

New in Basecamp 3: Image Galleries

At Basecamp, we write a lot—from announcements to pitches, and everything in between.

Quite often, we’re presenting something that has a Before and After, like a mockup or interface design that’s been revised. Until now, this was always kind of frustrating. Basecamp only supported full-width images, so it could be difficult to quickly compare two images at once.

Today we’ve added support for side-by-side image galleries inside written posts!

This is a subtle but substantial change: galleries support and enhance your writing by making it more fluid, expressive, and precise. They’re great for sharing screenshots, comparisons, mockups, sketches, photos, and so on.

Here’s how it works.

Creating a Gallery

In any rich text field in Basecamp 3, you can make a gallery of images by uploading multiple images at the same time. You can do that in the file-browser dialog, or by dragging and dropping files into Basecamp directly.

Dragging images to make a gallery

When you do that, Basecamp will automatically group the images together in a nice arrangement. There are a few different layouts based on the number of images you’ve posted together.

If you upload two images at once, they’ll be oriented side by side.


If you upload three images at once, they’ll be shown 3-up in a row.


If you upload four images at once, you get a 2×2 grid.


And then finally, if you upload 5 or more images, they’ll be arranged in 3-up-sized rows.


You can also make a gallery by uploading images one by one. Just upload one image, then immediately upload another. Basecamp will notice that the images are directly adjacent and bundle them for you.

Adjusting a Gallery

If you don’t want the gallery layout, you can split it up by putting your cursor between images and hitting return. That will break up the gallery at that spot and resize things accordingly.

If you prefer a different arrangement (for example, maybe the second image should be first) you can drag and drop them to reorder.

You can also drag and drop images outside of galleries into galleries, and vice-versa.

It all works like you’d expect images in a text editor to work!

Related Changes

New toolbar for images

Clicking on attachments in Basecamp’s text editor has changed a bit. You’ll now see a balloon at the top that shows the file name, size, and the trash button. (Formerly this was just a trash button.)

New attachment toolbar

A more prominent caption field

Did you know you can write custom captions for any image you upload in Basecamp? If you didn’t, you’re not alone! This feature used to be rather hidden, but we coaxed it out of its hiding place.

Now just click on any image in the editor and you’ll see the Add a caption… field at the bottom. Click on that to type any caption you like.

This is a caption for the picture that shows adding a caption. 🌀

Popup menus on gallery images

Every image in a gallery has a small ••• menu adjacent to the caption. Click that and you’ll see a popup with the original file name and file size, plus links to download the image, or view it at full size.

Popup menu for details

That’s it!

Galleries work everywhere right now, in our mobile apps and on the desktop. We hope this update helps you create richer posts, and makes writing in Basecamp a little more enjoyable. Let us know how you like it!


New to Basecamp? Head on over to basecamp.com and see what it’s all about.