
Ask HN: What tech stack to choose in my first stint as a freelance developer? - romanovtexas
I just got my first project as a freelance developer, and I am unable to choose a tech stack. Some background - I&#x27;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&#x2F;Django, Node, or RoR. I also will need a deployment solution, and I am unable to choose between IaaS like AWS&#x2F;Azure&#x2F;GCP or just to go with PaaS like Heroku, since I have never worked with any of them.<p>Should I explore new frameworks in something I know (Spring&#x2F;Play&#x2F;DropWizard with Java) or choose to go with something that I haven&#x27;t worked with in order to learn new tech as I am developing?
======
jmcgough
Go with what you know can get the job done. It's fun to use new tech, but Java
isn't going anywhere and it's very stable and performant at this point.

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.

~~~
jamesmp98
This

------
hakanderyal
When I'm looking for a new project, I analyse these 3 aspects: Client, Domain,
Tech Stack. My experience taught me that, I can only handle one unknown aspect
among these in a project, more becomes a problem sooner or later.

\- 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.

------
rl3
Most of this depends on your project's requirements.

PaaS 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.

------
Nysa
I'am assuming you are 'just' developing solutions. Your customers are only
interested in a product - not tech side.

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.

------
aregsarkissian
As a longtime and current asp.net developer I use the Laravel php framework
for client work and side projects. Modern php is very easy for a java or c#
dev to pick up. Development speed and ease of deployment is what matters and
Laravel is a mature batteries included rapid application development framework
with a large community and ecosystem and even it's own hosting platform
Laravel forge.

~~~
jamesmp98
Yeah, I'm surprised how far modern PHP has come, but I fear that the Laravel
is but life support for PHP.

~~~
tomascot
There's Symfony and some other good frameworks around. PHP 7 was a god send.

~~~
jamesmp98
People are still using Symfony? I've been told that it's mostly behind the
scenes.

~~~
tomascot
People use what works for them. Besides it's a great framework and it's
stable, great for boring businesses.

------
seanwilson
Use the stack that makes the project as easy, robust and low maintenance as
possible taking into account risks involved in anything new you have to learn
along the way. Sticking to only what you know can make life harder for
yourself as well and means you're not expanding your skills.

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.

------
dabockster
Depends. If it's a new project, choose the oldest thing that's still widely
supported. Often times, this will be something like straight Java or PHP. It's
not trendy at all, but it will run under 99% of system configs out there.
Also, be sure to document your work as much as possible and give that
documentation to whomever you're turning your work over to.

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).

------
zengid
If this is your first stint, you've got a lot riding on this reputation-wise.
You need to hit every deadline you set, and it needs to work the first time.
It would be best to use the most familiar (and yes, boring) stack you can
possibly use [1]. The client does not care at all what is under the hood: they
care about whether the product does what they want it to do.

[1]
[https://news.ycombinator.com/item?id=12788804](https://news.ycombinator.com/item?id=12788804)

------
richardknop
Learning new tech is good of course but I wouldn't overdo it. It is also
important to have some specialization and skills that you focus on.

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.

------
AlexAMEEE
In my opinion you should know Spring MVC ( or boot ) as a Java freelancer.

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.

------
ganeshkrishnan
I would highly recommend jhipster. We used that build our highly scalable
website aihello.com

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

~~~
mollusk
Agreed. Considering Java background, Spring Boot with a little bit of help
from JHipster is the most sensible choice.

------
fiftyacorn
Id check the rates offered and choose the one that pays the most

------
probinso
Happiness on F sharp

