Ask HN: What tech stack to choose in my first stint as a freelance developer?
I just got my first project as a freelance developer, and I am unable to choose a tech stack. Some background - I've worked with Enterprise Java and C# for a few years now, so I am fairly comfortable with these two languages. But I have never worked with any of the hottest technologies including languages and frameworks like Python/Django, Node, or RoR. I also will need a deployment solution, and I am unable to choose between IaaS like AWS/Azure/GCP or just to go with PaaS like Heroku, since I have never worked with any of them.
Should I explore new frameworks in something I know (Spring/Play/DropWizard with Java) or choose to go with something that I haven't worked with in order to learn new tech as I am developing?
20 comments
[ 6.9 ms ] story [ 52.3 ms ] threadPaaS is much simpler for you as a developer, assuming your desired stack is supported. Caveat is it will likely cost your client more. Although, it may not if you account for billable hours saved by not having to deal with IaaS. Depends on the project's scale and resource usage. With a small scale project, PaaS may be a wash or even cost less.
Obviously it's good to expand your horizons learning new technologies. Doing so while under deadlines on someone else's dime, perhaps not as much. It's at least something to consider if there's very lax deadlines. How to bill it ethically is up to you and likely depends on a ton of factors.
Using modern frameworks in languages you already know does seem to be a good compromise. Your learning curve there should be drastically lower than learning an entirely new stack from scratch. This is probably the safest route, and if you choose it I'd suggest learning new stacks on your own time regardless.
It builds the core of project using spring boot and also generates docker and kubernetes files. Entities are easy to create and the 'business glue' is auto generated.
It even integrates Kafka which allows us to plug-in machine learning framework via Apache spark
Overall very happy with the framework
Your concerns should be the following:
1 - will this stack get the job done, and at a reasonable velocity
2 - will you lose time because you need to ramp up on a technology you're not familiar with
3 - how maintainable will this be for developers who come after you?
Spend time figuring out what you'll need to accomplish for this project, and then decide which framework will work best for it.
If you're still not sure what to go with, it can be really worthwhile to do a quick proof of concept that covers the areas you feel most uncertain about. I did this before choosing Elixir for a recent project, and it helped me feel a lot more confident in that choice.
Outside of your freelancing, I'd encourage you to spend time using new tools are frameworks. That way, you'll know the strengths and weaknesses of each before you need to pick one for a project.
[1] https://news.ycombinator.com/item?id=12788804
So, your goal should be: "How I can develop (and maintain) this product in the most efficient way?".
Step 1 : Get stable grounds
Pick a language that can solve most of common challenges that you will tackle. Make yourself proficient in it. You need to minimize time spent on thinking "how I can do it in X language?". (You've got Java/C# skillset so most of your web skills should be around here).
Step 2 : Optimize
You've got another web project? That's great! You just need to pick up template with all boilerplate (like: logging, monitoring, deployment, auth etc.) from last project and fill missing features.
Step 3: Extend
Now, you can finish most of your projects in seconds. It's time to find new clients. Search for new domain - like: mobile, embedded or machine learning. This time you can decide if your existing toolset is enough for new problems or rather, adding new one will be more beneficial to you. Like: You can do a lot of ML stuff in C# but Python is the place where all important stuff happens.
PS:
IaaS vs PaaS
Here is question for you:
Do you like to do more admin stuff for low cost hosting?
Or do you like to focus on coding and spent a bit more money and let cloud do most of admin work for you?
It's a your time vs money optimization.
Personally, for small (scale) project I'am running with IaaS - but I already have knowledge how to do it. For big ones - it's better to stick with PaaS - even very skilled DevOps can't single-handedly deal with big scale.
For you I would advise using PaaS since you don't have experience with neither PaaS nor IaaS. PaaS is a lot easier to learn and you can always migrate your code to IaaS as a Step 2 :)
Good luck and have fun.
It also depends on your clients, they will most likely be making the call based on the tech they already are using in their current stack and their tech employees. So when they bring in a consultant they will want to keep in line with their in-house tech stack not to complicate future maintenance and hiring.
I'd also go with Spring because they have a huge market share and many projects require Spring knowledge.
By knowing Spring you are expanding the circle for possible clients.
Play/Dropwizard are nice frameworks but they don't bring you any value as a freelancer because nobody will require knowledge/experience in those frameworks.
If you're taking over another project, make sure the client has docs before you take it on. Otherwise, there's a good chance that you won't be able to deliver what they want. Best to avoid those customers initially (if you can).
- If the project is for a new client that I have no connection beforehand, I only work on a problem domain that I'm familiar with, and I use a stack that I'm confident in.
- If the project is in a domain that I've no experience, but I know the client, I go with the tech stack than I know I can get the job done.
- If the project is for a client I know, and I have experience with the problem domain, I let myself to choose a new stack to learn if there is one that's suitable for the project.
I'm having great success with this strategy. Obviously these are just general guidelines, and the specifics of the projects can affect my decision, and common sense always applies.
If you're highly skilled in Java and C# you're not going to find it challenging to pick up Python or Rails. Heroku is a great choice for a freelancer as well as it's so low maintenance by a large margin in my opinion compared to something like AWS. You certainly want to avoid things as low level as VPSs as well. Personally I think you should take a couple of days to experiment with Heroku so you can see there isn't really that much to it.