Bryton is the co-founder of Cured Compliance, an Australia-based startup providing compliance software for butchers. We discuss the inspiration behind the product, building it from scratch with Django, multitenancy, using Django Q, managing iOT with temperature gauges, and more.
Will Vincent 0:05
Hi. Welcome to another episode of Django Chat, a podcast on the Django web framework. I'm Will Vincent, joined by Carlton Gibson, Hello, Carlton.
Carlton Gibson 0:13
Hello Will!
Will Vincent 0:14
And we're very pleased to welcome Bryton Wishart from Cured Compliance to the show. Welcome Bryton.
Bryton Wishart 0:19
Yeah. Thank you.
Carlton Gibson 0:20
Thanks for coming on.
Will Vincent 0:22
So this is a fun one for us, because I feel like we can sometimes be a little bit insular talking to people who are working directly on Django, but you live in Australia, and you're building this real world solution with Django. So I'm excited to talk about what that is and how you've done it. So maybe, could you give the quick pitch on what is cured compliance.
Bryton Wishart 0:41
Yeah, I definitely so cured compliance was a bit of a brainchild between myself and my business partner, who just happened to be a butcher. But what we've looked to do, I guess, is digitize all the compliance and regulation that a retail butcher in Australia has to do. So, you know, people don't realize the amount of, I guess, regulation that goes into making meat safe. And, you know, ensuring the meat that a butcher is selling to us consumers is is safe. And, you know,
Will Vincent 1:12
fit well, not in the US. We just had a we just had a big boars head scandal where it sounds like they just did whatever they wanted for a long time. Yeah. Look,
Bryton Wishart 1:21
Australia originally actually had something very similar back in the 90s that kicked off regulation. So it's, yeah, we seem to move very we seem to like regulation in Australia.
Carlton Gibson 1:33
Can I just butt in? Because, like, one of the supposed as a Brit, one of the supposed advantages of Brexit was that we'd be able to import us, me, and then like, but hang on us, me, the standards aren't quite what we were used to. And so there was a bit of like, is that anyway, carry it?
Will Vincent 1:50
Yeah, well, I don't know if it's the standards. It's, it's the, you know, at least in the United States, there's the FDA, federal drug Food and Drug Administration, and they noted that there were problems, but as often as the case, they're severely underfunded. Anyways, we don't need to get into that. But yes, it's good that, especially food that we consume, has regulation, and so there's quite a lot of it in Australia, yeah,
Bryton Wishart 2:12
and we just happened, I guess, to come across a gap where everything was paper based. So it was kind of this opportunity to really innovate the industry, right? Which was awesome.
Will Vincent 2:22
Give us a sense of the timing, because you you've been up for a while, but when did you, when did you first start trying to, you know, attack this with a web solution?
Bryton Wishart 2:32
Yeah, so as a business, this is sort of our first third year of operation, so we're still a fairly young startup, but I maybe started this six months before we incorporated. So it's sort of been about a three six month journey, and that's realistically where I sort of found Django. So that was kind of my first time I touched Django as a framework. Was sort of that three or six months ago, just kind of when we had this
Carlton Gibson 3:00
idea. So can I ask you were assessing two or three options out there? What stuck out about Django? How come you sort of, you know, because you've been taking a bit of a punt, if you didn't know it previously. Yeah,
Bryton Wishart 3:11
I guess for me, it was kind of, I looked through a whole lot of things. I sort of had a fundamental knowledge of Python from the early days, and this was back, sort of when the machine learning kicked off with the introduction of the cloud computing. So I'd sort of done a bit of work with Python there, and when that's kind of the language I know and trust, and then just went hunting for frameworks. And for me, it was all about I didn't want to do the difficult things like, manage authentication, manage all of those sort of things. I guess that yeah, we say is batch is included that some of the other frameworks just didn't have. Because, yeah, you don't want to get authentication wrong. Yeah,
Carlton Gibson 3:54
right, so, but so that that batch is included thing that's a real big selling point, right?
Bryton Wishart 3:58
Huge, huge for me.
Will Vincent 4:00
So then maybe walk us through, like, where did, where did you start? What was the, you know, start project, and then, what? Yeah,
Bryton Wishart 4:06
I guess it was kind of a start project. And start just diving, diving into building or taking some of these paper forms and just digitizing them. And that's that was kind of the start. And originally, when this started, it wasn't so much we wanted to make a product to sell. This was, how do I solve a problem for my mates business, more or less, right? How do we perfect digitize this and make it simple? And so there was kind of no plan to productize this or commercialize it anyway, shape or form. It was purely, let's build something, nothing. You know, we did the first bit of research was, which was, does something exist in the market that we could just buy and use and solve the problem? And there was kind of nothing designed for the meat industry. Everything was very much a, hey, you're a cafe. These are kind of your pre start checklist. And that's, that's kind of it, right? So there's a bit more involved. Evolved, especially when you're doing, like, small goods production, that sort of stuff in the meeting, sure you've got to have that traceability layer. And so there was sort of nothing out there, and we decided to do the idiotic thing and build it ourselves.
Will Vincent 5:15
There's nothing like ignorance, right?
Bryton Wishart 5:18
Definitely, definitely nothing like ignorance. I
Carlton Gibson 5:21
was going to ask, So, did you go form first? So, because often people start with the models, and then they build a view, and then the form comes last. But you, because you're starting from these paper forms, is it almost the other way? Yeah,
Bryton Wishart 5:31
it was kind of start with the forms, and then, you know, very quickly learnt about the RRM and how that operated, and what models were, and that sort of part. Because, you know, previously, my programming knowledge was very much visual basics, right back, want to say 15 years ago. And you know, you back, then you'd write, you, you'd write a secret SQL code to deploy to a database, and that was it. So this whole model and RM was a very foreign concept to me as a developer, like it wasn't something I touched before. So yeah, very quickly learned that the RM and models were my best friend, and it meant I didn't have the right SQL, which was amazing. And then it was kind of this, build the form, build the model, and start to really think about what, what do models need to look like to digitize? Because there was a bit of a learning curve going from here's a paper form that sort of has, here's all the information they want to capture. But how should this best be designed into a model that's going to allow that whole class based driven, you know, automatic form and all that sort of stuff. And I'm
Carlton Gibson 6:35
assuming there's a little bit of back and forth, like a full start, like, oh, you create a model, and that's not structured, right? And totally
Bryton Wishart 6:42
I, I got very, very comfortable with working with migrations, and rolling migrations back, and doing all that sort of stuff really quickly. Because, yeah, you do make mistakes in those models and go, that's just not going to work, especially if you start thinking about, how does it scale, right? So originally, when it was just sort of this one thing for one person, I was like, Yeah, whatever. But then kind of as another person went, Hey, I'd like this too. We went, Oh, okay, how do we? How do we make this better? I guess, from design point of view, I
Carlton Gibson 7:14
guess as well, you probably didn't structure by you didn't filter by user account first time out. So, like, you know, because it's just for your mate. You don't need to restrict the query sets. Yep,
Bryton Wishart 7:24
yeah, yeah, correct. And, you know, I think originally I was using just the default user profile, and then I hit that part where we kind of up and running with our first, first customer. I went, Oh, I'm really limited what I what I can do with this user profile from day dot. And so I had to go and do the extended custom user model to add those additional attributes, right, which then meant restarting the entire project, restarting the migrations. And lucky enough, at that point in time, there wasn't really any data in the system, and the other customer hadn't been using it for that long that they were like, Yeah, that's fine, blow it away. Start again, yeah. So I sort of learned that the hard way, which is fun, but
Carlton Gibson 8:09
it's a good, good thing to learn that lesson at that point, rather than sort of much later on, when, yeah,
Bryton Wishart 8:15
definitely, definitely.
Will Vincent 8:16
So what? Yeah, I'm just curious what, what came next, right at what point? So you have so the models alone is a huge thing. At what point were you working on the interface that the butchers could use? Like, how long did that take?
Bryton Wishart 8:30
Yeah, that's being kind of an evolution. And I'm not a CSS guy, so I'm lucky enough that I know someone who's very, very good at that user experience, and is really good at CSS. So I we ended up just contracting him in to do sort of one day of work a week on just helping making the user interface. We chose bootstrap as a simple framework to work with from that UI experience because people are very used to that look and feel. And then it was kind of, how do we simulate the paper like? How do we make the form, the digital form, look like the paper form? Because butchers are kind of in that digital divide where, because of covid, a lot of shop prices went up, but before covid, big supermarkets have sort of driven down the prices, so you sort of have this generational gap of butchers in Australia. And so it was kind of that, how do we how do we make this digital experience as close as to the paper experience for them, so they won't see they going, what does this additional field mean? How does it flow? And then it's kind of that, yeah, we just started there, and that was kind of the starting point. And it's, it's sort of involved over time, as we've optimized forms, I guess, where you're not double handling information, or where passing data through between different forms, etc.
Carlton Gibson 9:55
Okay, and can I ask that for the layouts? Because I guess if you want to match a paper layout. Did you something like crispy forms? Or,
Bryton Wishart 10:01
yeah, was using crispy forms and then using the layout functions in the forms. So I could just define those all as Python functions, which are, I guess, dictionary as they are, to make it really simple from that sort of UI. Because, again, I I don't want to blurt my HTML, HTML output. It's like, let, let the framework do the heavy lifting to a degree, right?
Carlton Gibson 10:24
Yeah, well, as much as you can, yep.
Will Vincent 10:27
Well, it sounds like the butcher has really hated the paperwork, because getting people to switch, even if they have some annoyance, is, you know, famously hard, right? It has to be really overbearing to to have someone, you know, take time out of being busy to learn a new system, but I guess that sort of proves the efficacy of what you're trying to do, if at least one or two people were willing to go down that journey. Yeah,
Bryton Wishart 10:51
I think we also approached the regulators and went through their experience to make sure it was going to suit their requirements as well, right? Because, you know, I guess as an application in a regulated industry, your app is only, is only effective if the regulator actually supports it. So we built something. The regulator went, nah, that's not right. We'd be down the water.
Will Vincent 11:13
Do you have to print things out for the regulator? Or how do you submit compliance to them? Right? If they're used to accepting forums, paper forums, yeah, so
Bryton Wishart 11:22
they, they actually have a physical audit. So an auditor will come out on site to the shop, and that's kind of where they would view all those forms and tick that off. So we've sort of done those training sessions with the auditors to go, Hey, this is how you can see this type of information. And they've actually really adopted, I guess really loved it, because for them, it's not looking through two or three binders of forms. It's cool. I just want to look at this information quick and easy. Here's a filter. Bang, done. So it's sort of streamlined some of their auditing processes, which has helped a lot as well. I can
Carlton Gibson 11:57
imagine as well that they might sort of pre do some of the paperwork, or the what was paperwork? They can do it in the office before they go to the shop, and then when they get to the shop, you know, they can spend more time actually inspecting rather than looking at the paperwork, which is a, possibly a win, yeah,
Bryton Wishart 12:11
definitely. And one of the things we're sort of looking to roll out with, I guess, regulators in the long term, is that whole digital audit experience. So it can be, hey, I'm just gonna rock up and walk through your shop now to make sure it's clean, but everything else is done.
Okay, sounds good.
Will Vincent 12:27
And then you have, I mean, there's, there's so much in here, you have some internet of thing, Internet of Things around temperature and, like, walk us through, like, what are all the things? And then how do you, you know, sync that up with, with the dashboard, yeah.
Bryton Wishart 12:39
So, my business partner had this wonderful idea that he wanted to monitor his fridges and freezes. Which originally, I was like, Yeah, that sounds great. Let me go and see if there's something we can buy off the off the shelf, right? Which, you know, the great thing is, there's a lot of sensors that do that job for us. But then I was kind of like, how do, how do I actually plug this into into the Django, right? How do I get the data there? How do I, how do I store the data efficiently? And how do I, you know, create the interfaces that you can view and see the data? Because having the data is one thing, but if you can't view it, it's, it's worthless, right? And so we sort of started with this. We found a vendor that sold these really, really just basic Bluetooth gateways. And we went down the road of Bluetooth sensors using just Bluetooth Low Energy sensors. The idea being they were cheap. If a butcher broke them, it wasn't going to break the bank to replace them, because butchers apprentices are known to just wash everything with a hose and including electronics. So having those sort of cheap, replaceable sensors was kind of a Yeah, the idea was, hey, if you break one, it's not going to be it's not the end of the world. You're not paying $500 it's a $30 sensor. Just buy another one. And then we had these gateways. And originally these gateways were just doing POST requests to to an endpoint that I wrote, which then sort of raised me as well. How do I secure this endpoint? Right? Because these gateways don't do authentication, so I actually had to then write some middle middleware that worked more or less like a whitelist, so it would look up the customs environment go, does his MAC address as a gateway be registered in their in their environment? If so, that's an acceptable POST request and accept it, if not just drop it pretty much at the server level. I
Will Vincent 14:33
need to ask you so about your previous experience, because to just think of and implement middleware is a fairly advanced thing. So had you done, like, how did you know about this concept of middleware and to take that approach for this problem?
Bryton Wishart 14:48
Uh, lots and lots of reading. So I I've got both of your books will from memory, and I'm one of those people, once I read a
Will Vincent 14:55
well, it's not in there, customizing middleware is not in there, right? But
Bryton Wishart 14:59
it's. To it gave me enough to go. There's got to be a way, like there's that whole middleware piece, there's got to be something that I can do. And that's kind of where I just started digging deeper and reading the docs, to be honest, as like, hey, how does middleware work? And then you just start doing the old Google search for tutorials on middleware. And that's, that's pretty, pretty
Will Vincent 15:19
thin. I think Val
Bryton Wishart 15:22
found, enough to get something functional.
Carlton Gibson 15:25
I want to ask about this, because hang on a sec. You're now storing quite soon. Yeah, quite soon. Off the bat, you're now storing time series data from instruments which like that just must stack up really, really, really quickly.
Bryton Wishart 15:42
Um, it does. And lucky enough, I only take one measurement every five minutes. Okay, so it's not, it's not every second. Every second would be a different game. But, you know, Postgres is very, very good at doing this type of stuff, and it's kind of one of those things. Do? I do? I do? Yeah, the old, I guess, developer problem is, do you over optimize? Yeah, start thinking about that. Where you go, do we wait until we have a problem and then go cool, hopefully by then I've got a bit more money that I could throw at the problem and get it resolved that
Carlton Gibson 16:15
way. Yeah, if you've
Bryton Wishart 16:16
got traffic without any kind of where I'm at with the point, yeah,
Carlton Gibson 16:19
are you so are you reaching scaling limits now?
Bryton Wishart 16:25
Yeah, no, no, any scaling limits yet. We are just slow and steady growing as a business, which is wonderful. I'm sort of, you know, this is still myself and my business partner and our one contractor. So we are still a very small startup, and there is a physical limit of having customers you can onboard because of that, which is, you know, I think a blessing in disguise, because it means I'm not dealing with hyperscale. And hyperscale is scary.
Carlton Gibson 16:52
It gives you time to grow, right? And it gives you time to grow into the bigger things. And, oh no, we can do we can tweak the database. We Okay, relax a bit. Tweak, tweak the server. Okay, relax of it.
Will Vincent 17:02
I want to ask about that end point, just because that's something that, yeah, the three of us can just say, Oh, just toss up an end from this. But someone who's newer in their career, like, how exactly did you do that? Did you use Django rest framework? Did you use Django ninja? Like, what you know? Yeah, since you said that the rest of the rest of the rest of the project is explicitly not really using APIs, using HTML, so it's server rendered.
Bryton Wishart 17:26
Yeah, I actually think I just modified and I probably have a look at look at the code, because it's been a while since I've looked at it, but I'm pretty
Will Vincent 17:34
sure that's good. That means it's just working. It is literally a function,
Bryton Wishart 17:38
a function view, one of the few function views I have written, okay, and it then just either returns a HTTP response 200 and grabs the the JSON data and loads that through. So it's, yeah, not using REST, not using anything like that. It's just a boring old function view. I
Will Vincent 18:00
mean, if it works, it works. Yeah, interesting. I mean, you're making me think that maybe that's an interesting angle to, you know, teach people about API stuff rather than just jumping right to rest framework or some of these things. Be like, we can do it a little more simply. That's interesting. Nice, not to get off topic. But if I'm
Carlton Gibson 18:21
a, if I'm a butcher, and I'm more and my I've got data on my fridge, because I need to show to the inspectors that my fridge is what happens if, say, the power goes out. And, you know, can I get a warning about that? Or, yeah,
Bryton Wishart 18:33
so that sort of became the next step. Is, once we had this data, the challenge was like, Well, how do we put alerting around it? How do we, how do you manage that? How do we approach that? And that sort of brought in, I guess, if you consider sort of the lifespan of the app, we we started with a real, basic web app that, you know, was designed for one person realistically, and then also another person went, I want that as well. And went, Oh, now we have multi tenancy. How do we approach that? How do we, how do we go down that road? And so, you know, the great thing is, we have a really good, rich environment, I guess, in Django, of all these third party add ons, that it's very easy to get this sort of functionality without doing a lot of engineering. And then the alerting brought on that whole Well, now I need some form of task processor, because, you know, you can't just do that, I guess off a I'm sure there's a way you could do it, but it's probably not the efficient way or the right way to do it, right? You probably need some sort of background processor running to to do this, alerting or alarming, or have the hardware do it for you. And obviously the hardware could alert you, but at that point, we just didn't have the hardware that had that functionality.
Carlton Gibson 19:45
Okay, it can, all it can do is take a measurement and send it somewhere, yep.
Bryton Wishart 19:50
So we ended up looking at Django Q, and that was kind of the one that I went that's simple to deploy. It really just needed a. Redis service server to to act as its queuing mechanism. And I spent a lot of time with salary, but I just found its learning curve to be too great at that point in time, right? Django Q, sort of everything was built into Django admin, so you could just log in and go, let me create a scheduled task, and off it went.
Carlton Gibson 20:22
Yeah, no. I mean, that's exactly it. Celery is super powerful, but super hard to stand up even. And you know, if you just want a queue, it's not necessarily the first port of call.
Will Vincent 20:33
I think in our notes here, you're using Django tenants. And then did you add Django queue functionality there? Can you talk us through that? Yeah,
Bryton Wishart 20:40
so I found a really old there was a package for Django queue tenants, but it wasn't maintained at all. And so I ended up jumping in. And I guess look, having to do some comparisons between what did, what were they doing in this Django queue tenants, multi tenant framework package that Django Q was doing, and so I ended up having to spend a lot of time there to rewrite that to be supported just in time for, I think, Stan, to release Django queue too, because Django Q, as itself, was also, I guess, a stale package, and wasn't getting any sort of love or updates. So I then had to rewrite this, I guess, package to then support Django Q as well, and sort of go through those changes that Stan made as well.
Carlton Gibson 21:32
So this is, this is the great baptism of SPIRE, where you realize that your product, your your business, is built upon a package which needs a maintainer. And you therefore welcome to package maintainer. Yep,
Bryton Wishart 21:43
pretty much that old chanting the comic where it's just, here's this one package that supports the entire web. That's that's exactly what it felt like. I was like, Yep, okay, I've got to do something here to keep it functional and keep it up to
Will Vincent 21:57
date. So, multi tenancy, I wanted to ask just what caused you to think I need to adopt Django tenants? Because you could, arguably, maybe do it without that, right? You could just have multiple users and they have access. Like, how did you think about that process and decide to, you know, add a little more complexity, but clearly you felt it was worth it.
Bryton Wishart 22:17
Yeah, I sort of looked at, I guess, the three different ways you do multi tenancy, right? And, you know, the first way is you just have some sort of flag in every single model that relates that this this row belongs to this tenant. You could go down the road of having a database for every single customer, which, you know, is probably the most secure and secure way, but probably the least cost effective way. And ultimately it was the schema separation and just that in built into Django tenants that kind of went, this is probably the easiest way for me to do it without having to rebuild every single model with a with a tenant field, more or less. Yeah,
Will Vincent 22:56
I asked, partly because I'm aware of multi tenancy, but I haven't personally had the need to build out anything with Django tenants and so and but yet, it's one of the questions I'm asked a lot by by readers, is, you know, do you have support for multi tenancy? And so, trying to wrap my head around, what are they, what exactly are they asking there? Are they, they just read about it, or do they, you know, you give a nice summation there of it,
Bryton Wishart 23:19
yeah. And I think the other selling point for me was I wanted it to be a, I guess, domain separation for customers, so every customer has their own, you know, business name at Curie compliant, dot cured compliance.com, so they it creates a bit of ownership, opposed to maybe using something like a header approach, where They just log into a single website and it's, you know, the header handles sort of the tenancy aspect on the back end. So I think that creates a bit of a customer ownership piece, but it also opens up the ability, in the future, to do their own sort of CNAME branding as well, right? So if they have their own domain, they could create their own keyword, dot their domain.com type approach as well, and we can support that from a DNS point of view. And
Carlton Gibson 24:05
you said, you know, Django has got this nice ecosystem of third party packages. It's really easy to pick one up and but each one you pick up, there's a learning curve to it, right? There's, there's like, Oh, I've got to allocate this week to learn Django tenants, or this week to learn the cues, or this week to learn? Yeah.
Bryton Wishart 24:23
So it's that probably comes just from my background of I started life as a teacher, so this whole motion of lifelong learning, and I've come to be really addicted to that horrible learning curve where it's like, Hey, I start to understand stuff, and then you go, Oh, actually, no, start to start to build mastery after that, right? So I tend to love that, that drop, where you real, that realization, you go, Oh no, I have no idea what I'm doing here, but you start to, you start to build and develop those
Carlton Gibson 24:50
skills. Yeah, you thought that was the deep bit. No, no good just while we're on this last bit. So are you now helping to maintain Jack, go to or use in that sort of a. On the ecosystem there, just keeping your eye on it.
Bryton Wishart 25:02
Look definitely around, helping where possible. I think Stan's helped me out with a couple of sort of things I've had wrong on my end when I did the switch. But I am sort of, I guess, maintaining the Django queue to tenants piece. At the moment. I haven't packaged it up, but there is, I think, a link on stands GitHub to it for anyone who does want to use it, so you can just fork my my version, and be up and running more or less. So, yeah, I am a little bit involved there. One day, I hope to be involved a lot more, but I'm still still the learner in that sense.
Carlton Gibson 25:39
That's cool. Take it. Take it slowly, because you can't ever offload these things once you take them off, right?
Will Vincent 25:48
Well, I want to ask about deploying, because I know you're in the Windows ecosystem. But is there anything else around, just the Django bit itself that you know we you want to highlight, or we should have asked you about,
Bryton Wishart 26:00
I think that's we can go and talk about deployment, and I'm sure we'll come back at some point. Okay,
Will Vincent 26:06
so no, why Microsoft? Why Windows ecosystem, right? You were telling us a little bit about this offline, but most of the mindshare is probably around, maybe not windows for a startup situation, yeah,
Bryton Wishart 26:20
yeah. As a as an organization, we, we applied for these founders hub from Microsoft, and that sort of just gave us a whole lot of Azure credits. And having just, I guess, my technical background as an IT pro being really deep in the Azure world and the Microsoft world, for me, it was kind of the simplest learning curve. You go, Cool, let's, let's get deployment going. You know, I can. I had done sort of previous work where I'd help customers deploy, you know, Azure web apps with databases in that sort of pass environment world. So for me, it was kind of, you know, that DevOps piece was actually the easiest part of the whole, the whole process. It was the learning to be a developer, was the hard part, not
Carlton Gibson 27:02
the odds, the dev, but use what you know, right? That's because people, like, watch at a point it's like, Well, do you know anything? I know this? Well, use that, like, absolutely every time.
Bryton Wishart 27:11
Yeah, totally. And, you know, I think AWS and Azure, you know, they've done some really good stuff with, like, startups where you can apply and, you know, you pretty much get a lot of value of money. I think my hosting has been covered for about four years or three years so far. Okay, huge as a business. It's a huge, you know, leg off, right? Yeah,
Carlton Gibson 27:35
free, free development, but all free, you know, free that bit. So
Will Vincent 27:39
I think you have some notes here about where you want to go, right? There's something about micro Python and ambient temperature, like, talk to us about what's on your wish list of, yeah, where you want the product to go.
Bryton Wishart 27:51
I guess once we transition to sort of version two of hardware, and version two was based on an MQ, TT gateway. So we still, we've transitioned away from that, that post that post request type process. I've still got a few customers on that older hardware, but we transitioned to, I guess, to a more robust messaging protocol, and that was really around. We found some hardware that we could build up functionality and capability in the portal to actually program the hardware so allows a customer to go into the portal, go, hey, I want to, you know, change something on this sensor, and that's going to push down through the MQTT gateway and program that sensor to that point. Now, we've still kept that sort of Bluetooth approach in terms of sensor tech, but that MQTT sort of approach has just opened up a whole lot of functionality, and that's then started to get me thinking about, well, we have, we've been trying to solve this one problem, and that is when a butcher does a cooking. So let's say they're cooking ham or bacon. At the moment, they use a data logger. That data logger goes in the meat, measures that that's normally a USB type device. They then have to plug that into a computer, download the Excel spreadsheet. And we wanted to create, I guess, an experience where butcher could just put in our hardware, go into the go into the cooking log, and just hit the Start Recording button, and straight away you have that, that cooking log being put straight against the actual log with, you know, pretty graphs showing cooking temperatures, all that sort of stuff, as, you know, as it flows,
Carlton Gibson 29:25
yeah, anytime you got rid of an Excel spreadsheet, that's a win, right? It's
Bryton Wishart 29:28
totally, totally and so that sort of, we tried to find, I guess, hardware that suited that requirement, and we couldn't find anything. So I again, did the old Google around? Hey, what could I use? You know, what, what could I use in Python to help me build, sort of, I guess, that next layer down of hardware and micro Python was kind of this great package, I guess framework, again, that has quite a lot of functionality that I could actually start working with. And I think I ordered. A couple of ESP, 30 twos, and plugged them in, and just started plugging away to sort of build, build this stuff. And, you know, I ordered in some decent thermometers that, you know, I RTD units that sort of had the requirements. And, you know, again, pulled out my old physics textbook on electrical engineering and started going rereading, you know, things like Ohms law and garage, that's right, all this sort of stuff. And, you know, just started sort of working on some circuitry stuff, and, you know, reading different parts. And so we ended up to the point where we've got a prototype unit that works there. But just the capital expense right now, to take it to the next level is sort of, you know, 15, 20k which as a, again, you know, a small start up. It's, you've got to look and go, do I spend that sort of investment on such a single piece of hardware? Or is there money better spent on other aspects right now to, you know, help growth and whatnot,
Carlton Gibson 30:51
sure, but that's pretty cool. But I can imagine it's also a bit of a rabbit hole that you can be like, Oh, I could be fixing this UI bug that every or I could be playing with my microcontrollers. That's a bit of a risk. Yeah,
Bryton Wishart 31:02
totally. And it's that whole, you know, how thin do you spread yourself across something, right? And, yeah, that's, that's, there's a reason it kind of got to a point, and it's like, Yep, there's a prototype. I could give that to somebody else to manufacture, and they could, you know, improve it,
Carlton Gibson 31:16
yeah, I mean, I guess you contract that, once you get to a certain point, you contract that out to companies in China, right? Who put it together and all the rest, yeah, even,
Bryton Wishart 31:24
even a local company just, I guess, finalized design pieces and do the certification. Because, again, depending on what hardware you put on it, you've got to go through, you know, Wireless Certifications, battery certifications, you know, once you've done all that, then you go, you know, go to a manufacturer in China. Go, I want 1000 units of these and give me your best price, pretty much. But it's kind of that you've got to do that certification step first, right? Okay, so could you contribute,
Will Vincent 31:50
patent it and then sell, sell to one of the larger chains that would have use of it and they can handle it.
Bryton Wishart 31:58
Oh, look, I could patent it. I don't think it's patentable to a degree, because it is just a thermometer. And the purely, the reason we're rebuilding it is we just weren't happy with the accuracy from a compliance point of view. And that's because this kind of a range we've got to work, which is negative 30 to about 120 degrees, and we need to be within point five degree accuracy in that range. Most otherwise won't be accepted by the regulator. Most thermometers that they that they're using at the moment, actually don't meet those standards. But we don't want to be that that company building something that doesn't meet that standard, especially when you know the strong point of our company is we are backed by the regulators to a degree where they've got to a degree where they've gone, yep. We're happy for this to be used, and we trust them to deliver XYZ for
Carlton Gibson 32:46
us. Yeah, and that badge on the website that's got to mean everything, right? Yep,
Will Vincent 32:50
you have paying customers now, right? It's, it's moved beyond your, just your your business partner,
Bryton Wishart 32:55
yeah, that's correct. We've, I think my last count was about 50 butchers across Australia paying a monthly subscription. So yeah, this is we sort of pick up two or three. Yeah, about two or three every fortnight, so one a week on a growth and it's just that's a nice, nice, slow and consistent, which is what I like. So a couple
Will Vincent 33:16
questions around that. The first is, so what are you using to for subscriptions. How are you managing that? Yeah,
Bryton Wishart 33:22
so stripe. Stripe is really, really good at that stuff. Okay, and again, you know, there's a wonderful package for stripe that makes it very, very easy to pro, you know, manage the DJs. DJ stripe, not DJ stripe. I think it's just a straight Python package, just
Will Vincent 33:40
the stripe package. Oh, yes, yeah, their own, their own Python package. Yeah. So,
Bryton Wishart 33:44
yeah, just built out the subscription sort of service to do that. And the one challenge we actually had there was the way the web hook works from stripe, and the way, I guess, because every request we have comes from a customer's tenant that comes from its own C named URL, the stripe. The stripe endpoint. You know, I'd have to have a web hook for every single endpoint, so I actually wrote a very tiny Azure Function app in Python that just sits there as a middleware, more or less, and collects their web endpoints and then, based upon the metadata in the endpoint, then redirects it to the correct tenant for ingestion to update the subscription. The middleware is for everything. It's a, again, you just find ways to solve problems, right?
Will Vincent 34:31
That's interesting. I'm working on a sort of E commerce course, and subscriptions is a big thing that sort of can be simple to simple to do in prototype, but then often has a little bit more complexity than people think. And also then you have to dive into user accounts. And how do you, you know, manage it? Do you have a flag? Do you how much are you tracking churn? So it can quickly become a rabbit hole. In practice, I am a. Uh, discovering, but sounds like it wasn't much of an issue for you. You just Python package from stripe, and, yeah, write a couple middleware, and you're good. Yeah,
Bryton Wishart 35:09
it got a functional right? And again, it's, I could definitely improve it, but if it's working right now, and it's not a security risk, I'm kind of looking at the technical debt going do I need to pay it right now,
Carlton Gibson 35:22
right? So there's the question, right? You've got a business, you're up and running, you're three years in, okay, so this is a good place to be, because now you put now you've got this sort of, okay, how do I spend my time? Am I building new features? Am I paying down some of that technical debt, cleaning up some of those gnarly bits that have been there since week two? And how do you, how do you balance that, that kind of consideration need?
Bryton Wishart 35:43
I think the balance is you just got to be paying back technical debt on a weekly basis, not much, but if you pay back a little bit every single week, you never get into that really, really bad situation where it's like, oh, I can't upgrade because of something. And I guess I've been in, I've been in a couple of companies where they never paid technical debt, and I've kind of seen that hell. And it's like, okay, you know, it's only going to be a couple hours every week, but that's enough to sort of keep you there. So, you know, you can do those really simple upgrades between a different version of Django package updates and not have everything fall over. Okay, yeah,
Carlton Gibson 36:20
no, I agree with that. I would try and put aside a Friday morning. It's Okay a couple of hours on a Friday morning to just clean
Will Vincent 36:27
the floor. I guess the fact that it's just you, like you are working on the new features, and you're feeling the technical debt like, from my experience, one of the problems with technical debt is the people deciding on what to do next are a layer up or up, and so they're not feeling that pain. So to them, it's an abstract thing. But when you're on the ground floor, fighting with it, it builds, it builds up and takes an emotional and time toll on you.
Bryton Wishart 36:52
Yeah, it's, it's definitely much easier, I guess, being on the tools to make those decisions than, again, like I, like said in some other companies I've been in where, yeah, it is that layer removed, unless you've got a really, really good technical person put in here, the really good documentation going. This is why, you know, they're always going to go to, what is the normally, what is the most cost optimized approach to something which isn't always the right decision,
Carlton Gibson 37:18
or also, though it can often be that, like the marketing side, or the business side of sold something, or that wanting to sell something, and the push is to get that done. It's like, no, no, all this other stuff you technical people are talking about doesn't matter. Get this done. And it's like, but hang on, you realize you're, you're killing us slowly, right, with this constant right? Definitely,
Bryton Wishart 37:36
death by death by 1000 cuts. So,
Will Vincent 37:40
I mean, it's amazing hearing all the things you've you've built, and honestly, your attitude about all this of like, oh, just do this and that. Like, it doesn't, it doesn't seem like you've hit major stumbling blocks with Django specifically. Is that fair to say so far, definitely
Bryton Wishart 37:53
it's, it's been a wonderful framework to work with, you know, compared to some of the other people I've spoken to who, I guess, are using more of those Java or no type, type frameworks. Yeah, it's nice that it works. That's that's a really nice benefit, right?
Carlton Gibson 38:13
It's nice that it works. We should get some T shirts with that. Yeah, we're
Will Vincent 38:17
at that point of the show. So, magic wand. What? You know, what would you like Django to add? Right? Because this is obviously Carlton. I came from DjangoCon a couple weeks ago, and this is always the discussion internally, like, are there some things that are top of mind? You know, if Django only had it would make things easier for you?
Bryton Wishart 38:35
Yeah, I guess this maybe comes from my security, more security background, but I think inbuilt multi factor is kind of just a crucial thing that it needs to be in an app these days like I can't. If you look at all the security frameworks, you know that the default requirement now is that any web, Internet facing application you're using has or supports multi factor. And I think that's something that probably needs to just be an inbuilt battery now, opposed to potentially a package.
Will Vincent 39:06
And what are you using that now with your clients? If yes, what are you using? Yeah,
Bryton Wishart 39:10
I think I'm using one that's maintained by jazz band, and my mind's gone totally blank on its name. Yeah,
Will Vincent 39:19
it's two factor auth. Two
Bryton Wishart 39:19
factor roles, yeah, okay, that's the one.
Will Vincent 39:22
And are you using Django all off at all, or just regular Django with with this?
Bryton Wishart 39:27
Just regular Django with this?
Will Vincent 39:29
Well, I think you, I think you listen to this show like Carlton, I have been banging on about this, and they're actually Carlton. I need to separate from this talk about there's some work that's being done around authentication, both the documents and, I think the code, so maybe not as big as this, like right now, but I think most people would agree, like, Yeah, we should. We should have this or something like this in core,
Carlton Gibson 39:53
yeah, no two factors like one time password, at least, like something though, it doesn't have to be, you know. Know, every possible option, but, you know, an out the box look to FA that would be lovely. I guess with butchers, you don't have people saying they want single sign on to their, you know, to their global provider, or anything, but they Yeah. How do you guide? Can I ask butchers that, like traditionally not thought of as, like, the most technically sort of connected people. So how do you educate them about using two factor auth and things like that? You got point them towards a password manager. Or,
Bryton Wishart 40:29
look, I think in the industry, we've probably been really lucky, and it's it's been led by banks. If you consider every bank this day forces two factor on pretty much all their consumers, most people get get two factor these days. You know, if you went back before covid And maybe a few more years, then I definitely know my IT Pro days, there was always a massive change project to get multi factor or something rolled out. But I think banks have done an amazing job of just forcing it on everybody, and everybody's kind of accepted it as a security improvement. So the discussion doesn't get too hard to have about about two factor for butchers, because they're kind of used to that already
Carlton Gibson 41:12
from their base. Okay, okay, that helps. I think that Australia may be a little bit ahead of other places in in that what's on your roadmap? Then Brighton, what's what's what, you know, the next 12 months, 18 months, if you could knock off a few, you know, headline features, what would you what you excited to build?
Bryton Wishart 41:27
Yeah, there's, there's one feature that I've sort of been working on, and that is, we want to do some machine learning. And this is not so much because the AI boom, but more around. There's just a really no noble problem I want to solve, and that is at a regulation level, a butcher is meant to be monitoring the meat temperature. So that actually means the actual temperature of the meat, not just the refrigeration ambient temperature. And so what I want to work on is, can we have a probe unit sit in the meat for a day, have the ambient temperature and the pro temperature running side by side, and then, based upon that development algorithm that's unique for that fridge going cool, if your fridge is saying this degrees, then your meat temperature is going to be this degrees. And depending on how long the meat sits in that fridge for or display cabinet, it will slowly warm up over a period of time. So being able to then predict this is what the meat temperature should be, to provide that, I guess, that next level of assurance,
Carlton Gibson 42:26
yeah, okay. And then you could probably measure actual measurements periodically to check that that was a still within bounds of
Bryton Wishart 42:33
correct, yep. And you know, you look from a pipeline, as soon as you have that fridge go outside of its ambient temperature parameters. You could then invalidate that machine learning model and go, because the fridge has changed this. This is no longer a valid thing, so you need to re measure,
Carlton Gibson 42:48
yeah, and you all, you've got to measure more frequently, or you've got, you know, because yeah, and all of that can be ticked off by the regulator again. And, yeah, okay, that sounds really interesting.
Bryton Wishart 42:57
Yeah. It's just a really cool, novel machine learning problem, right? It's not building some crypto or something. It's like, here's a practical use of machine learning.
Carlton Gibson 43:05
Well, it's regression, right? You're going to fit to a curve. Yeah, good.
Will Vincent 43:09
One thing I haven't heard you mention, which I only know of because my brother in law worked at a startup that was doing digitizing inventory for I think it was restaurant or restaurants or food suppliers. But their issue is they wanted to have a like an iPad app to replace, you know, paper. But people would go into the freezer and in the freezer, they would lose cell phone, or they'd lose reception, and they come back, so they had to do all these technical things around offline versus online. It sounds like that's not an issue for you at all, like people are just entering it in on a computer, so you don't have to deal with that situation.
Bryton Wishart 43:44
Yeah, it's not an issue as of as of yet, but we are, I guess, a reactive web app. So we do build down whether you're on a mobile phone, a tablet form factor, or a PC. So for us, a lot of these butchers, it's more just getting Wi Fi signal in the shop. And, you know, they might have their their little consumer router sitting in the office that's in a different location, but then all the work is happening quite a, you know, quite a way around, a way through multiple brick walls and cold room. Cold rooms are very, very good at blocking signals. And so we've sort of had to help. And that's kind of one of the things that gateways also do, is they act as an access point as well. So I knew gateways not only do they do the mgtt, but they're also an access point that can then relay internet's connections via either an Ethernet or via WiFi,
Carlton Gibson 44:37
right? But say, are you running Ethernet into the fridge? It's like this bit geeky, but that's what you're doing, right?
Bryton Wishart 44:44
Yeah. So certain places we are, yeah, running Ethernet in and you plug into the gateway, and off it goes. If not, you put the gateways next to each other, close enough through the walls that they can talk wirelessly, and they just act as a wireless bridge, and off they go. Okay,
Carlton Gibson 44:58
super. I'm really excited. Your Business sounds brilliant.
Will Vincent 45:03
Well, I have to admit, I'm I'm pretty blown away, just all that you, you know, mainly, you have done in this big, big problem. I guess I can't help but think of the business case. Like, how many, like, how big could this get, right? Like, how many local butchers are there, you know what? So that's the first part, and the second part is, at what point do you say I need help? And what does that help look like? Is it purely technical? Is it other areas, right? Yeah.
Bryton Wishart 45:30
So the market for Australia, there's about 3000 butchers, retail butchers. Then there's a whole lot of processes, and about 500 abattoirs as well from a small abattoir point of view. So we've sort of looked at going, if we can own the butcher market, it provides us a really nice stepping stone to start talking to processes, and then you step again into that small abattoir space. And we've sort of got a lot of support from the industry to do that from a traction point of view, which has been wonderful, you know, I guess for us, at some point, we are looking, we are working with the industry body to actually see if they want to fund, from a fund this sort of development work, at which point, you know, it'd be nice to have more technical people helping build this be able to Move a little bit faster, but it is, you know, as a bootstrapped business, you can only move, I guess, as fast as your your cash in the bank, right, the capital, and most of the time that is, how do we, how do we count the cents and not spend money where we don't need to spend
Will Vincent 46:36
it? Yeah? Well, as Carlton said, I think, you know, you sacrifice some growth, but it gives you the time to really work on what's important, and then if the growth comes later, you're all the more set up for it anyways. Yeah, definitely.
Carlton Gibson 46:50
I mean, the the alternative, though, is taking on, you know, whole team, and then you're doing that with borrowed money, or with, you know, investor money, which then gives a time limit, which then gets fresh,
Bryton Wishart 47:00
yeah, you end up with, you know, that whole really heavy pressure of, hey, we want you to get this market valuation, because that's how we get our money back. And it's we've really wanted to avoid that, because as a business where more we really focus on we want to be a purposeful business that actually helps the industry. And we think taking that investment money just wouldn't allow us to be that, to be that mission based business, because ultimately, we're about, how do we create safer food, you know, fundamentally and, yeah, how do we help the industry? And that's only going to work if we've got a business that is there to actually help the industry and not not about, how do we pay back shareholders as quick as possible. Yeah, no, it's been, it's been great just chatting about it. And I think it was a really fun exercise to actually sit there and start the dot out all the, all the things I've actually done. Because I think sometimes when you're in the business, you don't get time to reflect and go, Wow, what have we? We've actually done quite a lot of stuff.
Will Vincent 47:58
Yeah, well, and when you emailed us, you know, you shared, you have this demo app, which is a great way to to actually play around with it and see it. And I imagine you can share a version of that with prospective customers too, where they can see, oh, this is really what it might look like like. That's a very powerful demo to have, like a, you know, real life demo version,
Bryton Wishart 48:20
yeah, look, definitely in that demo experience, because, again, we're taking a lot of, you know, the industry is very paper based, so, yeah, they want to touch and feel it before they commit. So that demo just lets them actually see, oh, it's not scary. It is actually easy. It's, you know, the user interface isn't overwhelming me from a user point of view. It is, I think I could make this change, and then it's kind of that support piece to get them there.
Carlton Gibson 48:43
Just, again, guessing, just one question that comes to mind is about the simplicity aspect, and just, are you constantly focusing on that right? Keeping it? Yeah.
Bryton Wishart 48:53
So again, James, who is my contractor, who works with me, he is an amazing your UI, UX type person, and that's kind of his passion. So I really trust him to look at, you know, what I build, and go, can we simplify this? Can we make it a more cleaner experience? You know, is a button three pixels too far to the left, or something ridiculous like that, and he'll spot those type of things and be like, Yep, let's adjust it. Let's do all that, you know, even down to like, icons, consistency of icons, and all that sort of stuff throughout the app. So, you know, when somebody looks at a button, they go, Oh, that icon means this. Like, I don't think about that, but that's kind of what he does. And, yeah, you sometimes you just need that person who's got a different view on stuff to go, hey, I can build a lot of stuff, but you know, it's not going to be pretty. I need you to take it to that next level. Yeah,
Carlton Gibson 49:43
and it's good to know your limits, right? It's good to know what you're good at and what you're not.
Will Vincent 49:46
This has been great. I mean, I really appreciate you reaching out. We don't, to be honest. We don't usually say yes when people call the email us, but we love when people do and we can have these discussions about, again, real world projects being used with Django and. And I think it definitely informs my perspective. And, you know, listeners who are involved with Django development to try to be aware of this. And, you know, listen to what you're saying, especially around two factor auth, you know, these, these things that we can do to be a little less insular. So I really appreciate you taking the time to come on and share the story.
Bryton Wishart 50:18
Yeah, thank you for having me. It's been wonderful.
Carlton Gibson 50:21
No thanks for coming. It's been really interesting. Talk to you both.
Will Vincent 50:24
So we are at Djangochat.com and we'll see everyone next time bye bye,
Carlton Gibson 50:27
Bye bye.