client-side   458

« earlier    

The Complexity Trap: Think Before You Leap - Daniel Westheide
imagine the unthinkable for a minute: What if we did server-side rendering of HTML instead? There wouldn’t be any need to design an evolvable JSON API, which, unlike simply exposing your domain model, is not trivial, and there would definitely be no need for defining any JSON codecs. And that’s just what you get on the server side. On the frontend side, you would have one piece of software less to maintain, you’d get faster load times and you could get rid of duplicated business logic. To sum it up, you could reduce the complexity of your frontend JavaScript code a lot.

In the words of Jorge Manrubia, who wrote a great article about how the complexity introduced by single-page applications can often be entirely avoided: “[..] what about if, instead of trying to find a solution, you put yourself in a situation where those problems don’t exist?” Eliminating problems altogether is always better than writing code to solve them, regardless of how purely functional that could is.

But why is it that we fall for technological solutions so often, especially ones that don’t reduce complexity at all? I think that maybe we love progrmaming too much. I was recently talking to someone about Rust, and that person said, “A language without higher-kinded types is completely useless!”. Yes, certain abstractions are not possible without them, but I have never seen a project fail due to a lack of higher-kinded types. Projects fail because the problem domain is not well understood, or because the architecture is not a good fit for the requirements. They also fail because of how the organisation is structured and because of politics, be it intra- or inter-organizational. Projects fail because of people, and because of people not talking to each other.
programming  complexity  team  bestpractices  spa  client-side  team_management  javascript 
december 2018 by andrewsardone

« earlier    

related tags

3  airtable  ajax  algorithms  alternative  analytics  android  angular.js  angular  angularjs  api  app  appbuilder  apps  architecture  aws-lambda  backbone  backbonejs  base64  beanstream  bestpractices  bookmarks_bar  bootstrap  browser  caldav  calendar  carddav  center  client  clientside  clojurescript  cloud  cms  code  coding  commandline  comparison  compile-to-javascript  complexity  compression  crop  crypto  cryptography  cs113  css  csstricks  data-binding  data  database  db  debate  decoder  demo  detection  dev  develoment  development.backend.flask  device  doc  elm  email  encryption  engineering  evaluator  file-transfer  file  filter  firebase  flow  form  forms  framework  frameworks  front-end  frontend  full-text-search  full-text  geekery  generator  github  google  gwt  host  hosted  how-to  html-todo-list  html  html5  http  image  images  implementation  indexeddb  indexing  infosec  instrumentation  intellij  interview  java  javascript-library  javascript  jekyll  jquery  js  json-api  json  legato  less  library  linode  local  local_storage  logging  lua  markup  meteor-kitchen  meteorjs  multi-key  mvc  mvvm  mylar  naming  native-web-apps  native  netflix  nobackend  node.js  npr  object-fit  opensource  optimization  paths  pdf  performance  plugin  privacy  programming  progressive  protocol  python  python3  questions  react  reactjs  recommendations  redux  rendering  research  responsive  rest  router  routing  ruby  sample  scala  search  secretary  security  seo  server-side-rendering  server-side  server  serverless  service  side  site  snippets  software-development  spa  static  storage  style  svg  sync  synchronization  team  team_management  testing  todo-list  todo  token  tool  tools  tradeoffs  transazionale  trends  tutorial  tutorials  unhosted  urls  utility  validation  web-application  web-development  web-framework  web  webdev  websql  webstorage  wurfl  ydn-db  zk  zuml 

Copy this bookmark: