[00:00.000 --> 00:12.080] We started, and we went through a number of stages, like a lot of projects do. [00:12.080 --> 00:18.960] We started with a small donation we were trying to build up and get into a system where we [00:18.960 --> 00:28.040] could be self-sustaining because we wanted to actually have the ability to move faster. [00:28.040 --> 00:33.760] We wanted to build a better project for our community. [00:33.760 --> 00:40.520] The way we wanted to do that was we wanted to bring full-time developers into the project. [00:40.520 --> 00:42.480] As of 2022, we've been successful. [00:42.480 --> 00:45.880] We have two full-time developers working on the KeyCAD project. [00:45.880 --> 00:50.920] We have eight other core developers who are all contributing and hundreds of people around [00:50.920 --> 00:57.440] the world who we are able to successfully fund to help work on the project. [00:57.440 --> 01:02.720] Designers, documentation, librarians, all of the people that it takes to make a large [01:02.720 --> 01:11.160] open-source project work is sustained by our donations, by our community. [01:11.160 --> 01:17.760] I want to tell you a little bit about how this came to be because this wasn't obvious [01:17.760 --> 01:23.400] and it wasn't immediate and it wasn't just putting up a single page. [01:23.400 --> 01:28.280] Initially, our first donation page looked like this and you can see I've kind of squished [01:28.280 --> 01:31.160] it down so I could see the whole page. [01:31.160 --> 01:36.000] If you looked at it on your web browser, you would see the top little picture and you had [01:36.000 --> 01:40.080] to go all the way down to get to your donations. [01:40.080 --> 01:51.320] Quick, I would like someone in the room to donate 120 Swiss franc to the KeyCAD project. [01:51.320 --> 01:57.760] The question was for each user who went in there who didn't happen to use Swiss franc [01:57.760 --> 02:03.240] as their base currency, how much is going to show up on my credit card bill if I decide [02:03.240 --> 02:04.840] to support the project? [02:04.840 --> 02:08.800] How do I know that this is going to actually support the project? [02:08.800 --> 02:19.080] All of these initial pain points in our first generation of a donation page were there because [02:19.080 --> 02:23.560] we picked what was available, the projects that were supporting us. [02:23.560 --> 02:29.800] We were initially working through the CERN Open Society Foundation and they provided [02:29.800 --> 02:33.480] this, but they worked in Swiss francs because they're CERN. [02:33.480 --> 02:36.960] Our users, maybe not so much. [02:36.960 --> 02:41.840] We were initially seeing very few donations from this site. [02:41.840 --> 02:44.360] I'm going to tell you how we fixed it. [02:44.360 --> 02:48.400] Six ways or six steps. [02:48.400 --> 02:52.880] The first thing that we need to do is we need to identify who our users are because this [02:52.880 --> 02:58.280] drives every single choice we make in design, who is going to be the person who we're talking [02:58.280 --> 02:59.280] to. [02:59.280 --> 03:07.320] Then never interrupt the experience that your community has, your donors have because the [03:07.320 --> 03:11.800] moment that you interrupt their experience is the moment that they have better things [03:11.800 --> 03:13.040] to do. [03:13.040 --> 03:16.040] You always want to respect their time. [03:16.040 --> 03:23.240] Then shorten that click path, make sure that you're not setting yourself up for failure [03:23.240 --> 03:28.600] by putting intermediate steps that you don't have to have. [03:28.600 --> 03:34.120] Every time that you have to click on another link, you are going to lose more and more [03:34.120 --> 03:39.920] of your community before they get to that final point where they can actually come in [03:39.920 --> 03:43.560] to the larger community. [03:43.560 --> 03:52.200] It's in-house. There are a lot of places that will actually set up donations. [03:52.200 --> 03:55.880] I'm going to tell you, you need to do that yourself. [03:55.880 --> 03:59.040] Then test every single step. [03:59.040 --> 04:08.640] Finally, build your community because this is the basic raison d'ĂȘtre that we have as [04:08.640 --> 04:14.280] open source developers is we are a community. We're stronger as a community and this should [04:14.280 --> 04:23.160] be focused as the primary reason for each element in our donation. [04:23.160 --> 04:26.640] First, who is your customer? [04:26.640 --> 04:31.800] Who is the user base that you are trying to support? [04:31.800 --> 04:34.120] For KeyCAD, we were a bunch of engineers. [04:34.120 --> 04:39.520] We were a bunch of designers, circuit designers. [04:39.520 --> 04:43.160] Those were the professionals who were building those circuits. [04:43.160 --> 04:48.120] We're our audience. [04:48.120 --> 04:53.680] We needed to set up the system to reflect that. [04:53.680 --> 05:03.800] Your designers or your customers are also in this space who you're focusing on. [05:03.800 --> 05:06.280] It's not just what you do for a living. [05:06.280 --> 05:10.080] It's where you are in the world. [05:10.080 --> 05:12.560] What language do you speak natively? [05:12.560 --> 05:14.440] What are you most comfortable in? [05:14.440 --> 05:20.640] Once you can make your audience comfortable, your community more comfortable, then that [05:20.640 --> 05:28.160] is a time in which your community becomes stronger, becomes more tightly bound together. [05:28.160 --> 05:35.280] For us, we need to identify where we are. This is actual data. [05:35.280 --> 05:41.840] For KeyCAD, where do we see people coming into the project? [05:41.840 --> 05:47.880] We gather anonymized data that is sorted by country. [05:47.880 --> 05:55.440] The actual map here, our top five regions, the United States, Germany, France, Japan, [05:55.440 --> 06:02.080] and the UK. Notice Switzerland not in the top five. [06:02.080 --> 06:03.960] We were doing this wrong in the beginning. [06:03.960 --> 06:06.840] We were setting up a barrier in the beginning. [06:06.840 --> 06:09.720] We should be donating in euro. [06:09.720 --> 06:12.560] We should be donating in US dollar. [06:12.560 --> 06:21.360] We should be donating in yen and pound, but Swiss franc is maybe not the currency we should [06:21.360 --> 06:22.720] have chosen. [06:22.720 --> 06:24.120] We need to address this. [06:24.120 --> 06:28.200] The first step that we do is we try to address this. [06:28.200 --> 06:31.240] We joined in 2019. [06:31.240 --> 06:34.800] The Linux Foundation started a crowdfunding project. [06:34.800 --> 06:40.840] This was a way of bringing donations into open source projects. [06:40.840 --> 06:44.560] We joined this at the outset. [06:44.560 --> 06:50.000] Our primary reason, even though the Linux Foundation site is slow, even though they [06:50.000 --> 06:55.920] still have multiple clicks and they require way too much data to get you to allow you [06:55.920 --> 07:03.640] to donate, even with all of that, just changing from Swiss franc to US dollar donations met [07:03.640 --> 07:06.240] more of our community's needs. [07:06.240 --> 07:12.280] Our donations increased from about 10 per month to about 30 per month, which is good. [07:12.280 --> 07:18.400] It's a low increase because then we start to bring more people into our community. [07:18.400 --> 07:22.920] We need to do more, so we want to say, all right, what are the pain points still? [07:22.920 --> 07:23.920] Well, we're still slow. [07:23.920 --> 07:25.440] We're still requiring multiple clicks. [07:25.440 --> 07:28.040] I'm going to say, don't interrupt. [07:28.040 --> 07:30.280] Don't interrupt your donor's experience. [07:30.280 --> 07:33.360] I love GitHub sponsors. [07:33.360 --> 07:34.800] It's a wonderful program. [07:34.800 --> 07:40.400] If you're doing that, that's great, but you will never grow your community by putting [07:40.400 --> 07:43.960] the GitHub sponsors up there because the only people who are going to go up to the [07:43.960 --> 07:48.320] top of that page and find that button and click on that button are people who are already [07:48.320 --> 07:56.600] looking for it because no one goes to this page unless they want to download your software, [07:56.600 --> 08:02.400] unless they want to download their software, and the download is down here, and the sponsor [08:02.400 --> 08:07.680] is all the way up there, and so you have to go out of your way to find this. [08:07.680 --> 08:15.520] Going up this, for us, we identify, this is the KeyCAD website. [08:15.520 --> 08:19.400] We identify, why do you go to the KeyCAD website? [08:19.400 --> 08:25.880] You go to the KeyCAD website to get KeyCAD, to download KeyCAD, and so if we're respecting [08:25.880 --> 08:32.680] our community's time, we don't make them go out of their way to the donate button in [08:32.680 --> 08:34.920] the top right-hand corner. [08:34.920 --> 08:41.600] We start with making sure that they get to do what they came here to do first, which [08:41.600 --> 08:43.640] is download the software. [08:43.640 --> 08:51.520] Once you click on the download, instead of just showing a static page, we start the download, [08:51.520 --> 08:57.120] and while they're waiting, we give them the opportunity to donate because this means, [08:57.120 --> 09:04.760] this says, you are already accomplishing what you wanted to do, and we're going to [09:04.760 --> 09:07.840] give you this awesome software. [09:07.840 --> 09:14.760] Your software is awesome too, so that then becomes an opportunity while you're waiting. [09:14.760 --> 09:24.160] Maybe you also want to donate, and so this right here gave us an enormous increase because [09:24.160 --> 09:31.360] people were now willing to say, that's a good idea because I want this software to be better, [09:31.360 --> 09:35.360] I want to support this thing that I use, and our donations increase to 80 per month at [09:35.360 --> 09:37.360] this point. [09:37.360 --> 09:44.360] Now, part and parcel to this is shortening your click path because if you're respecting [09:44.360 --> 09:51.800] your community's time, you don't make them jump through hoops. [09:51.800 --> 09:59.200] Our initial page had nine to 12 clicks over four pages, and it went through postmates, [09:59.200 --> 10:02.560] and it was a mess. [10:02.560 --> 10:09.440] Our current page, every time we shortened it, we saw more people coming in, and so we're [10:09.440 --> 10:12.560] right now at one to two clicks over two pages. [10:12.560 --> 10:20.200] We'd like to get it even smaller, but that's where we're at right now because we have built [10:20.200 --> 10:28.480] this sub-site that we hold on our own. [10:28.480 --> 10:36.400] You can't shorten the click path if you don't own your own project's donation page because [10:36.400 --> 10:46.240] then you're at the mercy of whatever intermediary is going to be in between your community and [10:46.240 --> 10:47.480] you. [10:47.480 --> 10:52.840] We built this ourselves, and we put it behind a CDN, Content Delivery Network, because we [10:52.840 --> 10:54.520] want this fast. [10:54.520 --> 10:59.880] We want this to be directly at the user to the extent that we can. [10:59.880 --> 11:07.600] Right now, when you see this, all you need to do is, if you like the suggested donation, [11:07.600 --> 11:08.600] you click. [11:08.600 --> 11:10.440] It's one click. [11:10.440 --> 11:14.400] If you don't like the suggested donation, you can change it to whatever you want and [11:14.400 --> 11:19.880] then click through, so maybe two if you want to change it. [11:19.880 --> 11:21.480] We go through Stripe. [11:21.480 --> 11:28.400] We go through Stripe for the reason that we can pick how people are allowed to donate, [11:28.400 --> 11:36.360] so within China, for instance, where a large number of our users are, we can link into [11:36.360 --> 11:39.680] Alipay through Stripe. [11:39.680 --> 11:46.400] This allows our Chinese user base to integrate into our community better than they would [11:46.400 --> 11:53.760] be able to if we required credit cards, which are not common in China. [11:53.760 --> 12:01.840] Similarly, JiroPay in Europe, we link that in, SEPA payments. [12:01.840 --> 12:08.400] All of these things are accessible through Stripe, which is one of the reasons why we [12:08.400 --> 12:11.200] chose it, but there are other options as well. [12:11.200 --> 12:15.680] Then, we also added PayPal. [12:15.680 --> 12:20.640] People have different feelings about PayPal, and that's fine, but what I'm going to tell [12:20.640 --> 12:31.920] you is that if your community uses PayPal, then you should use PayPal because that is [12:31.920 --> 12:37.760] meeting them where they're at right now, so bringing your donations in-house. [12:37.760 --> 12:45.120] Internal are where you are controlling the information, and external, you need to get [12:45.120 --> 12:49.000] the information from someone else, and I'm going to tell you that internal is where you [12:49.000 --> 12:53.440] want to be because you get to make your own donation page, you get to make it as fast [12:53.440 --> 12:59.360] as you possibly can, and you get to control the individual steps. [12:59.360 --> 13:08.800] Every time that you make your users make your community wait to donate, every time you increase [13:08.800 --> 13:15.640] that load time by 100 milliseconds, you've lost 20% of people. [13:15.640 --> 13:19.960] They will go back, they'll click the back button, they'll go out and go somewhere else [13:19.960 --> 13:24.320] because you're not sure if it's loading or not. [13:24.320 --> 13:26.760] You get information when you bring it in. [13:26.760 --> 13:35.400] Bring this into your own organization because it allows you to connect with your community, [13:35.400 --> 13:42.000] and you get to every single donation should have a thank you from your project. [13:42.000 --> 13:49.680] You should never leave people out hanging saying, oh, I just sent this money into the [13:49.680 --> 13:52.240] ether, I hope it does something good. [13:52.240 --> 13:53.640] Send them a thank you. [13:53.640 --> 13:57.920] Send them a thank you because it lets them know that the community has received it, that [13:57.920 --> 14:06.760] they appreciate it, and you include in there a link into your forum, into your bug tracker, [14:06.760 --> 14:11.560] into the other ways that the community connects. [14:11.560 --> 14:20.920] This allows you to build these communities that bind all of us together more closely. [14:20.920 --> 14:30.680] Finally, test, real quick, A-B testing, piece of cake, never change everything outright. [14:30.680 --> 14:33.440] Never make a new donation page and get rid of your old one. [14:33.440 --> 14:40.200] You make donate 41, you want to change something, you make donate 42, and the only thing that [14:40.200 --> 14:44.680] you need to change is some simple little JavaScript. [14:44.680 --> 14:50.680] If math.random is less than 0.5, go to this one, otherwise go to that one. [14:50.680 --> 14:56.480] Two different pages, and each of them should have an embedded code in there, an embedded [14:56.480 --> 15:00.480] number that you get to send to Stripe. [15:00.480 --> 15:06.080] Because you're controlling your own donation pipeline now, so you get to send that to Stripe, [15:06.080 --> 15:13.480] you get to send that to PayPal so that when you do this, when you make a change, you get [15:13.480 --> 15:22.200] to look for your metrics, and you get to measure what the changes affect is, and whether you [15:22.200 --> 15:29.080] are trying to get people to join your mailing list because you want to announce releases [15:29.080 --> 15:36.680] or you want to get them to support the project or new users coming in, whatever it is, you [15:36.680 --> 15:43.440] are trying to change, you won't know if you've achieved it unless you're measuring it. [15:43.440 --> 15:51.880] So measure it in a way that respects people's privacy, measure it in a way that allows you [15:51.880 --> 15:56.680] to be the most effective you can in building your community. [15:56.680 --> 16:04.840] And finally, every donation is an opportunity to build your community because your donors [16:04.840 --> 16:12.520] are the most invested customers in your project, and you should treat them that way. [16:12.520 --> 16:20.520] You should bring them in because they saw fit to support you financially. [16:20.520 --> 16:31.080] They deserve to have that community wrap them in ways that are supportive and give them [16:31.080 --> 16:35.880] the opportunity to be part of the larger project. [16:35.880 --> 16:41.040] Every donor gets a thank you email, and then give them ways to deepen that connection, [16:41.040 --> 16:49.880] offer them things that are straightforward, so t-shirts for donation levels or badges [16:49.880 --> 16:56.440] on your user forum, all of these are ways to build that connection between your community [16:56.440 --> 16:58.200] and your project. [16:58.200 --> 17:03.200] And then directed donations give you more information about what your users are interested [17:03.200 --> 17:04.200] in. [17:04.200 --> 17:12.160] Finally, support your upstream because all of us stand on each other's shoulders. [17:12.160 --> 17:18.640] So when you are, whether you are a houseplant open source project just doing this for yourself [17:18.640 --> 17:24.940] or you're a big, large project, if you're receiving donations, pass that up because [17:24.940 --> 17:31.680] the things that allow you to build your project and allow all of us to do better are the things [17:31.680 --> 17:34.800] that we should be supporting ourselves. [17:34.800 --> 17:38.600] So last couple of tips. [17:38.600 --> 17:40.480] Be transparent. [17:40.480 --> 17:48.280] Show people how much processing charges are in the project and allow them to donate a [17:48.280 --> 17:50.320] specific amount to your project. [17:50.320 --> 17:55.880] You can add a small check box to round up to the donation amount. [17:55.880 --> 18:01.000] And always, always, always if you're doing your donation page, watch for fraud because [18:01.000 --> 18:11.160] there are a lot of bad actors who will automatically try to use your donation page to verify stolen [18:11.160 --> 18:12.560] credit card numbers. [18:12.560 --> 18:17.600] So when you do this, you watch out for this because it's not just an ethical responsibility, [18:17.600 --> 18:22.200] it's a financial responsibility to actually make sure that people are not being charged [18:22.200 --> 18:25.160] for things that they don't know. [18:25.160 --> 18:32.760] And so in this case, you can see this was all within one minute, this is actual attack [18:32.760 --> 18:37.960] on the KeyCAD donation website, it's like 30 donations per minute. [18:37.960 --> 18:42.240] They were just cycling through a bunch of credit cards. [18:42.240 --> 18:47.320] And we found the one that they work that they succeeded and we reported it as fraud and they [18:47.320 --> 18:49.280] stop after you do that for a little while. [18:49.280 --> 18:51.400] So thank you very much. [18:51.400 --> 18:52.400] I really appreciate it. [18:52.400 --> 18:54.400] If there are any questions, I'm happy to take them. [18:54.400 --> 19:09.320] Not actually a question, but I think I don't now remember which opens up project it was, [19:09.320 --> 19:14.240] but it might have been KeyCAD actually even, but I remember it was very nice to have like [19:14.240 --> 19:20.120] a donation page, which then listed a bunch of new features kind of that came up recently [19:20.120 --> 19:24.760] and just said that these were made possible thanks to your help. [19:24.760 --> 19:25.760] Yes. [19:25.760 --> 19:28.560] I think that was an excellent way to think about it because it's true. [19:28.560 --> 19:29.560] Yeah. [19:29.560 --> 19:37.440] So the statement was that you can show what the donations have done with and one of the [19:37.440 --> 19:43.880] things that KeyCAD does is after you donate, it shows you a thank you page after the donation [19:43.880 --> 19:48.080] and that it has a little graphic of all the things that we've done in the past year and [19:48.080 --> 19:51.240] we update that about once a year or so. [19:51.240 --> 19:52.240] So yeah. [19:52.240 --> 19:53.240] Yeah. [19:53.240 --> 19:54.240] There we go. [19:54.240 --> 19:55.240] Yes. [19:55.240 --> 20:04.040] How and why did you understand that these implementation were in such a way? [20:04.040 --> 20:09.880] So the question was how and why do we know that we need to make changes? [20:09.880 --> 20:12.960] We weren't where we needed to be. [20:12.960 --> 20:21.560] So we wanted to support full-time developers and we did not have the funding level to be [20:21.560 --> 20:22.720] able to do that. [20:22.720 --> 20:32.360] So we wanted to increase that to be able to develop the project faster and better and [20:32.360 --> 20:37.880] we knew because we'd periodically dog food it ourselves. [20:37.880 --> 20:44.840] We'd try and the developers will donate not just our time but we'll practice going through [20:44.840 --> 20:47.720] the donation page and it was painful. [20:47.720 --> 20:50.880] So we'd click and we'd be like, okay, come on, come on, come on, come on. [20:50.880 --> 20:59.000] And then we'd get there and I had to pull up the, like, how much is 120 Swiss franc [20:59.000 --> 21:01.440] in euro? [21:01.440 --> 21:05.400] Now I know but intuitively I didn't know that. [21:05.400 --> 21:13.440] So dog fooding what you build is an important step and it costs you a five dollar donation [21:13.440 --> 21:17.960] which is, you know, you run it through there and you're supporting a good project when [21:17.960 --> 21:18.960] you do this. [21:18.960 --> 21:19.960] Yes. [21:19.960 --> 21:27.920] How do you handle one-time donation versus recurring donation? [21:27.920 --> 21:31.480] So the question is how do you handle one-time donation versus recurring donation? [21:31.480 --> 21:38.320] So we have right here a highlighted one-time and monthly. [21:38.320 --> 21:45.000] So we have this option and you can set up the back end to do that. [21:45.000 --> 21:50.840] Right now we only support that through PayPal because we don't want to be responsible for [21:50.840 --> 21:54.280] keeping track of user accounts. [21:54.280 --> 21:58.760] And PayPal allows you to set up subscriptions without the user account. [21:58.760 --> 22:04.240] So right now we do that through PayPal but the thing to watch out for is to make sure [22:04.240 --> 22:10.920] in your design that you're very, very clear about what the user is, do they have a subscription [22:10.920 --> 22:12.040] or do they have a one-time. [22:12.040 --> 22:16.720] So when you click on this, instead of saying donate, this says donate via PayPal or donate [22:16.720 --> 22:23.400] via credit card, e-wallet, instead of saying donate, we change that to subscribe. [22:23.400 --> 22:30.400] So we do a couple of things to make it really, really obvious that if you move this slider [22:30.400 --> 22:36.400] over here and click on this button, you're signing up for a monthly subscription. [22:36.400 --> 22:38.400] We still have people making the mistake though. [22:38.400 --> 22:43.080] So we're still working out, we're still doing AB testing to see can we get that better. [22:43.080 --> 22:44.080] Yes. [22:44.080 --> 23:02.760] The suggestion is to have a separate button for the subscribe, yes. [23:02.760 --> 23:06.640] I'm going to AB test that and we'll see what comes out. [23:06.640 --> 23:07.640] Yes. [23:07.640 --> 23:29.200] You absolutely can and I skipped by a couple of the options here for, here we go. [23:29.200 --> 23:37.640] So open collective, Patreon, coffee, Linux foundation, if that's where your community is, [23:37.640 --> 23:38.640] do that. [23:38.640 --> 23:39.640] Absolutely. [23:39.640 --> 23:40.880] That's fantastic. [23:40.880 --> 23:47.400] If your community is on coffee, you should have coffee on there. [23:47.400 --> 23:57.160] But there's a balance to be struck and open collective is nice, but it's one, two, three [23:57.160 --> 24:03.520] clicks deep and we've never seen a way to shorten that and we can't cash it. [24:03.520 --> 24:10.160] So it does add a couple of steps, but I do know a lot of projects that use it successfully [24:10.160 --> 24:11.640] and that like it a lot. [24:11.640 --> 24:18.480] So definitely, you know, test it out, but try to replace one of the buttons, AB testing [24:18.480 --> 24:23.800] with open collective and see if that's where your community is and the only way you know [24:23.800 --> 24:30.200] that is by checking. [24:30.200 --> 24:57.760] Thank you.