Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

RoboRobok's avatar

Is it me, or is web development a pain in the butt?

Hi guys, I believe this topic can be a little controversial for some.

I'm a web developer for more than 10 years now. I do both frontend and backend. My relationship with this profession is a love-hate relationship. Whenever I'm about to work on medium to large project, I'm leaning towards the latter one.

In my opinion, we still lack a good set of tools for web development. Everything can be done, just like any kind of desktop application could be done in Assembler years ago. The problem is, web development of complex application is no fun. At all.

When I work on relatively small projects, I love Laravel. But as the scale (and number of beings) goes up, Laravel just makes it a little bit less terrible. Here's the list of the troublemakers:

  1. MVC

The separation on Models-Views-Controllers is not at all modular in web development world. Controllers are the worst. As classes, they are too limited in flexibility and when we consider binding them to routes, it becomes a nightmare. MVC makes simple things hard.

  1. PHP

I love PHP, especially PHP 7. But this language is not dynamic enough for many needs.

  1. OOP

Likewise, too limited and painful to work with. Something as common and simple as dependency injection, must be done through trickery. Same for testing. Repository pattern to make our model testable in some reasonable level. WTF? So much work to do such a simple thing.

  1. HTTP

The ancient protocol of request-response and URLs. We need to name every single "page". Before HTTP/2 becomes a main standard, we even need to be sad about the number of assets on our product.

  1. CSS

Too limited. Preprocessors help, but it's still struggling with tons of names. I would rather want to describe entire layout by CSS and not using separate elements for each "wrapper" etc. :before and :after help a little.

  1. Ajax

Ajax is a fancy name for the most basic operation that, if we want to make it good, we need to treat as something "extra" (to make our JS unobtrusive).

  1. Slow connections

We need to count every kb and every single request, because Internet connections are still unreliable.

  1. SQL

Not at all suitable for programmed products, in my humble opinion. Not too many good alternatives though, because discs are still too slow and SQL makes it "fast" (relatively) to search for data. But we should avoid selecting all columns etc. Yeah, that's so "great" for our flexibility. Especially if we use columns in our model's methods. If we didn't select them before, then oops!

This is what I have for now, but there are more painful aspects of web development. I didn't include "difficult" aspects, like the need of protection or very strict validation, because those will always be needed in shared data world. What I mentioned, are technology limitations that we are having have today. I think web development should not be done in general purpose languages.

I am very curious of your opinions! :)

0 likes
32 replies
jimmck's avatar

I think you need a new job. Seriously not a knock. I enjoy the challenges. The people that are waiting for the next draw me a working program app sound the same way. They hate to code. Nothing wrong with that.

martinbean's avatar

@RoboRobok Each to their own. Personally I enjoy the challenges developing web applications brings. The more challenging, the better. If I didn’t want a challenge in my job I’d flip burgers in McDonald’s.

I also disagree with a few of your assertions:

The separation on Models-Views-Controllers is not at all modular in web development world. Controllers are the worst. As classes, they are too limited in flexibility and when we consider binding them to routes, it becomes a nightmare. MVC makes simple things hard.

MVC is a prevalent pattern that inherently makes things modular. MVC doesn’t make “simple things hard”. What exactly are you struggling with?

But [PHP] is not dynamic enough for many needs.

PHP is as dynamic as a language can be.

Likewise, too limited and painful to work with. Something as common and simple as dependency injection, must be done through trickery.

I think you’re confusing the principle of dependency injection and Laravel’s service container injection. Dependency injection is just merely passing parameters to a class. Imagine a class that calculates a customer’s lifetime value in an e-commerce application. We can infer that this class needs a User object so can type-hint that in its constructor:

class LifetimeValueCalculator
{
    public function __construct(User $user)
    {
        $this->user = $user;
    }
}

That’s dependency injection at its simplest.

Same for testing. Repository pattern to make our model testable in some reasonable level. WTF? So much work to do such a simple thing.

No one is forcing you to use repositories. I advise against them more than I advocate them for that reason. They add complexity in 90% of cases, and no one really swaps out their ORM overnight despite what people may say.

I’m going to stop here as it’s almost 4am and I need some sleep. But it’s disappointing to hear you have so many gripes about web development. I guess you need to decide whether web development is just a job to you and you’re happy to put up with these annoyances to pay your bills, or whether you actually are looking for fulfilment in your vocation and to look at a career that does stimulate and interest you.

3 likes
RoboRobok's avatar

The problem with me is that I'm a perfectionist. I knew that I'm going to be slapped for this topic, because people tend to treat the things they use as they were the best possible thing. The problem is, in IT world it's not the case. We are still limited by slow technologies and it makes programming not as fun as it should be.

In my opinion, programming - as defining logic rules - should be as abstract as possible. I know most of programmers can't imagine working in performance-worry-free world, but it is what will happen.

PHP is as dynamic as a language can be.

This is not at all true. JavaScript, for example, is more dynamic by light years. How can you call a language, where you can do nothing about an existing object methods, or existing functions, dynamic? To make small tweaks on existing classes, you need to add your own class, extending the one you want as a base. That makes your project polluted with tons of files and fake/ugly extends. In PHP, not much can be done during runtime on those matters.

No one is forcing you to use repositories. I advise against them more than I advocate them for that reason. They add complexity in 90% of cases, and no one really swaps out their ORM overnight despite what people may say.

You don't swap ORM for testing? How do you write tests then?

I think you’re confusing the principle of dependency injection and Laravel’s service container injection. Dependency injection is just merely passing parameters to a class. Imagine a class that calculates a customer’s lifetime value in an e-commerce application.

Laravel actually tries to make it a little less terrible. You see, you say:

Dependency injection is just merely passing parameters to a class.

Your opinion is strongly based on what we have now, missing the idea that anything could be done other way. This is the problem with most programmers. Method arguments are method arguments, this is not the place for dependencies. Why should I mess the arguments that have their own purpose, with the list of other beings I want to use in my class? Those two have nothing to do with each other. There should be a language structure to declare dependencies.

All new JS and PHP frameworks are doing good job on making those unsuitable tools work better. I know most of you will defend PHP and other stuff I criticized, but I hope at least someone will agree that it's a trickery most of the time and not real programming.

You guys call it "a challenge". For me, a challenge is when I need to work on some difficult algorithm or make user experience great. But dealing with tools that are not good for our purpose, is not a challenge, it's just a hard thing to do. Just like if we were asked to clean entire house with a toothbrush. Is it doable? Yes. Is it fun? I bet it would be for some people. Is it the best we can do? Hell no.

1 like
bashy's avatar

So many things in life aren't as fun as they should be. Web development is getting better, there's some great and amazing technology coming out.

Not really sure what the point of this thread is but if you don't enjoy it as a whole, maybe you still need to learn or maybe it's not right for you. I have a full-time job as a php developer and each day is different and I wouldn't trade it for most jobs.

1 like
ohffs's avatar

Web development is way, way better than it used to be though. It's a relatively new field so we've still got a lot of churn of ideas and metaphors compared to, say, control systems or things like 'payroll' that have been on the go really since the 1950's. I've been at this since the early 80's so have been through quite a few unpleasant programming experiences from assembly programming on 8-bit CPU's, embedded PIC's, COBOL on IBM minicomputers, FORTH, Fortran, C, desktop apps in Delphi and (oh, the horror) early Visual Basic. Compared to all that working with PHP and javascript is a joy ;-) Well, maybe caveat the javascript a little there ;-)

Even my early web stuff was with Perl cgi scripts (now that I think of it - even some C and Bash cgi - ouch). I'd really not want to go back there :-) So laravel, PHP, Vue etc are all a pretty good place from my point of view :-) It's not perfect by any means and I hope one day a new language or tech comes along that sweeps it all away and we enter a golden age where we don't have to worry about filesystems, missing semi-colons, bandwidth etc - but I've been hoping that since about 1983 and it still hasn't happened ;-)

2 likes
Prullenbak's avatar

If you think it's all bad, and terrible, you could do a couple of things:

  • Make it better (seriously, put in some time to make a better framework, contribute to open source, languages, whatever you can and want to do). Maybe this will be the challenge you want. Get straight what you find "a challenge" and what you find "hard". If something is hard, it could be a challenge to make it easier for you, your team, or everyone.
  • Talk to your senior/boss/whatever to figure out if you can change your toolset or learn new stuff, to keep your job pleasant and exciting to you.
  • Quit your job and find another job. This could be as simple as becoming a front-end developer instead of an allround webdeveloper, or start learning Java or Swift and become a mobile developer. Or go do something entirely different.

Webdevelopment has gotten very different over the last 10-15 years. Sure, it got more complex, but it also matured and we have tools and frameworks that we didn't even dare to dream of 15 years ago. It gotten "harder" to get in to, but once you get the hang of it, it's lightyears better then before. Stop complaining and either do something about it, or quit. This negative thinking isn't good for you, man :)

MikeHopley's avatar

You don't swap ORM for testing? How do you write tests then?

Most of the time, just test the damn database and get on with your life. ;-)

In cases where your class isn't really "about the database", mock the offending method (if you want).

1 like
Prullenbak's avatar

You don't swap ORM for testing? How do you write tests then?

I don't want to get all offensive here, but these kinds of questions are a sign to me that @RoboRobok still has a lot to learn and that what he qualifies as "bad" means "I don't understand it and it's hard". You must understand the difference between a ORM and a database, before you start saying those things.

Seriously, qualifying OOP as "too limited and not dynamic" or some nonsense like that, just means you have no clue.

And that's OK. I also have no clue. Noone does But don't act like you're better then stuff you don't understand. It makes no sense.

michaeldyrynda's avatar

How do you test the ORM? Like this.

Don't touch the database when testing? FUD. Don't test Eloquent; it has its own tests. Test your application.

1 like
RoboRobok's avatar

It's popular defence approach to assume that someone doesn't understand the topic. It's quite sad. I never said I don't know how to do a task using the tools we have today. I said they are not suitable for the problems we are solving and that there is much trickery involved.

Seriously, qualifying OOP as "too limited and not dynamic" or some nonsense like that, just means you have no clue.

This is not a nonsense, but an opinion claimed not only by me. One of the people stating the same is Dijkstra.

You must understand the difference between a ORM and a database, before you start saying those things.

Believe me or not, but I understand the difference perfectly. Please tell me then how you mock your models with ORM of your choice, but it doesn't matter much to be honest. It's all trickery, not programming.

I will use the example of cleaning with a toothbrush once again. If for any reason people didn't know another method and one guy would say that the toothbrush is not good for cleaning the house, most of the people would be angry. "How can it be bad? We don't know anything better. You probably don't know how to use the toothbrush to clean the house efficiently. Last time I even made it clean in one hour, I'm a master of toothbrushes. I know tons of techniques how to brush!". The same goes here. What we do now with those languages, could be done much more efficiently and beautifully with more flexible tools, especially the languages. Like ohffs said, it's still so new. ES6 seriously improves JS and PHP7 improves PHP, but there is still so much to change in web development world.

Maybe instead of getting angry so easily, think about what you consider good. Something that makes it POSSIBLE to do something or something that makes is EFFICIENT?

ohffs's avatar

I think this is veering off the original topic a little ;-) Your choices are, as I see it, a combination of a) sigh and put up with it, b) come up with something that makes it better, c) change career path. I say this as someone who once wrote my own language and compiler (I was young and optimistic, what can I say) as I was so hacked off with the way the current eco-system was - served me well for a couple of years until the underlying platform went bust and I gave up on computers for a few years, but that's another story... ;-)

1 like
RoboRobok's avatar

To be honest, I was thinking of creating my own language as well, but it would be a language for web development, or at least a language + extension for web development. I think one of serious problems is using basic structures everywhere, like classes. For Laravel example: controllers, models, service providers, events etc. - everything is a class, even though they are entirely different beings. They all use the same inheritance models, the same methods + arguments approach etc. For me it feels like fitting wrong clay block to a hole. It will fit, but will be distorted. The problem is not in frameworks, it's in immature languages that try to be as minimalistic as possible, making them suitable for many different types of products. But, unfortunetely, if we ever get to work on larger scale, this generality becomes a pain. What we are doing is just keeping the mess less messy.

Prullenbak's avatar

@RoboRobok Defence approach? What's there to defend? Come on now.

You need to read the entirety of (both) my post(s). Not just the lines that don't feel as nice. The fact is: webdevelopment (or even programming in general) is still quite new, and everyone (yes, everyone) is still figuring all this stuff out. We don't have a clue. Believe me, you are not the only one who does. Because you don't. But, if you have the slightest idea how to improve things, you're welcome to try. People have been trying for decades and that has led us here. We're in a better place then before, and things are improving, because of people no smarter then you or me. But if you're just fed up with the industry or the act of developing/programming as a whole, just find yourself another job.

RoboRobok's avatar

webdevelopment (or even programming in general) is still quite new, and everyone (yes, everyone) is still figuring all this stuff out. We don't have a clue.

I agree with that completely, but you and me are in minority on seeing that. I'm not as tired of development, as I am of people who are thinking are writing fantastic code. I'm tired of fixing the code after programmers who are not predictive and don't see all of those limitations. And for me most of those problems are not caused by people's negligence, but with technology itself. Plus,I hate it when people like that think they "understand" anything. They just know how to distort those clay blocks, it doesn't have anything to do with understanding. It's just about finding out a way to make something work (and ugly). This is what I do everyday too, because I'm a web dev.

ohffs's avatar

@RoboRobok I heard a podcast a little while ago that suggested that PHP's tagline should be 'Ach, it's good enough' ;-) Sadly, that's about the state of the art in computing ;-) When I was young and still had enough energy to care much, I assumed we'd be in a star-trek like utopia for computers by now - and today I'm sitting trying to work out why swiping left on my trackpad has stopped going 'back' in my browser since last night. It's all kinda crappy and unsatisfactory - but that's where we've got to.

I sometimes think if computers had stayed under a couple of big directing influences it might have been better than the 'radical road' we went down - but then I think 'IBM, Oracle, MS, Apple, Google' and shudder ;-)

Writing a DSL might give you some good ideas for making things better though - certainly be something fun over the xmas/new-year break :-) Though you might find out you've just re-invented SQL, HTTP Verbs, etc - which is always a bit annoying after an epiphany ;-)

Prullenbak's avatar

Plus,I hate it when people like that think they "understand" anything.

Still, that is exactly what you seem to be doing in this topic.

This way of thinking isn't leading you anywhere, my friend. You need to figure out what ticks you off, and whether you like/love technology and your job enough to be willing and able to do anything about that thing.

If you're just angry about the fact that there are thousands of developers happy making a living with the tools they have, then what exactly is it you're angry about? In a couple of years there will be a new language, a new framework, a new whatever, and we'll be saying "this is the best thing ever", until the next thing comes along. This is human, and it has been so since some cavemen made a fire. It's just a choice wheter you enjoy the fire, or be mad that there is no electricity yet. Or you could start inventing the steam-engine. It's not more than logical that 99.9% of the people will be enjoying the fire.

RoboRobok's avatar

As long as a hardware forces us to make our code "efficient" it won't be beautiful, I'm afraid :( SQL is just about performance. In terms of making programmer's life better, everything about it is a pure nightmare. And ORMs don't make it pink.

Prullenbak's avatar

We're not getting anywhere here. Cut the crap with the details about ORM's, PHP, MYSQL, etc. and figure out why you're angry or dissapointed.

monsterdream's avatar

I think that I'm understand your pain. My approach is more philosophical. Long time ago, my teacher said that people think that computers are intelligent, smart... try to put dot in bad place and everything will fall dawn... People from NASA sent spaceship to the moon with computer power equal to commodore, today we have huge improvements, SSD cloud disks to fire wordpress website. Shit happend :)

RoboRobok's avatar

People were always thinking they live in new age, this is natural. I remember when I firstly saw Stunts game and it was first "3D" game I've seen, I was so impressed that I thought it looks almost like reality. I believe it's same today. We thing what we have today is great, while it's just not. Just not.

MikeHopley's avatar

I'm tired of fixing the code after programmers who are not predictive and don't see all of those limitations. And for me most of those problems are not caused by people's negligence, but with technology itself.

Have you considered the possibility that it's not technology that is at fault, but the human brain?

Think about it. Computers don't care about things like code organisation, testability, and architecture. It makes no difference to the computer how "nicely" you've written your code, or what tools you used. The computer can execute the code just the same.

Software is difficult because it is too complicated for humans to understand. That's why we have all these high-level languages, tools, and design patterns. They are crutches to help us live with our fundamental mental limitations.

Even something as basic as DRY is irrelevant to a computer. Computers have perfect memory, and could easily update every reference if they were doing the coding. DRY is useful because human memory is fundamentally limited.

Almost every practice in modern software development exists to manage the limitations of the human brain.

Plus,I hate it when people like that think they "understand" anything. They just know how to distort those clay blocks, it doesn't have anything to do with understanding.

That's rather patronising of you, although I expect that's just the frustration talking.

It's just about finding out a way to make something work (and ugly). This is what I do everyday too, because I'm a web dev.

That depends on your point of view. If "purity" is what truly matters to you, then you will never be happy with anything -- except perhaps mathematics; and take it from me, even maths is less perfect than you might expect. ;-)

"Finding a way to make something work". Isn't that what really matters? Programming is a means to an end. Programming makes it possible to create amazing things.

Of course, we also need people with enough imagination and understanding to make better tools. Maybe you are one of those people. But you'll need to channel that energy into something positive, rather than just complaining about it.

Does Taylor Otwell channel his frustration with software into complaining on forums? No. He channels it into making Laravel. Does Jeffrey Way channel his frustration about PHP teaching resources into complaining on forums? No. He channels it into making Laracasts. Put your money where your mouth is. Go make something amazing.

Maybe it's a burnout :P

I think all of us can sympathise with that. Programming can drive you nuts. Programming is one of the hardest things you can do, mentally.

Look, I can't count the times I've Googled for things like "programming sucks" (here's a really good one). It's good to let off steam -- for a short time. But ultimately, you will feel better by taking a break from programming instead. If being a web dev is grinding you down at the moment, then look to the other things in your life for refreshment.

1 like
ohffs's avatar

The first computer I owned had 1k of RAM and a processor speed of 3mhz - I could write games on it all the same with a bit of care :-) I think we'll always be forced to make our code efficient as the world around us hoovers up clockcycles with 'stuff'. At work we've got 10x10GB ethernet lines coming into an office and it's still not enough for them (when the project went live the network guy said to me, in a low voice, 'The plane's coming into land and the runway isn't nearly long enough...') - I don't think we're going to be resource worry free anytime soon :-)

I do think we under-estimate how free we can be with resources these days though - we have gobs of ram, disk, bandwidth available to us - and we fill it in a snap while still thinking we're being efficient. I come from a world where picking 'moveq.w 0,d0' was preferred to 'clr.w d0' because it saved you one cpu clock cycle. And even better, writing about 1000 moveq.w's and using a jumptable to skip over the right number to clear the number of locations you wanted as it was wayyy quicker than using a loop.

These days it's pretty rare I'd have to worry about any of that - and I'm really glad about it :-)

But, basically, IT can be a bit rubbish, humans can be a bit rubbish, the world is imperfect. How you deal with that is the important thing :-)

Prullenbak's avatar

I remember when I firstly saw Stunts game and it was first "3D" game I've seen, I was so impressed that I thought it looks almost like reality. I believe it's same today. We thing what we have today is great, while it's just not. Just not.

Because the stunts game came out a minute ago. If you get what I mean.

Of course, we also need people with enough imagination and understanding to make better tools. Maybe you are one of those people. But you'll need to channel that energy into something positive, rather than just complaining about it.

Does Taylor Otwell channel his frustration with software into complaining on forums? No. He channels it into making Laravel. Does Jeffrey Way channel his frustration about PHP teaching resources into complaining on forums? No. He channels it into making Laracasts. Put your money where your mouth is. Go make something amazing.

This.

RoboRobok's avatar

Have you considered the possibility that it's not technology that is at fault, but the human brain?

This is what I have thought about a lot. I think it's more technology problem. For now. The same question could be asked for this toothbrush problem. Isn't that people's problem that they can't clean a house with a toothbrush faster? And why they become tired so quickly when doing that? A tool that fits the task better, makes human more powerful. In the beginning of computers era, programming was only possible for math genius. Not so long time ago, computers were too difficult to use for most people. And that is not because of people's nature, but because of the software, that was not created the way to appeal human nature.

And here we habe an important point: human nature. This is where all successful products win. We will not change our nature any soon, but we can change our products to be more friendly with our nature. I have never treated programming as something inaccessible for someone who is not a scientist. Programming is defining a logics, describing the world. The more efficient our hardware is, the more abstraction we can use. The abstraction is nothing else, but just making our programming language more similar to our nature. And this is where I'm struggling to be happy with my profession. I want my code to be more like a book than a bunch of tricks to make a machine do what I want. I want to make it possible to write less code to achieve the same goals. I want less bugs.

MikeHopley's avatar

A tool that fits the task better, makes human more powerful.

True. But you still have basic limitations, such as humans being able to hold about 5 -- 7 items max. in short-term memory. (Yes, there are tricks to get around this in specific circumstances, to an extent.)

Tools can be improved. Tools are being improved. But we still have to live with our own imperfections.

Prullenbak's avatar

At this point, you just sound like ranting. You're sick of it all, and that's ok. Do yourself a favor and take a break. It doesn't even have to be a long break. Go have a merry christmas and a nice holiday, and come back next year with a clean slate and a open mind.

farrukhsubhani's avatar

Last 10 years mean 2005 to 2015. This is just where web development has got complex due to its use on devices. Look at last 20 years from dreamweaver, Flash era to now we have come a long way. Its not going to be an easy ride but I find things have gone so much easier that you might take some of the JQuery, angular functions for granted while I had nightmares about Document.getElementbyID not supported in all browsers.

Patterns or Tools will change and most changes are for the good of web development but at the end of the day you are developing so to make it easy for you to manage code. If you are developing a single page app it might not be worth creating routes, controllers and services for one page and gulp watch it while you develop but its not all for single app development. There are packages that can genertae CRUD for most of your models and you can build a complex comparison websites in 2-3 days with tests written and running on Travis as an open source project and all using free and open source tool. Who would have thought it was possible to run same app on mobile and tablets without doing anything extra back in 2000.

Lets not worry about the hurdles and try to find an alternative to these small issues. I agree that each project will ask for its own toolset and none of the phonegap build workflow for example fits in with games built by King but then people like UbiSoft can use phonegap build service to create games for some of their corporate clients. Laravel stands as backend to their user portal and allows them to manage issues etc but no one said its smooth for them.

Programming in general is fun and one part of it is to get stuck and solve it. If you embrace and acknowledge that you will be looking at repositories like https://github.com/twbs/bootstrap with 11000+ commits and 12000+ issues closed and still going on with 300+ issues on regular basis. Or take an example of one of the new Microsoft open source project https://github.com/SignalR/SignalR/issues with 4000+ commits and 2500 closed issues and 300+ ongoing issues. All of this is painful and for some dependants its even more painful. We all enjoy it and that is shown by this kind of communities.

Lets enjoy code as per wordpress definition its poetry and not worry about tools and patterns too much.

1 like
ohffs's avatar

And this is where I'm struggling to be happy with my profession. I want my code to be more like a book than a bunch of tricks to make a machine do what I want. I want to make it possible to write less code to achieve the same goals. I want less bugs.

Have you looked into functional programming like elixir or haskell? Elixir is quite fun - I find haskell a bit of a pita though - it feels like my worse Perl code mixed in with all the bits of mathematics I never got my head round ;-) It might not be exactly what you're looking for - but it might give you some ideas of a different way of working from OO/PHP-a-likes :-)

Next

Please or to participate in this conversation.