I've been hired to develop a certain system for a start-up and I wanted to ask you guys about how much I should ask for the salary ($ per hour).
These are the big lines of the project:
Writing the code for arduino which:
controls several pumps and valves and heating elements.
Reading different sensor values for temperature and power consumption.
Switching between solar power when available and normal source of power.
Display information and control elements on a touch screen which can communicate with the arduino to change settings.
Connect to wifi to post data to a server.
Device provisioning
Keeping track of time of day to perform certain actions at specific times.
Database creation and management to store all needed data
Mqqt broker hosted on AWS
Interactive website creation with react.js which:
allows users to log in and view LIVE data from the specific devices connected to their account.
Change settings that affect how the program on arduino runs.
Weekly/monthly scheduling of different actions to be performed by arduino program, displayed on a calendar
Display charts and metrics of saved sensor data from database (1m intervals)
Development different server instances to handle communication between server-arduino server-website/app and can also run different microservices to make sure everything is working smoothly.
Translate website functionality into react native mobile app (android/ios)
Making sure the system scales to allow thousands of users/devices to use it.
I probably forgot some things but those are the big lines.
if you have already been hired, the remuneration and clear deliverables should have been discussed already...
price depends on
your skills and talent
customer & developer location
type of employment contract (here seems freelance) and local laws
competition
expectations for the deliverables (are you paid by the day working under order of the customer or for the full project against a clear specification with formal receivables being clearly defined)
further maintenance expected for free or at a cost
and
If not, make sure you consider the cost of all development resources too along with all the points @J-M-L mentioned.
Secondly, the project scope seems to be very wide. Make sure you work on the project documents such as Scope sheet, flow diagram, Prototype BOM, Mock UIs and fix that before you start writing code, otherwise they will keep adding new things to the mix and you will loose track of the process.
Yes I've already been hired but we had only discussed one part of the project which was the bare-bones arduino code simply controlling the peripherals (which was delivered)
We are now discussing the updated version as well as all the other points mentioned above.
I was paid a total of 1000 euros which I was ok with since we agreed on payment for the final result. But I now what to switch to a per hour payment system.
To answer the points you have mentioned:
Skillset: I'm not sure how I compare to others in arduino development but the previous dev before me couldn't deliver what was asked even with years of experience under his belt (I can share a github repo with you) but when it comes to web/app development I'm at an advanced level.
Customer is located in the UK.
Expectation: I've been given a list of functionality and that's it. So it would be an order for the full project.
My expectations: I don't know but for everything that has to be done, I thought that 1000 euros is a bit too low.
either it's a fixed rate for your time and they decide what you do with the hours you spent. You work for them, under their direction and if they change their mind 20 times or want to add stuff, that's their choice.
or it's a price for a project but in that case you need a detailed documentation of what needs to be delivered AND how it will be verified that you delivered. Anything not in the contractual documentation should be discussed in terms of budget and time impact and subject to mutual agreement.
code property should also be clear (esp. if you reuse some of your components or if you use libraries that have license terms like GPL v3)
When that happens, don't do it for free. I had this happen and I charged the same amount again (that's because of the extent of stuff that he wanted added, so that would be adjusted accordingly)
Per hour is good, but if you mess something up, don't charge the customer for the hours spent fixing something that isn't there fault (ie. you burn out there microcontroller because you shorted it out should not be paid for by the client!!)
Per hour is also good because sometimes a job ends up being more complex/difficult than originally thought (whether your mistake or the clients lack of conversational skills...) I had a really simple sounding job - someone wanted lights to flash at a certain colour and speed - and I quoted $100. But then it turns out that they had said they also wanted a custom remote control to control the lights, so I spent about 19 hours ironing all the kinks out of that, for $100!! $5 an hour?? That's why it would have been better to charge by the hour, but the bill would have been $500...
I did a similar job(AWS et al) for the company I work for. I didn't even consider bidding the whole job as I had no clue how long it would actually take, so I just did it for my normal pay rate which worked very well as it was mostly overtime hours at time and a half.
It also worked well because it took much longer than I would of expected and there were many changes/additions that I wouldn't have accounted for. I did not charge for time spent learning which was considerable as I had not used a cloud service such as AWS before. but in the end everyone was happy with the outcome. Whew!!!
Reddit's /r/freelance is a great place to discuss things like this.
First, try not to use the term "salary." You're a contract engineer, not an employee. Calling your payment a salary influences your thinking.
Next, the main determinant of what to charge is a combination of what you want to be paid, what the prevailing rate is for that kind of work in your area and maybe how interesting the work is/timeframe, etc.
In this part of the US, an agency would bill embedded programming skillsets (esp. for someone who can manage the entire project on their own) $150 - $200/hour on average and that's relatively low. I'm currently working with a freelancer who charges $250/hour for this kind of work. Higher on the coasts.
The system you described has 5 major components:
Arduino programming
Database configuration and management
AWS connectivity
Website creation for data presentation and device management
Hardware setup, if not hardware design
This is easily a $50,000 job if the business engaged an engineering services agency to do it. As a freelancer, maybe I'd quote $30,000.
Unless you're making it sound larger than it seems, this job is at least $10,000 of work on the low end.
Take some advice from the internet-famous patio11 here. This is probably some of the most important writing ever to hit the software development community.
I would insist on regular payments not a big pay day at the time. What is to say they will pull the project part way through and give you nothing.
Send them a weekly invoice for your time.
As to hourly rate then £60 is the very minimum you should charge. Think of the rate you are charged for work on your car.
With such a big job, on hourly there is a big risk that it's almost guaranteed to run into much more time, and therefore money, than the client expects. You need to specify and stick to a completion date.
Thank you all very much to everyone who has replied!
I guess the main takeaway would be to make sure that all the terms and specific requirements for the project are well-defined.
With that in mind I will talk to my client to set up a contract with all the tasks he requires from me and how he intends to verify their completion/standard.
I am thinking of asking for a set price for the project based on an hourly rate for how much time I think this project is going to take. And perhaps agree on whether or not he should pay me if the project takes longer than expected.
In that case, some wiggle room has to be in the contract. A lot of them have over-cost, over-run provisions set out at the beginning. That is insurance against a client dumping you whenever they decide it's been going on too long.
Hourly doesn't protect you completely, you might get some money but if the project goes sour it's not good for your business.
That's the theoretical benefit of Agile methods like scrum: Deliver working functionality at the end of each sprint and the client can stop the project at any of those checkpoints with a usable product even if it doesn't have all the nice to haves.
In practice however, I've only ever seen it implemented as "scrumfall".
Excuse the terseness, but this is stupid and will definitely make your life a nightmare!
Your contract should specify delivery phases, with critical review and customer acceptance at each stage. The contract should state a refinement of the number of next-stage hours at the acceptance of each previous phase; you present them with an "estimate" before the phase with a regurgitation of their requirements. Business then accepts the estimate which includes wording that the expected end date may be delayed due to outside-your-control circumstances: essentially things like parts, prototyping delivery, scope-creep changes by the customer, and other reasonable happenings like COVID lockdowns, illnesses, and so forth. They may be a start-up, but you are becoming a critical link in their delivery plan; you definitely do not want to be sued as the reason for the company going under.
Whatever you think you are worth per-hour, add 60%-70% to cover insurance, medical, transportation, liability insurance, required right-to-work licenses, dues, taxes, permits. You absolutely must think like a business, not an individual.
Getting everything right is difficult, you may wish to discuss with an attorney before agreeing to this mess... take a contract copy with you and be prepared to pay her/his professional fee: it is a cost of doing business.
One last thing, if you are expected to be "on site" make sure you get a private space with a door... no broom closet or corner of the break room.