Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: What tech stack to choose in my first stint as a freelance developer?
28 points by romanovtexas on Aug 25, 2017 | hide | past | favorite | 20 comments
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?




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.


This


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.


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.


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.


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.


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


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


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


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


Forgot to mention that you can watch free getting started with laravel videos at laracasts.com


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.


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


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


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.


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.


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


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


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


Happiness on F sharp




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: