Ask HN: What is the future of back-end development?
177 points| johnnydoebk | 9 years ago | reply
Meanwhile, every "builder of web3.0" who's trying to "fix the Internet", or "make the web faster, safer, and more open" is doing it in such a way that back-end development is not required. I.e. they are working on decentralized (either p2p or federated) universal back-ends that they assume should be used by everyone.
Do you believe that in future the back-end development as we know it today will be obsolete as everybody will use some p2p BaaS platform and the web-development will be all about implementing client-side apps?
[+] [-] mabbo|9 years ago|reply
You'll write your code, complex or simple; you'll hand it off to some cloud system; you'll write a bit of configuration; you're done. Likely the configuration part will become less and less required.
You won't think about hardware, scaling, load balancing, etc, it will just happen for you. The data store being used will be abstracted away so that you don't know/care much about who provides it. Configuration problem.
Containers, AWS Lambda, these are just the first course of this meal.
Why? Because developers are expensive. Time spent doing anything other than the critical piece of writing business logic code is time wasted, and longer time to market.
That's how I see the future of the server side.
[+] [-] scrollaway|9 years ago|reply
"Serverless" as in AWS Lambda has very specific use cases. The people who are serving websites on Lambda or something are not only doing it wrong, they are wasting money while locking themselves in to an architecture that doesn't fit their app.
I say this as a heavy Lambda user (https://hearthsim.info/blog/how-we-process-replays/). Lambda is super useful if you have to scale CPU-heavy tasks. I do think that model will play a big role in the future, but I definitely do not think it'll be the go-to model for backend. It's a complete paradigm change.
[+] [-] tachion|9 years ago|reply
[+] [-] blowski|9 years ago|reply
[+] [-] caleblloyd|9 years ago|reply
Serverless has it's niche for some tasks such as responding to events, but to do any heavy lifting I'd take a handful of beefy VMs over unlimited lamda functions any day.
[+] [-] obihill|9 years ago|reply
Essentially, we can't keep teaching each and every developer database connections, SQL, et al. The cognitive load associated with these sort of programs actually slows down advancement, and the quicker you can setup cloud-powered services that get the job done, the better it will be. Although, I can't say what that will do the livelihood of developers. We'll have to wait and see.
[+] [-] mrweasel|9 years ago|reply
Hardware scaling and load balancing is infrastructure. Abstracting the data for the client, that's backend development, that's where your business logic lives.
[+] [-] _RPM|9 years ago|reply
[+] [-] british_india|9 years ago|reply
[+] [-] douche|9 years ago|reply
And this is for a dead simple little setting.
[+] [-] leecarraher|9 years ago|reply
[+] [-] mrweasel|9 years ago|reply
If nothing else the increasing focus on data collection and processing will push the need for custom backend forward for many years. Any every application that needs to store or share data via an API, needs an backend that understand the data it receives so that it can validate, process and distribute that data correctly.
Backends (custom backends) aren't going away any time soon.
Your question reads as if you believe that "backends" equals desktop applications. Even in that case it's still hard for web application to compete with desktop applications. It's a matter of personal preference of cause, but something like Google Docs feels weirdly restricted, confined and cramped somehow, simply because it lives in the browser.
[+] [-] digitalarborist|9 years ago|reply
So much of backend work is redundant, login, user info management, allowing the creation of groups of users, user following, user data uploading or sharing. Not to mention all the DevOps, managing CloudFormation scripts, VPCs, proxies, load balancing, dns, ssl, cdn, database schema, the list goes on, and that's before there has been any original development at all.
With react native and electron (I haven't found the atom browser or vs code weirdly restricted) the web stack is moving into desktop territory and with serverless frameworks becoming more prevelent hopefully this will make writing original software easier with less redundant work.
As to your point about data processing needing a custom backend, I see the exact opposite. Generally all this data is just funneled into a generic hadoop cluster and can be manipulated any which way from there using spark or any number of data analysis tools.
[+] [-] jalfresi|9 years ago|reply
On top of all that, the very concept of web apps (in my opinion) is fundamentally flawed in that they break the web (fundamentally flawed in a similar way that Flash as a interactive platform was flawed e.g user interaction along a timeline is an inherent conflict).
So personally I expect all the client-side web app stuff to collapse under its own weight at some point. As a example, I've been a web developer for 20 years, and for my own projects at home I don't even bother with web front ends; I use QML and QT and bang out a great UI in a fraction of the time it takes to produce a web UI. It's not worth the hassle anymore, but then I have the luxury of my own projects not having many (any?) users beside myself.
As for back-end, I've actually seen a shift more towards "systems" e.g a set of isolated sub-systems interacting via event busses or queues over HTTP/JSON either as micro-services or something close to that. Then a separate "web front-end" app pull data for output/display, almost as a client to that system. So a cleaner separation of The Real System from Web Application Back-end. And in this space, things seem to becoming much more standardised means of communication between parts, whilst at the same time there is a Cambrian explosion of new tools, languages etc which can be exploited. There is very much an idea that separate sub-systems can be written in languages which can best take advantage of for the problem space.
It's very interesting to see the differences in the way the front-end and back-end communities are approaching progress/innovation.
Anyway, thats my opinion/view of it all. Sorry for the wall of text
[+] [-] rimantas|9 years ago|reply
[+] [-] lj3|9 years ago|reply
[+] [-] sktrdie|9 years ago|reply
[+] [-] DoubleGlazing|9 years ago|reply
I seem to be doing a lot more "mashup" work than ever before, joining up disparate back end systems in order to hide it all behind a simple modern front end. In the past if I was developing an order processing system I would work on the view/UI side of things as well, now I expose the functionality via an API and let the front end guys develop a nice interface for it all.
Also lets not forget you don't actually want any mission critical, confidential or security stuff happening on the front end no matter how WebAssembly gets.
There will always be a backend.
[+] [-] jbb555|9 years ago|reply
[+] [-] sontek|9 years ago|reply
The JVM is an extremely fast system and if you run java on top of it that is fine. There is a reason so many of the world changing distributed systems (Cassandra, Kafka, ZooKeeper, etc) are built on top of it.
I believe what you are thinking of our java business systems which are usually bloated/slow and developed by similar developers who think backends can be automated.
There is trade-offs on both cases, if you can optimize for developer speed and sacrifice app performance that might be fine for your use-case. Software applies to pretty much every industry and not everyone needs scale but not everyone can live with poor performance either.
[+] [-] brianwawok|9 years ago|reply
[+] [-] Zekio|9 years ago|reply
[+] [-] shadowmint|9 years ago|reply
You're wrong.
(See, I can just drop off one line unjustified comments too, but I wont~)
WPF native applications are failing against electron applications; slack, atom, vscode. If you think that because it runs in a browser it'll be slow, try writing a native windows 10 application sometime. You'll be both astonished and disappointed by how terribly slow the 'GPU accelerated' application is.
All web assembly does is cement this desktop dominance from 'native' applications and allow people to start pushing realistically into the mobile space with react native, etc.
You don't think it'll revolutionize anything? Haaaa~
[+] [-] John23832|9 years ago|reply
[+] [-] lucian1900|9 years ago|reply
Dalvik's major advancement was faster class loading.
[+] [-] mrits|9 years ago|reply
[+] [-] emilsedgh|9 years ago|reply
What you can do with WebAssembly regarding front-end development is running your Qt/GTK+ type of programs on web.
But noone is interested in that. As a matter of fact, current trend seems to be ditching that sort of program on desktops and using HTML/JS/CSS stack for desktops as well (atom, slack, etc) because its much easier to create a top-notch UX using HTML stack.
HTML stack is very resilient. It evolves at a fast pace. Don't underestimate it.
WebAssembly will definitely have its own use case in the future (games, apps with specific performance requirements) but its not replacing frontend development.
Regarding backend, its not going away. Serverless doesn't mean backend-less. It means backend deployed in a very distributed fashion.
I personally think backends will be thinner and thinner as databases gain more responsibility an functionality.
[+] [-] otobrglez|9 years ago|reply
- More functional principles and more resilient implementations.
- Complete decoupling from lower levels. Meaning that you don't care about servers anymore. Apps are Dockerized and resources are dedicated automatically.
- No more human designed APIs. Why write APIs if modern machine learning principles can replace the whole concept?
- More lambda / serverless concepts.
- APIs and integrations will be automated and auto discovered.
- More (micro)services, mixing of different languages and stacks.
- More streams, more events,...
[+] [-] rimantas|9 years ago|reply
[+] [-] pauljaworski|9 years ago|reply
Now that I'm getting deeper into the project, I need to add in features like PDF generation. No problem! I'll use microservices for that. Well, that means I need to build a Docker container, deploy it to AWS ECS, and configure AWS API Gateway to talk to it. None of these things are what I would consider "front-end" dev work.
Back-end is surely changing, and many of the needs can be shifted to the front-end/BaaS platforms, but there's still plenty of work left! I think we'll see the back-end role transition more toward building and maintaining these microservices and possibly the business logic portions of the front-end.
[+] [-] fermuch|9 years ago|reply
It's easy to do and you don't need to mess with anything more than two simple API.
[+] [-] nol13|9 years ago|reply
[+] [-] donatj|9 years ago|reply
[+] [-] tinganho|9 years ago|reply
I personally don't think any programming language fits the above description. And we have yet to invent it.
[+] [-] unknown|9 years ago|reply
[deleted]
[+] [-] tonyedgecombe|9 years ago|reply
[+] [-] sotojuan|9 years ago|reply
[+] [-] mempko|9 years ago|reply
My guess is that future of back-end is using tighter languages like C++ and rust. Why? Because energy will become more expensive and we will require fewer machines to operate the application. These apps will run on single purpose kernels like exokernels and unikernels where the OS and app are married like in the "good old days"
[+] [-] samblr|9 years ago|reply
And going a step futher - relationship between tables in database should reflect on how an operational/working UI will look like. eg: say blog and comments are two tables and related by foreign key. So in operational front end - it makes sense to see them linked together in say blog page.
Now sprinkle machine learning concepts to it - a relationship between two interlinked tables where 'p' columns are in blog table and 'q' columns in comment table can be represented in 'n' different ways in say 'm' different type of clients(like web mobile etc).
Now is it not possible to link design of whole web app to our voice commands and let some deep learning algorithm figure best schemas, front end, frameworks and even show a demo MVP.
[+] [-] weddpros|9 years ago|reply
They are still built as if it's normal to split the backend in two: app server + db.
Maybe backends will learn from databases, and become sharded, redondant, and stateful. The border between app server and db could become fuzzy...
[+] [-] SFJulie|9 years ago|reply
If liquidity is cheap on the market, innovations will tends towards KPEX=0 thus more SaaS and stuff will be produced backed with heavy marketing disguised as technical conf/blogs, and corps will have the money to kill competition by buying it. Hence it will not be a truly competitive market.
If there is a contraction of liquidity however only the fittest will survive (low OPEX) and then SaaS, p2p, BaaS will die for more «old school» kind of development based on costing/pricing. Clearly this would mean the return of GUI and all kind of transactional databases and small meaningful data.
The problem with financial markets is they are like weather : hard to forecast.
And for the same reason we know there is a global warming, there is clearly a tech bubble. The more we wait for solving the problem, the more it will hurt.
An industry future is always related to the confidence and money investors have in investing into it to expect ROI.
With the paranoia going on all around the world, expect security to be the next money maker.
[+] [-] p4wnc6|9 years ago|reply
The only way that such a thing could be commoditized into a front-end interface is if you could devise an interface that allowed for all the different kinds of questions that will be asked, the ways they will change, the new features that will be wanted -- because most of the work is taking some backend pipeline that is already optimized for being able to answer questions of type X, and then figuring out how to generalize it without losing any performance in order to also answer questions of type Y.
It's almost always highly specialized to the specific company and line of business involved, so consulting companies can pop up to take away some of the in-house work, but in general there is no conceivable "as-a-service" thing that could.
Thus, you're left with needing to manage your own backend, probably for quite a long time to come.
Finance, ML for search interfaces, small-data statistics consulting (like political statistics, ecology, and other fields), education analytics, and many other fields offer work that falls into these categories.
Basically, anywhere that there is a business or domain science researcher that needs ad hoc computer programs whose lives as programs will generally only serve to answer scientific questions for that researcher. The ad hoc nature of how the questions change most often mean that no service that pretends to put a front-end API over top of the science questions can adequately capture the variety of things that are needed, especially once the further need to heavily optimize them is added in.
[+] [-] brad0|9 years ago|reply
What is it that keeps backend developers in a job? We write code to give access to data in a way a consumer can use.
ie: we have input, we process the input and give the output (CS 101)
Every time we write something new one or more of those three elements has changed. Input, Processing or Output.
eg:
Input: The DB has a new table with data you need to expose on the website
Processing: The list of comments need to be ordered by upvotes rather than chronologically
Output: The existing JSON output also needs to be output as protobuf
Whenever any one of these elements is standardised it reduces our workload. Usually as a result of standardisation tools and frameworks are developed to take advantage of this.
If you want to know the future of any technology keep on top of their standards.
EDIT:
As well as keeping track of standards you should extrapolate what would happen if everybody adopted that standard. Who knows, maybe you could build a tool everyone uses and start a business around it.
[+] [-] LukeB42|9 years ago|reply
Frontend: Webassembly for augemented reality: Hololens or whichever Linux-compatible equivalent comes out on top.
Backend: Evolution as we know it appears to be an optimization function that balances between diversity and fitness, so with that in mind I'll hypothesize a healthy mix of RESTful HTTP/2 with optional streaming. Static resources should live in decentralised overlay networks guarded by frequent trust computation. See https://github.com/Psybernetics/Synchrony and https://github.com/Psybernetics/Trust-Toolkit for PoCs of this last part.