I would like to discuss one use case and special setup I was thinking about and if that is possible with balena at the moment or not.
The general idea of me is to build a SaaS platform which allows the user to connect as many devices to his account much like with balena but with services, APIs and feature for a special use case which is not important for the overall request though.
So, the plan is to let anyone sign up at my website, download an image which he can write on a SD card or any medium he wants which he can use to power a RPi or anything else that is supported by balena.
They can technically add as many devices but at some specific limit maybe 5 devices I would want to let the user pay for the actual service per device.
The overall use case would be B2C and not B2B so there might be many users with just a few devices.
Now comes the first question, what would be the best flow and how is that doable with balena:
Approach:
The user signs up, downloads an image, burns that to some storage and boots the device up.
The device has no relation to the customer so there must be either some login screen hosted by the device where the user needs to login to get that relation or somehow differently.
This could have the drawback that the setup for the user for multiple devices could be very time taking.
Approach:
The user actively creates a new device on my platform, a special image preloaded with the device data is created only for that device, the user downloads, burns and boots up the device with it.
The relation is automatically there.
This would be technically possible if I use an undocumented API endpoint for which I create an issue on Github: API Register Device Endpoint · Issue #1517 · balena-io/docs · GitHub
This could include much overhead as I need to store those images for every single device and because of the size of those images need to clean them after some time.
Technically this would also have the advantage that I can direclty show a payment for on reaching the limit.
Approach:
I create a separate application per customer where his devices live and via that I have direct relation and no image generation nor login screen is required.
The problem here is that I need to manage many git remotes where I need to push all changes although I only need technically on application on balena.
I would like to get some feedback for both approaches and which you think would be the best.
The second and most important question now is, how can I do this for so many user with the assumption that the service would be interesting for users that I do not end up paying for 1 million devices at balena but I only have very few paying customers.
Customers could signup to a huge count using the free account on my platform with just 4 devices maybe for which I pay certain amount on balena but dont generate any money on my side.
The use case is C2C and could be maybe used not only by technical people but also normal casual users if they are interested.
Of course there are things like only providing trial times to users or calculating this into the business plan but actually this can become very expensive.
I would look forward to any feedback also by the balena team how to approach that.
I’ve pinged our customer success team to see if they have some feedback regarding your plans, as I expect they will have some follow-up questions as well!
Hey @Sebi55 I’m very interested in learning more about your ideas here! I spend my time working on our high level product vision & roadmap and am excited to say that a lot of what you’re describing here overlaps with a lot of conversations we’ve been having internally and what we’re working towards.
My first question for you is: have you taken a look at balenaHub and the concept of ‘Fleets’ that it exposes? What we’re working on here aligns very strongly with your number 1 approach, and as such that feels like the best approach to me.
You’ll see that we already have the facility for you to create an application within balenaCloud and expose it on balenaHub, which allows anonymous, unauthenticated users do download an image which allows that device to join a fleet that you own.
The next part, as you’ve also identified, is that the user then needs some way via an interface on the device, to adopt or claim that device and create the relationship with their account should they wish to. Since they were able to download the image without an account, they have to sign up in order to create an account to connect the device with.
Our approach so far has been to require that all usage of this facility is open, free and non-commercial, and so if you run an open fleet for non-commercial purposes, there is no charge from the balena side of things. However, we of course do want to support commercial use cases, where we’re still trying to figure out how people like yourself would most like to use the platform to support these use cases.
Ultimately our aim is to be able to be fair and support both worlds - if you’re offering free stuff to people, we’ll offer the open fleet facility for free as well, but if you are offering paid services and making an income, then we’d expect to make an income for our role in making that happen as well. It’s hard to say for sure without knowing more about your application and how it might work, but happy to continue this discussion further!
Yes I saw balenaHub and it is really a great product but sadly this only works for non commercial projects. As my project would have the aim of generating revenue and therefore being commercial using it wont be possible right?
When do you plan to do something about offering Fleets to commercial projects?
With regards to the interface for claiming the device I dont see a problem as I have already tested it although it seems a bit tedious for the user if he has to do it for multiple devices.
The last point was the payment structure of Balena. I get the point that I need to pay for any commercial project a per device fee. It would be great though that if you at some time allow commercial products to use open fleets to maybe introduce some kind of way to balancing because if I have a open fleet and anyone can join for “free” for the initial device load I would end up paying also for many of those devices although they might not be claimed or associated with any direct customer account at my side. I think paying for each device in an open fleet for commercial products could end up being a bit tricky or expensive.
As my project would have the aim of generating revenue and therefore being commercial using it wont be possible right?
When do you plan to do something about offering Fleets to commercial projects?
Everything is possible! This is more a case of us working together to figure out the demands of commercial use cases; we’re happy to work closely with interested parties such as yourself to work out what the offering of open fleets for commercial reasons would look like. In the event you’re interested in doing that please send me a message and we can set up a call with our customer success team.
With regards to the interface for claiming the device I dont see a problem as I have already tested it although it seems a bit tedious for the user if he has to do it for multiple devices.
Agreed it’s a little tedious if the user has multiple devices set up before they start the claiming process, but I suppose if it’s a use case where we know the user is deploying multiple devices is have them sign up first, and then the images downloaded and hence devices created can be attributed to that user out of the box as they are on balenaCloud today.
I think in regards to your last point we’re also looking at options there - the per device fee is just one method, as an extension of what we do today, it wouldn’t necessarily be the same for all use cases going forward. This is something some of our other existing customers have started asking about as well so it’s definitely on our radar.
I think the main point I want to make here is that in this early stage, our customers and prospective users who have projects they want to run on the platform can help to shape what the final offering will look like.