Over-engineering is under-engineering
baldurbjarnason.com
baldurbjarnason.com
Frontend developers are bad, but backend developers are guilty too. While frontend developers are breaking scrolling and the back button, backend developers are busy breaking authentication, security, and caching.
I think the only solution is to form some kind of developer's association dedicated to training and best practices. I hesitate to say "union," because the problem of over-under-engineering could be our fault, not necessarily our employers' (although pressuring new grads to deliver code at the same pace as their peers may contribute). It would be great if there were more bootcamps that just trained frontend devs on the latest HTML, CSS, and plain Javascript before WASM and React abstract the frontend away entirely.
What's the point when your business is required to support IE9.
> It would be great if there were more bootcamps that just trained frontend devs on the latest HTML, CSS, and plain Javascript.
Nobody would go there because that's not where the money's at.
EOL for IE9 was almost 2 years ago.
> Nobody would go there because that's not where the money's at.
That's exactly my point. At some point we need to find a way to guide the indsutry back in the direction of technical sanity. If not bootcamps, then it has to be developers I guess.
Experience comes with time, most developers sooner or later will realise that writing easy-to-read code on stable boring technologies is much better.
I don't think a bootcamp can help with that tho :)
tell that to the people that use it
The inertia in some of these organizations is monumental.
A lot of the time it's some kind of support contract though. Somebody at some point in time had a brain fart and signed a contract for a Website running in IE9 for the next 20 years and now they will have to support that, cost it what it might.
- Healthcare tech
- Banking (tools internal to banks)
- Aerospace
- Government
- Academia (think: old internal course-registration tools or professor-used CMSes)
- Education
...are not valuable customers? Because those sectors, and many others, are famous for using old versions of software. IE9? Hell, some giant HealthTech companies mandate IE 6 for their customers with no signs of changing. All of those are areas where there is lots of money to be made.
There valuable customers in software that aren't only young, tech-literate people clicking on ads in a modern browser. Get outside the bubble.
At least we don't have to support IE6 any more :)
Not in the real world. In the real world IE9 is very much alive and going ... well, I guess.
That’s what you have to have once you throw a bunch of tools, planks and screws at first graders and let them go. In my 20s I used few local enterprise solutions to help local micro-businesses do their accounting. The base system was obviously dumb and too restrictive to create “apps (tm)”, but it did its job very well. One specific thing about it was that it was infinitely hard (read: know C++/COM and be able to investigate platform issues) to create extensions for it and/or manipulate basic blocks like you can do with web trinity. The result is that no one went that long route of dominating the market with shady solutions that have value from non-tech faces, but are technically crap.
Seeing what some devs could do even in these conditions, I can tell that it was a good state of things for the tasks that platform meant to solve.
I may seem jump on topics on this one, but to not write a poem, look: Perl’s tmtowtdi is highly criticized, but what web allows is a “there are infinite ways to do it” paradigm with no basic blocks or “best practices” like you name it.
Summed up: if you’re writing apps that do edit objects, there is no room for custom element offsets, scroll handlers, sql statements (except select for few cases) and knowledge of http cookies, headers, urls, etc. If you can’t define a datascheme with two clicks, draw a form layout by hand and write final logic after 5 minutes, deploying in half a hour, without caring what platforms/databases/browsers/ languages/frameworks/backups/ maintenance/ides do you choose, then there is no room for business or app logic in your head.
>the latest HTML, CSS, and plain Javascript
Today it is like chasing specifics of plain 80386 assembly — the knowledge that ages faster than you can read on it from zero to top professional experience. If things didn’t get better in a decade, then it is a dead end. Plank, screw and hammer problem never gets old.
How can we make the situation for web development more like the accounting platform you described?
https://msdn.microsoft.com/en-us/library/windows/desktop/ff8...
Chances are I didn’t understand your second question, but if taken literally: I can’t see how usage control may help. Anyone can use anything at their legal will.
Perhaps if there was a single (large, but well-organized) team responsible for all platforms, that could correctly identify which features were needed where.
> Today it is like chasing specifics of plain 80386 assembly
I suspect the fetishization of the unholy Web trinity (HTML/CSS/JS) is impacting the ability of devs to imagine a better workflow. Case in point: Electron. Rather than take some of the lessons learned from the web stack, such as immediate mode UI being a decent default, they just crammed _all_ of it into a Chromium shell and declared it The New Way To Write Desktop Apps.
If the web is your first platform you've spent a lot of time on, then what I'm writing will probably just sound grumpy. And part of it is! But, on the other hand, when something new comes along, it may render all of your intimate JS knowledge useless because it isn't JS, and you need to be able to let that knowledge go. Even if the web as a platform sticks around, history shows that whatever comes next might be less powerful than using raw HTML/CSS/JS, but it doesn't really matter for getting most things done.
So webassembly doesn't come next?
Like, making the bridge twice as strong as it should need to be, or making the car faster than it's wise to go.
That's different from typical software overengineering, which usually doesn't make the product measurably better, just more complicated.
A bridge built to be twice as strong is measurably better in the sense that it is stronger, yet no better in the sense that it doesn’t achieve its purpose any better. Yet, to make it stronger will involve complicating the design (having a bridge that is twice as strong out of coincidence is just luck - not over engineering).
Comparatively, reimplementing form fields is better in the sense that the experience is more customizable. However, it is no better in the sense that it doesn’t actually help the user fill out a form any easier. Again, the over engineering adds complexity.
In both cases, the added complexity has costs which would have been best avoided altogether.
Speaking of bridges, you are IMHO a bit too extreme, a "double strength" bridge is definitely bad-engineering.
Over-engineering is (as an example) using a modified asphalt to pave the bridge (very good for adherence when raining and on cold, snowy places) in a warm climate country where it rarely rains, and never snows.
The good old definition of (construction) engineering norms is (maybe was) revolving around representing the reasonable cost for the society of reasonable levels of "safety" and "convenience" (both rather difficult to establish BTW).
When it comes to computing (and similar) the problem is often what I call the "because I can" syndrome, on the web there is an over-complication (maybe more accurate than over-engineering) on an increasing number of sites, which as an example if you have poor connection or not the latest OS and browser, reduce the number of visitors (or the quality of their experience) and this is the "under-engineering", as the site (while possibly offering a superb experience to someone accessing it with a given connection/Os/browser) will be inaccessible or only partially working to a not-so-trifling number of potential customers, so the site does not deliver fully what is supposed to, so maybe more accurately, it is over-complication that makes the result be under-performing.
It's all about minimizing the effect of the non-requirements, careful choice of a minimal set of sensible enough frameworks, and then rigorous agile prioritization at the application end.
> To pick a specific example: the problem with an over-engineered form is that the amount of code required to replace no engineering (i.e. native form controls with basic styling) is enormous and almost always only partially successful (i.e. under-engineered).
> They are under-engineered because they are over-engineered—tried to replace native controls.
> This is the basic argument against most forms of website over-engineering: scroll-jacking, manipulating history with pushState, completely customised form controls, etc.
> Recreating browser features will almost always be both under- and over-engineered.
Simple == I wrote it and I understand it.
How can I escape from this predicament?
It's an awful predicament because the concepts don't stand on their own; they have to lean on me for their meaning.
I think this creeps in on web development in particular because it is so often intensely boring, menial work. When you're a highly educated software engineer that is being paid top dollar to jam out ad-tracking code all day, you end up just making things complex for the fun of it.
There are only two hard things in Computer Science: off by one errors, cache invalidation and naming things. - Phil Karlton
... more at https://github.com/globalcitizen/taoup
Now that Apple has declared veto against the `is` attribute, I think the author should be prepared to give up on that claim.
<input is="my-fancy-input" type="text"/>
This will not work. To assign behavior to the input via Custom Elements, your only remaining option is to create a whole new element. <my-fancy-input/>
This might append a normal `input` element to the Shadow DOM, but still won't make the form accessible or even just behave naturally without substantal over-engineering. Custom Elements have become a cause the major concern identified by the article.> Recreating browser features will almost always be both under- and over-engineered.
This problem is identified in the Custom Elements specification already [1] so the browser vendors are simply not with us here.
[1] http://w3c.github.io/webcomponents/spec/custom/#custom-eleme...