Under the code—How a Salesforce CTA created CloudToolkit.io with Python

In this episode of Under the Code, we learn how Ben Edwards created one of the most popular fullstack Salesforce apps, CloudToolkit.

CloudToolkit provides a wide range of Salesforce tools, such as org comparison, bulk field creation, and more. Without further ado, let's see what Ben had to say.

Why did you create this app?

Originally it was to automate some of the general admin and developer tasks I was doing when working on Salesforce projects - really just to enable me to do my job easier. After I had built a couple of local scripts and apps I built these into reusable apps for other people to use as well. Although they've been around for a while now they seem to be used by a range of admins and developers.

How much planning/thinking did you do before starting to code?

Not a lot to be perfectly honest. I had a pretty good idea of what I needed as far as functionality goes and then it was just a case of writing the code and putting things together. The applications are relatively lightweight, so there wasn't a large need for planning around SLDC, data model, infrastructure, framework etc. It was just a case of already knowing some Python + Django and running with it on Heroku.

How did you choose which technologies to use (programming language, frameworks, etc)?

All the apps run on Django and one of them on Ruby on Rails. The main decision was what I had used in the past and knew well enough to build with. I had done a bit of hobby web development using Django and had done a bit of work with Python so made sense to go with something I was familiar in. But I also really like Django, it's a fully-featured web framework supported by Heroku so it made sense anyway.

At a high level, what is the architecture of this app?  What are its components?

All the applications run on Heroku so it takes away a lot of the infrastructure management around the apps, meaning I can focus on the code and deploy. The key components would be:
- Django web framework (https://www.djangoproject.com)
- Heroku for server management
- Heroku Postgres database
- Heroku Redis for async jobs

How did you learn all the technologies required to create this app? Was this pre-existing knowledge or did you learn specifically to create this app?

I had pre-existing knowledge in Django but still had to do a lot of learning as I went, especially in more of the complex Python development tasks. I also hadn't done much with Heroku so learning how to deploy to Heroku and manage async jobs was a bit of a learning curve but it was well documented so wasn't really too difficult to learn in the end.

How did you come up with the UI? Did you review existing apps for ideas? Do you have suggestions for our readers on how to create a simple and nice UI?

UI definitely isn't my strength so I just focussed on using existing frameworks. At the time Bootstrap CSS was popular and easy to use to really just aligned to that and updated some colours to make it a bit more unique.

Did you use a CSS framework? How much CSS did you write yourself? Any lessons learned?

Yep I used Bootstrap 3 which was pretty popular at the time and super easy to use. I do have some CSS experience so I adjusted colours and bits and pieces but for the most part relied on the framework for things like responsiveness and leveraged existing components like cards, modals, buttons etc.

Any big lessons learned from creating this app?

Building an app is one thing but maintaining and supporting it actually ends up in infinitely more effort! Because the apps are used in so many different environments, everyone had different requests and things they wanted to do.
I was getting a lot of feature requests which I tried to fulfill early on but eventually couldn't keep up as these apps were all done in my spare time as well. Then trying to resolve bugs and issues as well was getting overwhelming.
I had fully open-sourced the applications as well assuming others would contribute features and support but ultimately had very few contributions and no one really contributed anything to the apps.

How did creating this app positively affect your career? (speaking at sf events, new job opportunities, networking, new projects, etc.)

It definitely makes me proud that people have used and heard about the applications. I've been at Salesforce events where people know my name because they've used the apps before so that's cool. In addition, also helps with reputation in the market so I think ultimately has had quite a positive impact on my career.

What advice would you give to other devs looking to create a fullstack salesforce app?

Just go for it! If you're doing something all the time that seems like an app or script could fulfill then build that script and start from there. I think people can overcomplicate an app but in reality it's just a case of building something that makes your work easier and then it's likely others will think the same.

Wow, this was a nice one! Thank you, Ben, for such level of detail!

Subscribe for exclusive Salesforce Engineering tips, expert DevOps content, and previews from my book 'Clean Apex Code' – by the creator of HappySoup.io!