58. Create AppExchange Solution From True Zero | Pat McClellan


AppExchange Solution

Pat McClellan, who joins to talk about AppExchange Solution, is a 4x Salesforce Certified Salesforce Developer, 2x Dreamforce Speaker, Lightning Champion, author of Proton Text App.


Main Points

  • Pat’s self-introduction and brief journey of creating the Proton Text App
  • Why did Pat change his career path and now have a good motivation to be a Salesforce developer?
  • Pat goes through the technical design and how the app was built
  • 3 typical use cases that Salesforce users use text messages on the platform
  • The text messaging app competition on AppExchange 
  • How did Pat collect requirements?
  • How big revenue does Pat have on this app?
  • The difference between the product and the consulting business?
  • Pat’s advice on building a successful AppExchange app

Links on AppExchange Solution


Contact Me

If you enjoy this podcast, please reach me out to let me know your thoughts or simply say Hello. My (Xi’s) contact info:

Take care, until next time :)!

Transcript

AI-generated, unedited.

[00:13] Hey everybody! This is Xi Xiao. This is here another new Salesforce Way podcast episode today. I am sitting with a new guest with me. His name is Pat McClellan. Hello, Pat. Hi, Xi. How are you? I am good. I am good. How about you? I am great. I am glad to be here. Yeah. Thanks. Thanks for for joining the show. Would you like to introduce yourself before we start our session? Sure, I'd be happy to. I'm Pat McClellan. I live in Santa Barbara, California. I'm a Salesforce developer. I work for myself. My company is Proton Seven Group, and I'm an App Exchange partner. I am a career changer, which in most most industries would be a big deal. But around the Salesforce ecosystem, there are a lot of career changers. I spent thirty-three years in media production and in marketing. I have a marketing degree and a film degree, and so I was a video producer straight out of college, and then got hired into a marketing agency to produce digital media, and ended up getting promoted, and I became an account director, and ended up in management of a marketing agency. For about 15 years, and then about three years ago, I'd kind of gotten burned out. I didn't really get in in my job duties. I didn't get to make anything anymore, and I really missed the hands on of making things. So I quit that job. Now, in that marketing agency, the agency where I worked,

[01:43] we put on a lot of major tech events. We even produced the the keynote address for Dreamforce one year. So. I was well familiar with with technology, and I would go to these big technology conferences that we were putting on, and I would watch all the developers walking into sessions and thinking, you know, that that seems like something I would really like. So, in in May of two thousand seventeen, I left my job with the agency, and I got on Trailhead, and I completed my first trail the last day of May two thousand seventeen. That was my very first trail. It took me five weeks to get to Ranger. It took me eight weeks to get my admin cert, and then I got my platform app builder certification a month after that, and my Dev One certification two months after that. Wow, that's a really big progress you made with the short period of time. Well, I was I was feeling pretty good about my progress, but then and and then I started talking to recruiters who were very interested. You know, as soon as I got my Dev One certification, I got a lot of calls from recruiters. And they said, "Great, we'll send us your resume." And I sent my resume, and they said, "Well, we could probably get you a job as a chief technology officer or a chief marketing officer, but not as a developer because nobody's ever paid you to be a developer before." So out of necessity, I started to create my own experience. I didn't have any experience on my

[03:13] resume, so I thought, well, maybe I should build an app. As I had trained on Salesforce through Trailhead. I had been really surprised that in Lightning there wasn't a good Lightning native texting solution. I was familiar with Twilio because actually back from my agency life we had bid on on putting on the Twilio user conference, so I knew about Twilio and the API and how that all was was available. So I decided that would be a good challenge to to build a texting app, just pretty much as a proof of my skill set. So I started building that. Actually, I built started building it on vacation on on Thanksgiving holiday, 2017. And about two months later, I had a working model of it. And I thought, you know what? I really enjoy building this. I'd like to to see this through to the end. So I set the goal to get it on App Exchange and continued building it and improving it. By middle of August, I had approval, and by end of August, it was listed on AppExchange. So it took me about fifteen months to get from knowing nothing to having an app on the AppExchange. This is a a quick story, but I know it has a lot of effort behind this. You talked a lot. I want to step back a little bit. So, you had a great job, right? So you have been in the media and in the

[04:43] marketing area for a long time already. But you didn't want to continue. You feel yourself is more with the developer role. That makes you more happy. Am I right? Right, I you know I like making things. Um, and so early in my career, I I had a film degree and I was a video producer, and then I was a multimedia producer. I was I was producing multimedia back when mult this was in the in the late eighties, early nineties, when multimedia meant a touch screen monitor and and a video disc. Yeah, indeed. I'm hearing all this. I mean. You don't have to be a software developer, right? You have the filming skills. You can carry a camera. You can do the Adobe Premiere. Those things are also, you know, hands-on stuff. Why do you go to the software path? Uh, you know, I I just I felt like I'd done that before. I okay, you want to taste this new stuff? When I was a teenager, before I went to college, I was a disc jockey, so I'd done radio. By the time I got got to college, shifted over to video and film. Um, you know, it's just a natural progression. I'm I'm, you know, computer savvy, and I'd been putting on conferences for a lot of technology companies, and I'd just been around software, so I just wanted to do it. Yeah. It's really great to hear your story. You make your decision and you keep your heads down and you get certified and then you

[06:13] apply for jobs. And if people don't get your the dream job, then you just find a dream job by yourself. You have to make your own experience sometimes and and. I recognize the fact. I, you know, I had a successful career, so I had some savings that I, I, I wasn't starving while I was I was doing all of my training. But I was also pretty motivated. I was working, you know, from the time that I started on Trailhead to the time I got my developer certification, I was probably working between seventy and eighty hours a week. Wow, head head down. Yeah, indeed. That's the motivation. That's the passion, because I see people around me as a developer role. Some of them are not so passionate about their their role. They just get the job done and then. And then you know they enjoy their life after work, which is good. But I mean, for these people, they should accept that people like you, who are really keen to learn the stuff and spend so much more time, you will bypass them sooner or later. That's just the fact. I wish people can understand. I think that part of it is working for yourself. If you are working somebody else and it's just a job and it's just a paycheck, then there's not a whole lot of motivation to really put in the effort to work sixty or seventy hours a week. When you're

[07:43] working for yourself and and really investing in your future, then you know that's a pretty good motivation to put in whatever time it takes. Hmm. But some people would say, "Ah, you know, start your own company, do your own stuff." It's difficult. It it is difficult and and I have to say not everybody has the the gut for it. It's it's pretty scary at times. Yep. I had worked for myself back in the nineties for about five years and very successfully so. And when you realize that you know you can you can generate work and you can find clients on your own and it's okay you know. Sometimes you're working to a deadline and you're working sixty or seventy hours a week, and then sometimes you don't have a client for a couple of weeks and you're not working at all, and that can be scary. But if you get used to the idea that the the work sort of ebbs and flows. And and you've got confidence that there will be work in the future. Then you can really enjoy that time in between, and you know spend that learning some new skill or or taking time with your family or whatever. But once you've been self-employed, you're never unemployed. You're only self-employed again between clients. Okay, thanks for sharing all this. Let's get back to the the app itself. What's what's the name of that app again? The app is called Proton Text, and it does Proton Text and MMS texting from Salesforce. It's a Lightning component, so

[09:14] it's listed in the App Exchange, right? It is listed in the App Exchange. Okay, so I will put the link to our show notes for our listeners to check what the app it is. Um, would you mind to quickly walk us through what's the process of building the app and get it passed in App Exchange, just quickly? You know, some steps. Sure. Well, you know, I can't say that my process is necessarily the right process. I had never built an app before, and it was my first attempt, and I didn't really have anybody showing me how to do it. So what I did was, so so this app accesses the Twilio API. In order to access the telecom system, so from Salesforce you're sending a basically a web call, an HTTP call to Twilio, saying these are the credentials for my Twilio account, this is the message, this is the number that it's coming from, and this is the number that it's going to. And then Twilio takes all of that information and puts it out onto the telecom system. And then when somebody responds. That comes into Twilio. Twilio packages that packages that up as a data packet and sends that in as a REST call to your Salesforce org. That that you set up a REST site on the Salesforce org, and it. Receives that that call from from Twilio,

[10:44] it accesses an Apex class and decodes all of that, saves it as a message, and then notifies the sender that there's a new message. So that's how the the basic interaction with the Twilio API works. So the first thing I had to do was learn how to make REST calls and and receive that. So you know, just piece by piece throughout the whole process, I would think, okay, the next step. What is the the the technology that I need to learn and figure out how to how to do? So piece by piece, I learned the the Twilio API. Learned how to set up a REST site on an org. I learned how to make HTTP calls. You know whether it's a post or a get or whatever. I guess I can also assume that Twilio has really good documentation. Well, yes and no. They they have good documentation for their API. However, the libraries that they have are for Python and JavaScript and and all these languages, and they they don't really support Salesforce directly. They don't have a they haven't published a Salesforce library or an Apex library for their API. So you know, it's it was a lot of figuring things out. You know, figuring out how to look at a curl command and transform that, write that into a call from from Apex. I see. So luckily, you know, places like Stack Exchange were really good for

[12:14] for helping me figure things that like that out. So, you know, I didn't learn to build this myself. I learned to build this from the community. You know, piece by piece, little piece of technology at a time. I would I would post on on Stack Exchange and. SFD Fox would respond. Oh yeah, well here's how you turn a curl command into a into an HTTP call from from Apex. So, I don't a self taught developer. I'm a community taught developer. That that's that's so cool. Could you brief me? What are the typical use cases in Salesforce that we do need to use the text message? Sure. So there's there's three basic use cases. We've talked a lot here about one to one messaging, and that's basically the the component itself looks. I designed it to look and feel just like the messaging app on your iPhone or on your Android phone. It's a scrollable list of all of the conversations that you're using. You you touch one of the conversations, it opens up and you see a list of talk bubbles with the most recent at the bottom. And you text enter at the you know you enter your next text at the bottom and hit return to send it. So it really is trying to be a one to one messenger that's intuitive because it's just like the one on your phone. The second application is automated texting. So this would be for things like it could be for any time you would have a system notification

[13:44] that sends an email. A system notification then can just send a text to a user. Or let's say that if you're a bank and you've got a low balance and the customer is set up notifications for a low balance, then they would get a text when that balance hit a certain thing. Or one of the easiest and most useful applications is just appointment reminders. So you could set this up tied to a datetime field with a process that that triggers a text to go out 24 hours before a particular datetime. Um. So there are a lot of good applications for automated texting, and and honestly, I think customers, consumers are really used to that sort of thing. You know, getting a a text reminder from the dentist about their appointment. And I do, I do, I I do enjoy that. That's right. It's it's it's a a good reminder, and and that's just the right level of engagement. I don't want that in an email. I don't want a phone call, but a text is just right. So we we got one to one messaging, automated texting, and then the third area, which is what I built in the second major version of the app, is blasts, text blasts. So this is used mostly for marketing, and it's tied to the campaign object. So you can send out a text blast to all of the members of a campaign. Now I recognize that there's a lot of use for this capability by

[15:14] people who aren't using campaigns and marketing. For example, I've got a couple of customers that are nonprofit organizations, and they need to text out to a list of volunteers on a regular basis. And so I I built it so that it works natively with the campaign object, but I also have a custom object called a blast list. And a blast list is you can build a blast list from contacts or leads, or you can import a CSV file, or you can build a blast list from any list of contacts where there is a mobile phone number. So if you had a custom object for students, for example. You could select, you know, two thousand students, add them all to a blast list, no problem, and then you can send a text blast to to all of them at once. So that that the blast capability, of course, I had to name it Proton Blaster. It's it's the Proton Blaster feature, but it's all included in Proton Text. Yeah, you you did mention that at the beginning when you look at this messaging service on Salesforce platform, was it it didn't exist or there weren't some hard competitions by the time? Well, there is. I face. Look, I'm the I'm the littlest fish in the pond. There are there are some very big players out there that have been around for for years. And in fact, most of them built had thousands of customers using Salesforce in Classic.

[16:45] And so, when I the the need that I saw was that all of these were built in Classic, and I was learning Lightning, and I wanted to be in Lightning, and their Lightning implementation, it was still the app that they built in Classic, and they sort of adapted it to sort of look like Lightning, and it really feel it didn't. It it kind of looked like Lightning, but it didn't have the Lightning component aspect of it. By that I mean to use it, even if you were in Lightning, to use these apps, you had to go and select their app. You had to leave the Sales app, or you had to leave the Service app, or whatever app you were in, and go to their app to do your texting. And instead, mine is a component that drops into any tab on any page, and in fact, should be on every page. So that wherever you are, you can always text. It can go in a console utility wherever, and it knows where it is. Wherever you drop it, it knows where it is, and it uses that awareness of its context to serve you up the data that and and and options that will save you clicks and will will make you you know feels intuitive. So, for example, if I go to an opportunity record. I look over in the tab where there's Proton Text, and it shows me the two conversations that we've had with anybody—one with a customer, one with a sales rep—about that opportunity. And then, it—and then if I click New.

[18:15] To launch a new conversation, it's going to bring up a list of. It's going to say, "All right, I'm on an opportunity page, and an opportunity has a related account. So let's bring up the list of the likely recipients. The likely recipients would be all of the contacts that are associated with the account that this opportunity is also associated with. So it does about two steps or three steps worth of logic to present a list of all of the contacts on that account." Search for any, but but those are the ones that you're most likely to want to text. As soon as you click that, as soon as you click that, then it's going to to start the conversation. It will link this conversation to the record that you that you're on this page. You can you cancel that link if you say no. This really isn't about that, but it defaults to saying you're starting this conversation from this page. So I'm going to assume that it's about this this this record. Let's link it. Yeah, I'd like to call this as a smart context feature. So you have all the data, you have all this object relationship in Salesforce. So what do you really need to do is just find out what's the likelihood when the user open a page, what are the possible, potential, users or contact they want to reach, and then you list them out, just to save their their clicks. That's that's smart. Did you get this

[19:45] by figuring out by yourself, or is it a user requirements originally? No, I actually I figured it out myself because and I don't recommend this. It's probably not smart, but I did not really work with customers ahead of time to figure out what their needs were. I felt like I wanted to develop the app that would be what I wanted to use in Salesforce. I had found there to be a real gap around texting as I was going through all of my training and looking at Lightning, and I thought that that just seems like an obvious gap. And the way it should work really is the way my phone app works, and then if you add to that the capabilities that Lightning has. So, for example, if you're a component on a page, you have access to all of the record data that that any component on that page loaded up, right? Using using Lightning Record Service. And so, in order to when you back to our example, if you're on that opportunity page and you click New Conversation. What that's doing is, it doesn't check back to the server. The first thing that it does is says, if I'm on a record page, let's pull in the data about this. Let's look through that data. Is there an account associated with this? If there's an account associated with this, then that tells us go and get the contacts associated with this account. So it finds that

[21:15] information, and by the way, opportunity has a field called account. But if you're on a custom record page, that might be named account, or it might be named account ID. And so, where says, all right, this is a custom record. Let's check for account and account ID, and if either one are there, then we'll use that, and we'll find the contacts associated with that. So you know it's not, but I try to I try to think ahead. I try to be very very context aware. Hmm. This is a competitive advantage since you're, um, I would assume it's like a one-man company you currently have. So you're doing everything by yourself, and you control the requirement, and you could get it implemented whenever you have time, whenever you want. So that's definitely faster than most of those big apps from the big companies in the App Exchange. That's exactly the point. So I mentioned the time in in April when I was about ready to send it for security review and discovered that Twilio was coming on the market with their version. Well, that's when I went back to work, and what I did in that two months was build in all of this intelligence about where is the component because that kind of integration in Salesforce Twilio. Is not interested in doing. They and I don't mean to downtalk them. They have a good model. They have a good, a lot of really good tools in their studio on their site, and they're trying

[22:46] to pull in Salesforce users into their ecosystem. I'm trying to keep Salesforce users comfortable in their own environment, building with the tools there. By and and my competitive advantage there is number one. I know Salesforce better than better than Twilio and some of my other competition that are are doing texting elsewhere. And number two, as you say, I'm a one man shop. I can turn around a feature in two days, and it takes them two months, maybe. Hmm. So, can I ask? Not to mention the number of the customers, I just want to know. So, it's enough the revenue to cover like a one man's salary. I'm not right. No, not not so. Not yet. And and this is this is big advice that I have for for all of the developers out there that think, oh, I just I've got this great app and a great idea, and I should build it into an app and put it on App Exchange, and then I'll be set. The reality is that. Building an app and getting an app exchange is just the start, right? That's that's the table stakes. You have to be able to pass security review. You have to have a an app that is competitive, that that is better than than others. But then you have to spend a lot of money to market it, and you have to advertise it, and you have to. That's why these big companies have marketing teams and have sales teams. It's not

[24:16] because their app isn't good enough; it's because they're trying to sell more. So, as a the disadvantage of being a one man shop is, on the days that I am coding, I am not marketing, and on the days that I am marketing, I am not coding. So, yeah. You know, it it really is a constraint, and I'm self-funded. You know, I bootstrapped this company, and so I don't have you know some some venture capitalists million dollars to go out and hire a sales team. So it takes a long time to build up. Luckily, I'm doing consulting work, and you know I have some other other work, other income. Uh, my uh, my first in my first six months, I had three or four customers, and I also try to be the low cost uh solution out there. So many of my customers are are are uh, you know, their their monthly bill is. You know, thirty dollars or so, or a little bit less, and so you know, my my income for the first six months from this app was in the hundreds of dollars. I've I've now I'm now over a thousand dollars per you know per month, but it is it's not the only source of income. My goal is to build additional apps, and what I'm trying to do is build apps that are very sticky. And that are transaction based. So, for example, my customers pay

[25:46] per text, and they pay for for the phone line. So, as long as they're texting, they will continue to pay. It's a low cost, but it's monthly recurring revenue. And so, every new customer I've got means that that monthly recurring revenue is going to go up because all of my customers that I've ever had are still my customers, and. You know, this is going to be a slow, slowly growing but ever gaining momentum source of revenue. Oh, it's good to confirm this. You know, maybe you're already getting a lot of revenue. Maybe you don't. Before I ask this question, because I also have the same feeling that you know, one man shop build an app, even with a great idea, you can't easily get a lot of customers. And the and also another example is that I'm doing this podcast for free and taking my time here, and also one man shop. So, I definitely I'm a little bit struggling, you know, to to get more listeners and get more maybe some ads in the future. So, I think I'm on the same page as you do now. That's right. You know, it's it's the the difference here is this. I'm doing consulting, and on on the day that I do consulting, I get paid an hourly rate, and it's not a bad rate. And that means that you know, assuming that I can build up a decent consulting practice, that means that I'll be getting money

[27:16] as long as I want to keep working. Well, as soon as I stop working, my consulting clients stop paying me. On the other hand, what I've built with the app is a. It does require some support, some ongoing support for clients, but. In principle, what I've built is something that people can buy and install and start using and continue to pay me, and so I'm making money from clients that I haven't talked to in in six months, other than to drop them a note and say, "Hey, how's everything going?" and they say, "Great." You know, so that's an ongoing source of income, and if I can build that up and add another app or two that provides that same sort of ongoing, recurring revenue, then I can retire, and the money keeps coming. Yeah, you can definitely say that again. I couldn't agree more with you. So this is the difference between a product company and a consulting company. It's a totally different two models, right? Hmm. So, what would be your advices to the listeners who are also developers? You know, some of people, including me, thought about create the AppExchange app. We have the skill, but we're lacking of ideas. We lacking of perseverance. We lacking of time. So, what's your guidance to to us? Well, t here is t here is no t here is no magic. Solution here. One of my favorite

[28:46] quotes that drives me, and I I don't know who said it. I've I've heard it a number of places. But the word entrepreneur. Entrepreneur is a French word that means had an idea, did it. Now I'm not French. I I know it doesn't really mean that, but I love the quote because there are a lot of people out there that picture themselves as entrepreneurs because they've got so many ideas. But don't follow through and do it. And if you don't actually follow through on your idea and do it, or at least try it, then you're not an entrepreneur. You're you're a big ideas person, and there are thousands of those. There are tens of thousands of those. So if you've got a great idea, sit down, write it down, give yourself a timeline. Give yourself. Figure out how in the world am I going to find time to do this? So I developed Proton Text. It took me the the core code took me about six months of full time work. And when I say full time, I'm talking sixty or seventy hours a week. If you have a full time job, how are you going to find that time? And so the the question becomes: How do you prioritize your your life? How do you make it a priority? Are you going to give up game? Are you going to give up watching TV? Are you going to give up, you know, your fitness regimen or whatever? What can you What can you not do that gives you the time to spend the time that it's going to be necessary

[30:17] to build this? Number two, you may have this big vision of this comprehensive app that you're going to build. Start with the the minimally viable product, the MVP. That's what you need to build first. Get that out to some customers, get some feedback on that. Some beta customers just to test it. You are not going to make any money on it at this point. This is still part of development, but get that product out there and and then expand from there. That's also good advice around going through the security review for AppExchange. The way AppExchange works is they they really pour over every line of code that you submit to get approval the first time. So what you do is you submit your app around this minimally viable product. You get approval on that, and then subsequently you build out. You continue to evolve different versions of that, and the approval process is automated. And it's it's automatic, and so really don't overcomplicate your app for that initial security radio. Okay. Good. the the The other thing, and and you know, when venture capitalists are looking for companies to invest in. They are looking for a team. They're looking for somebody that has the technical skills to build this, and they're looking for somebody that's got the entrepreneurial skills to market it and sell it and and make it viable in the market.

[31:47] So if you are that tech skill set, but not the marketing and sales skill set, you need to find a partner. Are you gonna find a partner of yours? No, actually, I mean, I worked in, I worked in marketing for thirty years, so I've got the marketing part of it down. I don't have the the. The drive really to be the sales, and I've thought about adding a salesperson, but honestly, I'm going fast enough. The the growth that I've had, each new customer I get to know as they they install it, and almost all of my customers have an idea or two for a new feature, and that has really driven the the evolution of the product. Great, Pat. I think I've used enough of your time. It's a great conversation with you, and really good luck with your future journey of this AppExchange tour. Thanks for coming to the show. Thank you so much, Xi. I I love your podcast. I've been recommending it to my friends, and good luck to you. Thank you so much, Pat. Talk to you next time. Bye bye.

[32:53] Bye.

Leave a Reply