Low-code is not a cure for overworked IT departments
zdnet.com
zdnet.com
The second a difficult bug arises in your low-code (or, now, GPT-generated) solution, good luck.
No, I believe the cloud stuff has evolved in a way that is just strange. I know I'm not stupid, and I look at this stuff with suspicion. This is why I'm going vertical by owning my entire stack (except Amazon S3 because it is awesome...)
I wish it was cheaper, but I can leverage it well.
Nobody would design it like that from scratch but having only already existing stuff to build on makes the end result more complex that the problem it solves requires
And have a compelling product ...
You'd think the success of his model would be used elsewhere to reduce employer costs and increase retention (no SWE has left his org in 4 years). Instead other petty executives get pissy and poison the well.
Something is extremely off with modern corporate America.
But even a pretty low level developer is going to end up making important business decisions just incidentally as part of their job, because it's hard to specify out every little decision that could impact the business without basically doing the dev's job for them.
Businesses can embrace that or they can ignore it at their peril.
That's how it's done at all the US software companies I've worked at, including Microsoft and some startups.
My current company does has done away with job-titles entirely and we make up whatever we want on our business-cards (within reason).
Everybody organizes people, decide how work should be done, and has to make a lot of little decisions that nobody could anticipate. Not with the same leverage as developers, but with important consequences too. Somehow, management experts can't accept this.
We establish a difference between jobs where that training is relatively short (and thus we can expect it to happen on-site by the company who can hire people from other positions and have them do the new job) and the jobs where that training takes many years and thus requires significant pre-commitment and long-term planning to ensure that they can be filled.
For the purposes of crude statistics we pick an arbitrary line and label the jobs with <1 year of job-specific training required (starting from generic knowledge e.g. highschool or a degree in some other field) as "unskilled" and >1 year job-specific training required as "skilled"; but the key point is that there is a substantial qualitative difference between roles where you can "swap" people from one industry to another, and roles where that doesn't make sense at scale - while some individuals do switch high-investment careers, you're not going to solve a pandemic-prelate doctor shortage by re-purposing excess lawyers, but in that same pandemic you can solve a delivery driver shortage by re-purposing excess cashiers. Similarly in IT, the jobs which can be done by putting someone through an x-week boot camp do need different treatment from managers and policy-makers than the tech jobs which do require much more training and/or experience.
Bad managers thinks a managers role is all about making decisions. Great managers knows it's about enabling employees: great managers act more like secretaries, making sure everybody knows everything they need.
When a manager can communicate what is going on and what the strategy is, most decisions become obvious and this results in everybody agreeing to what needs to be done.
That’s because large corporations are typically run like communist states, where the workers have little say in their own work, and tyrannical unelected leadership sets up hierarchies that reward political infighting to build power.
Why don’t corporations try democracy and bottom-up decision-making? Is corporate capitalism incompatible with democracy?
You're describing capitalism, actually.
> try democracy and bottom-up decision-making
Those are called worker co-ops. They're very socialistic. And democratic. It's quite possible for them to be profitable, too.
When the new CEO was brought on they started to listen to the junior executives. They poison the well by stating things like how what he is doing isn't necessary or slowing down their own goals.
Just humans being humans. As a result he will likely leave in <2 years. I don't doubt that his old org will falter extremely fast.
It seems like well run orgs with less people are highly susceptible to quick change than large useless behemoths. Seems paradoxical, but a common fate at many companies/orgs.
"Good developers" are hard to find. Average developers aren't even easy to find nevermind ones that are actually good. The paying them a good salary and treating them well, companies are right onboard with in my experience. The tech department has better working conditions that most other departments. I worked at one company and one of the marketing teams once had to leave a resturant before eating because their lunch time ran out. So they paid for their food and left without it. All the techies just looked on in shock. We came and went as we wanted.
But the thing of finding good developers is hard. Even if you target just the folks in the top 50% of the bell curve, it's still going to be hard. And in my experience you get a few lower quality developers in and the next minute you've got someone saying their AWS lambda solutiuon can scale to any level 10 minutes after their solution took down the whole system in cascading failures because it was returning 500 due to the non-serverless database not scaling... I swear to god, even the non-technical folk knew the guy was talking nonsense. And the thing is, these people can and will pass your tech tests because honestly tech tests aren't really good at showing you how good a developer is actually understanding things. They can write quicksort but have no idea, how to figure out the best way to scale a data export feature that is crashing because of memory limits.
And the thing really with no-code, you encounter a bug, you're possibly dependent on a third party to fix the bug. Not a good place to be in because they never care as much as you do.
How many departments are asked to check in every single day with what you did yesterday and what you plan on doing today?
If you honestly think being asked those 2 simple questions is not being treated well. You're going to have a hard life.
IMO this is absolutely crucial to understand about our industry, for programmers too, not just IT.
We're paid well because they can't avoid paying us well. But they don't want to let us in The Club of the actual professional or upper-middle class, in terms of perks and status (and, actually, pay in most of the industry, even in the US, doesn't quite rise to that level—$200k+ for mid-career-or-earlier isn't what most programmers see).
Frequent monitoring and things like open floorplan offices are part of that. High-status gets very little monitoring, and an office. There are tons of little things like this.
I think it may also be a minor reason our interviews are so god-awful (but I think the main reason is the huge players trying to reduce turnover to suppress the rate of wage increases).
When companies want a fully algorithmic way to filter for signal, it’s not because we think it’s a great process, but because it’s one of the only viable processes.
PLEASE explain to me what value leetcode-type questions provide over what good of a software engineer someone is!
Here's simple task that I ask on interviews: write JavaScript function which works like setTimeout and uses setTimeout internally but provides a Promise result so it can be awaited. Very few people can write that kind of code. They actually have no idea what Promise is. They want to get in frontend position. How can you write frontend code if you have no idea what Promise is.
Would that piece of information be helpful to you as you consider which candidates to invite to the first round of interviews? That is why companies do it.
A candidate who got 2 or 3 solved in 90 minutes is very likely to do much better on the rest of the interview and on the job than someone who couldn't solve any.
(I think a lot of people who can write code have a difficult time imagining just how many people both can't write code and apply for seemingly every posted SWE job listing.)
Haha. Hiring people is a job in and of itself. It needs a good eye for detail and intuition.
People are weird. Some days they write great code and hardly any serious bugs. Other days they need to look up a for-loop on MDN.
Get some perspective ffs. This is the easiest, cushiest job I've ever had, and the only one where people with masters degrees often consider me their peer despite my 11th grade education.
Stop whining and join a union or something seriously. These are all minor and solvable problems.
Please get some perspective not everyone is in your situation.
Many IT jobs are paid hourly, don’t get health insurance, and some even get paid minimum wage. That said, I have had plenty of people describe their retail jobs as cushy because it’s low physical labor, inside with AC, and they don’t have to think.
Long hours and little respect probably will vary from one employer to the next. However, I've been working as a developer for about ~10 years - most of it with a mid-size insurance company but the last couple with a large bank. I work longer hours than most of my colleagues, but I've rarely put in more than 50 hours in a week, and my average is probably closer to 45. And my non-engineering colleagues have always treated my fellow engineers and me with respect and an appreciation for the difficulty of what we do. If anything, they've usually been a bit too deferential.
YMMV, but I think our profession is probably among the best in the world for workers. If my child were about to enter the working world and had the ability + interest, I'd absolutely recommend this as a career.
However, being on call is representative of something. Your electric company has linemen ready to respond at 2AM because they provide a service which needs to be available 24/7. However, good luck trying to contact your dermatologist, accountant, physical trainer etc at 2AM.
For all practical purposes, above a certain level of management, you are implicitly on call all the time. However, the bar to clear to engage you gets higher the further up the leadership layers you go. A manager of a handful of teams comprising about 100 staff gets engaged for less serious fires than the CEO, but both are "on call". It might take the board of directors chartering a helicopter to get to the CEO's fly fishing cabin during the CEO's vacation if a situation warranting such presents itself, but the CEO is absolutely on call 24x7x365.
The complexity of what engages the on call person I suspect is what connotes status. Called for clearing out disk space: low status. Called for application outage that has stumped multiple technical teams: higher status. Called for a production outage impacting the next day's C-level reports that requires engaging other management: higher status. Called for heading off a shareholder proxy battle: even higher status.
Note here complexity doesn't solely reside in the technical realm, but frequently is rather a blend of technical factors, social factors, and quickly making impactful decisions in low-information situations.
I can't wait for low-code to get good. It's going to throw back in real time the obliqueness of the request:
"Validating most likely candidate solution..."
8 hrs later
"Solution failed to validate ... please try rephrasing request."
It may not be indicative of the industry at large, but most engineers I know get away with this by changing the framing "I'm working on a doc" or "I'm scoping this feature" etc. Obviously this does not work with sufficiently bad management.
Care to outline it for me?
They're even busier in public hosptials btw
I am a disorganized guy who hates authority and interruptions, and even so I have grudgingly come to realize that (strictly) 15-minute morning standups actually do increase my productivity.
What you really want is developers who understand your solution and your stack, and actively want to contribute.
And for that, you need a good team mentality, easy-to-read code, and a good onboarding. And avoid crunch time as much as possible, especially when a new hire arrive, because you want him to ask dumb questions asap.
[useless personnal anecdote because i feel great about my new workplace removed]
It takes a lot of different skills to run a company. Even at a tech company, tech isn't the only skill that matters.
Why is a single dev able to take down your entire system without intention?
>They can write quicksort but have no idea
So don't use quicksort or identical questions and ask them more.
Your entire anecdote can just as well be held as testament of how a company's process is completely fragile. Which is at least a yellow flag as to what else it is hiding.
Software is a team sport.
IT departments love this, because it's not their problem and they don't have to do anything except press reload in the third party's ticketing system.
That's really not true. You don't need to find a Linus or Ken Thompson for that enterprise system. All you need is developers with sufficient maturity to not be distracted by shiny objects, who are proud to build reliable secure systems with the most boring technology applicable (complexity is the enemy of everything, including security, availability and maintainability). These people are easy to find. Yes, you still have to treat them humanely and pay fairly, but finding them is easy.
One factor that may seem to make them difficult to find is the current interviewing landscape. If your hiring process is laser focused on hiring leetcode ninjas, you will staff teams full of leetcode ninjas. I will say the union between the sets (leetcode ninjas) and (maturity to favor stable solutions) isn't super huge.
If for anyone who is doing leetcode hiring (not specifically leetcode, but that mindset) and finding hiring competent people difficult, I can suggest to change your hiring practices and your world will change dramatically.
(Or don't, leaving even more competent developers for me to find even easier.)
There are plenty of highly paid engineers who couldn’t build a decent product given all the coffee in Shoreditch.
As a non-tech person, how do I know to whom I should give all this money? Maybe a hands-off CTO or a hands-on architect cum engineering manager? Or a product person? Or maybe a skilled UX designer? Or a good infrastructure person? Or a DBA, and in which database? Or should I lower the money and get cheaper people in all those roles? Or maybe outsource the whole thing to an agency?
There are plenty of stories of companies who have hired all the above on good money and built an over-engineered, unmaintainable mess that solved zero real world problems.
I would argue that instead of money, you should build it with patience. Hire slowly. Solve one small problem at a time.
This translates to hiring - if your job spec is nothing but buzzwords you'll attract the kind of people that "engineer" for engineering's sake and resume value as opposed to solving your business problem (hell, does the job spec even include the actual business problem you're solving beyond vague platitudes about changing the world and boasting about their VC funding?).
Salaries need to reflect it too - if you pay too low, the only people that can afford to work for you are those that do so for the resume value rather than the money or the fun of playing in an engineering playground and potentially becoming its lead - with again zero concern as to whether they're solving the business problem. The kind of engineer you'd actually want usually already makes good money and no longer needs the resume value nor can be bothered to over-engineer.
Even as a contractor I've had plenty of leads where it became clear they weren't looking for an efficient solution to their business problem but an over-engineered mess to expand their engineering playground and my counterpoints fell on deaf ears.
The problem is reasoning. Often the low code limitations funnels the implementation into a contorted state, so by the time they've decide to give up what I get is frequently exceptionally difficult to comprehend. Usually I peek at it, try to get an idea, and then do what I would have done if assigned to task from the get-go - read (or make) a spec, and go from there. I'm doing some quick napkin calculations from the time tracking system, and the ratio is approximately 13/2 on the last 7 of these no-code to code tasks. What they attempt in no-code in 13 hours and fail I finish in, yes, 2. Given, these are not developers, and sometimes these actually come from the CEO (who does not track their time so they're not in that ratio), but mostly they're just managers and remote hires. And I've been developing software for 28 years now, so I have some capability. Also, these are mainly data related projects, so maybe other types of work would have more success.
No code will get better, I'm sure, but the problems we're solving actually are getting harder (it seems to me) and reasoning about them is the difficult part. I'm not sure how to no-code that.
I wonder if it's because some of those at the mid-to-level making these decisions are under the same market pressures as the rest of us to show they've actually 'done sometime' - so they can slap this on a resume and prepare it for an interview when they roll out of the org in a year or two after implementation. This seemed to be the history in the IT department at the hospital I worked out where they had a decade of zombie projects that sorta worked because they were implemented, barely supported, and the persons that made the decision had bounced to something else, leaving IT holding the bag.
Definitely true. Also don't discount the influence of good old fashioned corruption - cash kickbacks, job promises, gifts, etc., I've seen IT contracting decisions so dumb that graft is far and away the most logical explanation.
This is the core issue with any sort of complex system. Absolutely nothing matters when the customer is non-responsive with requirements or is not providing enough feedback on prior iterations.
Code vs no-code has absolutely no bearing on this part of the equation.
I do think there is value in low-code or scripted/DSL solutions, but it has to be a very intentional strategy that isn't simply leaning on "configurable == done faster".
And doing all that in a coherent way that’s ruthless about maintaining simplicity for as long as possible, including pushing back on business ideas that add marginal benefit but mushroom the complexity of the app.
Too often I've seen companies offshore a project only to require a full rewrite in 6 months because "that wasnt in the spec" during the first version.
Well written software expands your options as it grows, not shrinks them.
You can pay more for crap engineers if you dont know what you're looking for.
As someone else said, the other company will never care as much as you do. They have a different intent than you do, and making you think there’s common ground is part of how they achieve theirs.
* An IDE that knew anything; I literally wrote in Notepad
* Backup/restore procedures to speak of.
* Defined release/rollback procedures.
* Any monitoring beyond "walk to the server and look at the CPU monitor".
* Source control.
* 3rd party libraries.
* Cloud deployment complexities; one server, one deployment.
* A DBA or anything resembling one.
* Automated testing.
* A (solid) distinction between dev & production
* QA
* Cloud/reliable 3rd party logging.
* PII or other info control issues
* Security/compliance software, needs, etc.
* Documentation requirements
and I'm honestly probably forgetting a few things I could add in that I now consider a bare minimum for a production professional deployment.Many of these are only partially automatable by some service. Some are not automatable at all. Some you can automate to your heart's content but it won't matter because the user has an irreducible responsibility to use them correctly themselves, no matter how much you simplify it, like source control or writing documentation.
Last week one of my tasks was to dive into codebases that were 17 years old, and hadn't been touched in 12, and figure out what was going on and how to fix a new issue. At that point in time this company was a startup and certainly wasn't following 2022 best practices by any means, but at least they had source control, the source code was checked in, and it still built. (Very simple C programs, fortunately, single files with no external dependencies.) On the one hand, enough good dev practices that I could still pick up the pieces even if they are sadly deficient by modern standards, on the other hand, still more good dev practices than you can ask for from a non-programmer.
What does the equivalent of this look like for this "no-code" stuff? Who is going to poke through a big pile of stuff, where even if it is nominally "source controlled" or has a "managed DB" was not source-controlled well and the "managed DB" amounts to "well, when they guy who didn't understand DBs at all and was in fact aggressively told he shouldn't have to because this software Does It All decided he needed to add a column, it just went ahead and did it" and so and and so forth, is now a 10-20 year old pile of vendor-specific "no code"?
The intrinsic contradiction of the "no code" stuff is that we programmers do not have all this source control and testing platforms and QA procedures and deployment and rollback procedures and all of that other stuff because we are sticks in the mud who love process. We have all these things because we've learned the hard way they are necessary. I use them even on my projects where I have a single developer for maybe a month! And that's a tiny project, and they still save my bacon over and over. I look at my 1997 list in 2022 and both despair and laugh at what passed for a production deployment back then. For a modestly critical system for what is basically a ~50,000 person company. No-code trades short-term easier for medium- and long-term harder.
I can't even imagine what legacy no-code will look like and what a nightmare it will be. Without sarcasm, I'm sure it will make the 20-year-old, umpty thousand line Perl code base that I was also in last week look like paradise.
No-code is great for exploration of problems, and for all I may seem to be slagging on it here, I believe it has a place and it is worth exploring. But it is sheer foolishness to think it can "solve overworked IT department"'s problems. A no-code solution would be lucky to make it easier in the short term, but even if it manages that, the medium and long term graphs of difficulty are a nightmare. As a professional programmer, I'd LOVE to just be able to bash on code and not worry about backups and staging and rollbacks and QA and source control and all this other stuff. I'm not doing these things to gatekeep, I'm doing it because I need to!
To put it in physical terms, sometimes I think no-code is like someone passing highway construction and asking "What's with all these people? What's with all these machines? What's so hard about highway construction, it's just concrete on the ground, right? We don't need centralized planning and all this money! Let's just give shovels out to everybody and some cement mixers and turn them loose!" Well, you know, arming people with shovels and cement mixers can be very empowering in certain circumstances. But try to build a local city network that way and you're just going to reinvent everything you threw away, because it turns out trying to drive thousands of semi trucks a day at 70mph down a path some guys shoveled out and poured a bit of concrete over doesn't work.
/me standing up from seat and clapping loudly
Could you please share a few examples of best practices not followed?
The issue we hit square in the face is that while it was easy for our C level person to say "Yeah, this is simple, let's just make a low code solution!" when rubber hit the road and we started asking "but, what should this DO. What sort of solution do you want?" we got nothing but "We want it to do everything, but we also want that in the next 3 months".
In other words, they wanted a full blown programming language and integration with our legacy system (with literally 1000s of datapoints) all done with like 5 devs and no requirements other than "everything" and a PM that couldn't give us a "we are successful if we can do x" sort of usecase.
Needless to say, it was a giant CF and failure.
On the flip side, the low/no code solution that I've seen work unreasonably well was doing a custom groovy dsl hooked into the necessary bits doing data transforms. It worked great for us in dev because we simply wired in an existing language and it worked great for the product because the people writing the groovy scripts were easier to hire (and often got moved over to dev if they were good enough!).
I do feel like there is a solution here. On the dev side, what should be simple business apps written in code are too complex, and have too much cruft. Upgrading frameworks is a hassle. It should be easier.
I feel like a popular really well done open source AI code generation tool could solve this and is waiting to be written.
This is one of the biggest challenges I see people struggling with as they learn programming: Cutting out the implicit assumptions that humans make every time they communicate with each other, and interactively working to understand *exactly* what needs to happen and why.
Interactive AIs (e.g., Copilot, ChatGPT), in principle, could address the specification problem. Unfortunately, in their current state, they have no concept of what they don't know or understand. Gaps in the specification are filled in with assumptions, and one of the main criticisms of these tools at the moment is that they have no way to reason about how appropriate these assumptions are. It seems likely that we'll eventually reach a point where simple AIs can replace devs for the relatively simple tasks that low/no-code solutions target. However, for this to happen, (i) the AI would need the ability to reason about uncertainty/incompleteness in the prompt it's given, and (ii) the AI would need to be able to interactively work with the user to refine the specification.
This leads business executives to think that it's the "code" that is difficult.
1. Leaky abstractions. Our industry has been developing software for decades, and we almost generally agree that MVC-like architectures offer the best ratio of flexibility-to-productivity. How am I supposed to trust that an abstraction made by the low-code/no-code tool will allow me to implement even a slightly less-common use-case? When I use these tools, I'm constantly 1 use-case away from having to throw everything away and start from scratch using something else.
2. It doesn't solve the most prominent problem - designing the system. Implementing the software is in fact very straightforward and isn't that time consuming. On the other hand, having to think of all the use-cases that your application needs to support, thinking of all the edge-cases and less-obvious quirks is 2 orders of magnitude harded.
3. The highest degree of vendor-lock.
4. Not clearly stating what their limitations are.
I'm not entirely dismissing the idea, and I believe these tools can be helpful in some cases. But I believe that more often than not, people don't get the promised outcome, or even if they do, it doesn't come without significant tradeoffs.
In my oppinion, the better approach to save the time of your development team is to just give them better tools. Tools, that don't require them to completely dismiss the workflows and architectures they are used to. But rather tools, that just improve and simplify what they are already doing.
This was also my main goal when designing https://stacktape.com
I wanted to create a tool, that provides the highest possible level of simplification of DevOps, while at the same time being flexible to cover any-use case. I also very clearly state our limitations - it's only for AWS. If that's a dealbreaker, you won't need to spend 2 weeks to figure that out.
Should large businesses going to build their most critical functions into a low-code solution? No, not at all. But one slightly technical person in e.g. the marketing department can unlock a lot of business value but automating a few workflows.
I think that this "slightly technical person" won't be able to create that application/workflow with a sufficiently high-enough quality.
Is he going to think about all of the edge-cases? Does he know how to properly validate user inputs?
Also, quoting from the article: "Interestingly, while low-code/no-code are seen as the tool of citizen developers, its primary users are IT professionals, the Capterra survey also shows."
Their concept of custom tabs, custom objects, fields, page layouts and the way different layouts are assigned to groups of users by profile make it easy to stand up a lot of record keeping and management that's needed in a lot of plain boring business.
Granted, Salesforce is so immensely wide and deep that many of those advantages get lost in the complexity of the platform itself.
The trouble is treating No-code as the final product. Its the MVP that can be rapidly iterated which the end customers can play around to visualize and make sense of the product. This helps to understand what the customer wants and if it makes significant improvement to their workflow and creates value. It helps to streamline requirements and get you as close to final design as possible. Any executive worth their value should not be paying smart engineers to build a product that noone is going to use.
But besides this point, when the problem is now well understood, no/low-code is just like walking with rocks in the shoes: you think it will go away by itself and you end-up with bleeding toes in the evening!
It also helps the other teams understand the complexity of there problems (sometimes), and helps IT teams understand the use-case or idea.
I have seen project lead times reduce from month's to days.
All said and done though technical oversight and management is still required.
What happens when stuff evolves and becomes integrated?
I’ve, several times, seen the result of tangled lc/nc stuff gone production critical and… it becomes an unmaintainable mess that no one wants to touch. This becomes a massive roadblock for agility and change down the line.
A simple, discrete, crud app that could have been an xls - sure. Great for PoC and demos; horrible in a live business setting. IME.
Also, there are apps that are useful but don't need to be used enterprise wide. No code will change the work environment similar to the way the the spreadsheet changed it.
I’m in such a situation as we speak, and I’ve worked with low/no code workflow tools for more than a decade.
I’ve been part in building two: one BPM(N) workflow based and one graph-based data-modeling, form-building, event-sourced nightmare (like Alan or structr [1], both probably 10 years old by now, btw) - it goes for a great sales pitch but never touches on the finer points of maintaining and iterating on systems over time; a.k.a ownership!
Coding is usually not the issue, especially in business settings. Rather it’s about accumulating domain knowledge and expertise and figuring out boundaries.
It’s perhaps even more about owning the end results over time.
There’s a sort of quasi-competency built up around tools like this - you still need to understand how to build and govern systems, which is the hard part.
You end up with non-system thinkers that can build opaque stuff in a DSL. This ends badly.
Yeah, I’ve been around. Also blockchain will change everything. ;)
1) produces a just wildly, horribly inefficient solution, just doesn’t care about optimization or big-O at all.
2) guides the user through producing some reasonably sane design docs that describe what they are trying to accomplish
Then you’d pass those docs and the toy implementation along to a programmer
I'm increasingly beginning to question how this is even an advantage. If your IT team is overloaded... hire more and pay them better.
Another way of saying "allowing non IT teams to do the work themselves" is "taking a specialized job that can be efficiently done by a dedicated professional, splitting it into thousand pieces, and distributing those pieces evenly to everyone". Sure, it's nice that a marketing manager can no-code some automation without having to bother an overworked IT person, but now no-coding that automation becomes yet another little bullshit task that distracts them from their core competency, i.e. marketinging.
This is one of those trends that feel beneficial on the surface, but less so if you look closely, at least in job context. The OG one are office suites - particularly word processors, spreadsheets and calendars. Yes, it's nice that I can write my own reports, tally stats on my own, or manage my own meetings. It's less nice that I have to do it all the time, where in the past, there were people hired specifically to handle this job for everyone else. How many highly-paid software engineers are being distracted and waste their time on this, only so that corporate can save on hiring lower-paid secretaries?
I don't think it even adds up economically, but the trick is, once you eliminate a job with software by outsourcing it bit by bit on everyone else, even though it's now much more expensive, it disappears from the company books. Not having to pay extra salaries is legible. Overall unexplained productivity drop is not.
Of course, it's currently unreliable and slow, but the trend is a fast one.
Additionally, it might be given a memory store it could read from and write to -- and a StackOverflow-like network to curate advice from other AIs like itself.
A half-way version of this might soon start to exist.
"I told it to delete users from my contact list, not just delete them from system!"
They are, therefore, largely tools for power-users. You need to understand why codepiolt/etc. is suggesting a completion before its actually useful.
If you prefer: Intelligence is knowing what question to ask, and knowing how to validate the answer.
Worse is when it doesn’t take them long to fuck up, but it does take them (or, often, other people in the org, possibly after they’ve left) long to bring in a dev...
I’ve seen things, too...
Actual programmers have this problem too, though they often use non-AI tooling to catch and prompt them to correct invalid code.
No reason a system using an LLM for code generation couldn't do that, too.
Anticipating the “but even if it is valid it won’t always be correct” followup: well, valid human-written code also often has bugs.
I can easily imagine something like this taking off. After all it would be a giant step towards two things we have been trying since the 60s: a programming language intuitive enough that business people can use it, and a declarative approach where you describe what you want to achieve, not which steps to take.
That said, if all the current prompt engineering is anything to go by, using such an approach effectively might still require a lot of skill. But the barrier to entry would be a lot lower, and for some classes of problems it might be much more efficient in terms of programmer time.
What could possibly go wrong?
I know! Hook it up to manage people's retirement savings / 401(k) for pennies on the dollar compared to traditional portfolio managers.
Devs own the infrastructure. BUs own the business logic. Data analysts and data engineers are embedded in BUs, and they're the primary people involved in getting the platforms devs own to service business needs. Instead of giving them low-code garbage, give them an API to call, SQL access, and the ability to build, run, and distribute python applications.
Data analysts are the layer between devs and operations that can solve the problems and ease the natural tensions that arise between devs and ops. Support the data analysts and data engineers.
Don't buy into low-code sales pitches.
The idea of no-code/low-code is to lower barriers to entry. This is a process that started with the invention of C, continued with the much-despised COBOL, and had perhaps its greatest success with Microsoft Visual Basic macros. Yes, professional developers complained about the quality of that code, but it was a boon for many offices and was wildly popular. The idea is to make programming available to more and more people, so that with macros even secretaries could automate some Windows office tasks without needing to learn C++.
This is just a continuation of that process of trying to lower the entry bar for deploying automation. You are not going to write an auto-safety feature or build a load balancer using these technologies, but you are going to allow someone on the margins to automate a data entry process or put together a simple series of webviews.
However if you provide someone with a new tool to take on a new role, that isn't going to solve the problem of the person being too busy with all their existing roles. That's a completely different problem. Of course low-code isn't a cure for someone being overworked. It's meant to help someone with a lower skill level take on new work.
(There were also highly pragmatic reasons behind that, such as the paucity of common symbols in the non-standard character sets that were used back then. This shows up in other early languages, but nowhere so clearly as in COBOL.)
Nowadays we know that the "low code" paradigm does not help beyond absolutely trivial examples. In particular it does not make the resulting artifacts easier to audit or survey, rather the opposite.
Also, the idea of lowering the bar does not mean you spend 50 years on doing the same thing over and over again. This is also the point I made. First, they dropped the requirement to program in Assembly and created higher level languages such as C or COBOL. Then they dropped the requirement of having a separate toolchain/build infrastructure and created VisualBasic. It is quite foolish to think that VisualBasic was popular because of its syntax. VisualBasic was popular because the developer environment/runtime were bundled into the office suite. Programs were extremely portable and the runtime was everywhere. It is the same reason that javascript became popular. That got rid of a lot of infrastructure and lowered the entry bar. It was the macro feature that made it a success, not the syntax. Then comes the no-code toolkits which have drag and drop and other features which you can get really distracted by, but they really work on the basis of a fixed set of libraries and a fixed set of calling conventions that is intended to simplify the chores of library selection and invocation. Again, the point is to remove or simplify something by automatically providing it.
How much of a success it is will depend on how good it is at removing complexity for the set of tasks it is designed to tackle, which will ultimately be decided by market adoption. But one thing these tools cannot do, is free up people who are already busy. What they can do is lower the entry bar so people who wouldn't be productive because the barriers to entry are too high can be productive at rolling out simple automation tasks. The Marketing exec rolling out some clumsy dashboard reporting tool via a no-code process is the natural evolution of the secretary creating a form with visualbasic, which is itself the natural evolution of an accountant writing a script that calculates a depreciation schedule with COBOL.
Power Apps: A raw app is easy to get running but a nice app that does what I want is hacky.
Pentaho Data Integration: Super easy to use and maintain.
MS Access: Fast development and you can do actual programming if need be.
Among these tools, I just don't see a need for power apps and desktop apps written in MS Access are not something people are looking for any more. PDI on the other hand makes it easy to ETL data and has saved me countless hours over the years.
1.
What happens is that it is usually very easy to get a simple thing up. Then you try anything a bit more complicated or not standard or anything breaks and you spend way more time trying to figure it out than it would take to building the normal way.
2.
Another problem is that managers/CEOs think that if you have no-code tools you no longer need engineers.
Guess what. Software engineers do not just code. They know how to build stuff, which includes a huge amount of knowledge of how to construct maintainable and reliable systems. Put non-engineers on the problem and you will get an unmaintainable mess that is going to be failing a lot.
3.
You try to string your system from a bunch of low-code tools. You quickly integrated a dozen different online tools. Now you find out nobody can understand what is going on. If you hire a person, they will spend a huge amount of time learning all of those tools.
If you build an application let's say in Java, it is much easier to get around the system and understand how it works. If you can read and understand one module, you can pretty much read and understand all of them. But with low code tools strung together there is pretty much new problem, new language, new paradigm for every of those tools.
4.
Part of software development is ability to modify things in a safe way. Having test environment, code versioning, integration and deployment pipelines, etc. Having practices around building stuff. Almost no low-code tools respect any of it. At best you can build your own custom solution for each one but forget trying to prepare v2 of your system and deploy it in any organised way. Your production usually becomes your test environment and your deployments will typically result in some minor drama.
**
I get the appeal of low/no code tools. It is super fun to get something working very quickly with no resources. If you have a simple problem that matches the tool perfectly and you will never want to make it much more complicated -- it might even be the best solution for you.
The issue is that management wants more and you will have to field requests for new functionality and requirements. And you will quickly find adding those will start taking exponentially more effort while you are necessarily spending time talking to your sales reps trying to figure out if/when they can provide the functionality. All this while you have trouble hiring and onboarding people to maintain it because there is just so much magic that only your initial staff is only ever able to understand what is going on.
I'll repost an old post of mine:
https://news.ycombinator.com/item?id=33703563
The Curse Of Almost: Your tool is great, it's almost perfect... except for that one little thing it can't do, which your users need to do, which, therefore, leads to masses of ugly hacks unless you provide access to an escape hatch where sufficiently motivated experts can drop down to a real language which doesn't have your DSL's limitations and get the job done.
It's the Curse Of Almost because, if it were too much worse of a fit for the problem, nobody would even think of using it to solve that problem. Getting someone 90% there and crapping out puts your users in a more awkward position, especially if they feel they've invested effort in whatever tool they have.
An example is Talend versus CSV: Talend is an ETL Solution which Extracts data from some source, Transforms it according to a graphical DAG of ideally stateless components, and Loads it into some other storage. It's also a happy, friendly GUI on top of Java, which is nice, because the Real World isn't kind to happy, friendly GUI solutions which expect CSV is going to conform to any of your syntax rules or other misguided preconceptions about files having structure. So, when you have to run a Talend pipeline on vaguely-comma-delimited text files which may once have been machine-readable, you can make your own component which is literally just a block of Java code to parse the file using the Zerg Rush Of Ad-Hoc Rules Technique, an oft-overlooked method for designing parsers. You can also use that kind of thing to make components which are tasteless enough to demand state variables other than the stereotyped kind Talend itself provides.
> Another problem is that managers/CEOs think that if you have no-code tools you no longer need engineers.
Or you can cheap out on engineers, because they don't have to code, just use a GUI (which must be easy, it's just point-and-click right? /s) and don't realize that, to solve any problems except the most stereotyped happy-path examples, you need more expertise because now you're actively going against the grain. This isn't as bad in Talend as it is in other things I've worked with, but even in Talend once you start writing actual Java in the components you need to worry about scoping rules because your Java code is just dumped into the middle of a great big method written by Talend itself and the Java compiler isn't in on the gag.
No-code doesn't mean no code, it just means your code is hidden. Engineering is a skill set and it doesn't start and end with writing code.
Such things make the easy stuff easier and the hard stuff impossible.
As long as that's understood that's fine. If it's not you are in trouble.
To put it another way, I think the demand for it is often just another manifestation of Conway's Law.
I think that low-code platforms can fill a need where they can help a team iterate on a solution without IT and get to a 80% solution that solves real problems, then bring in IT to help productize it rather than trying to start from scratch.
Think about the sales pitch of low code: Now your marketers and business people can put together solutions to automate business processes, without writing a single line of code (or while writing very few lines of code)!
Except yeah, weeks or months in, those solutions have to be maintained as the business shifts. Sales, marketing, and executives have better things to do than maintain a bunch of instructions for the computer. How will we handle this? Oh, I know! Let's throw it over the wall to the people who specialize in this sort of thing: the software engineers! I'm sure they won't mind prioritizing maintaining the automation we built in $LOW_CODE_PLATFORM over the backlog of other things they have to do.
What are you asking? Where are the debugging tools? Low-code is supposed to have no bugs, what do you need debugging tools for?
Version control? Pffffffff.
Oh, and while you're at it could you integrate the $LOW_CODE_PLATFORM stuff with our mainframe? The source of all truth for customer records is still in the mainframe and--you need to write an extension module to do that? In Java?
Or they are workflow tools, sold with simple graphical demos of easy state machines / START -> box -> box -> box -> DONE flows, but when the rubber hits the road you encounter branching, loops, retries, subroutines, error codes, suspended/paused flows, state management, and full on turing machine processing.
Or they are AI tools, and you are relying on statistical probabilities that the code does what you want to, and statistical probabilities that the AI isn't producing the answer that looks right and the one you want versus the actual answer?
Or you are writing so much testing/quality control /verification that you might as well have coded in the first place?
Finally, you are invariably dealing with a vendor, and massive massive massive vendor lockin. Have fun when Oracle acquires them, triples the price, and audits you every other year.
So, yeah, this is going to be a mess. Fight it, fight it hard and this is just another attempt by the MBA class to devalue skilled labor. Call it like it is, and if they built it and owned it, they can maintain it.
Anything more complicated - you are looking at mountain of glue scripting to stich together different parts and maintaining that frankenstein of code
Drag and dropping boxes with arrows for a fully operational system? yeah haven't we already being trying this for decades, quite unsuccessfully? I'm more intrigued by the idea of using AI to generate acceptable boilerplate crap (eg CRUD crap) and still think very high level languages has potential (small, focused DSL).
A lot of frustrated, abused coders here in the threads, I feel it to.
The one area I find a bit concerning is governance/management around the data and permissions low-code apps ask. In a powerapps context for example, the app might ask permissions to read all your onedrive, sharepoint or email and it may even have a good reason to do so but now that means if the regular user who composed it gets compromised, threat actors get all that data from the user's of the powerapp.
I am guessing other low code frameworks also work with some business or user data. Low code means easy to compose and less low level coding error related vulns but you can still have a vulnerable low code app.
I think the best low-code platforms are ones that are ultimately built on top of code (eg Webflow, where the underlying representation is normal HTML/CSS/JS). I wrote a blog post about how I think low-code platforms are broken and how they could be fixed: https://www.airplane.dev/blog/how-to-fix-low-code-with-more-...
But that's a lost cause until there's a meteoric shift in our industry towards standards and modularity, which either will never happen or won't happen in the lifetimes of the current generations.
Most APIs have idiosyncrasies that you don't learn from the docs. With Zapier for example I can wire A to B without having to setup a project, repo, dependencies, look at docs, error handling, I don't know 100 other things? That's awesome.
Would I build, like, Honeywell's procurement system with a tool like that? No way.
No-code is subject to simplicity vs easiness just like code is (https://www.infoq.com/presentations/Simple-Made-Easy/). No-code tools tend to put a huge focus on doing one or both of these things. They're core value-props. But I think the question of whether or not a tool gives you sustainable value comes down to the simplicity axis (vs just making it easier to add more complexity)
A no-code tool that's easier but more complex than the equivalent code solution is probably going to be a net-loss, at least in the long run. Whereas a no-code tool that helps keep things simple by presenting a narrow, focused representation of a system (instead of general-purpose code) can be beneficial.
In a way, no-code can be thought of as a(n invisible) DSL + a GUI
Parcel delivery sucks because the routes the normal delivery person has to drive are so on edge that even the slightest anomaly will produce delays. I'd happily pay a euro more for shipping that does not suck and the employees would happily work in such an environment. Still it does not happen, because somehow somewhere someone decided this was the way it should be.
Same for IT. Want things not to suck? Just hire the right amount of people, pay them the right amount of salary (to get the right amount of expertise) and you are good to go. Don't want to spent that money? Then you are paying every day for the money you saved there.
They are burned out. Not overworked.
Burn out is malfunction of the meaning.
Somehow non-technical people managed to remove the meaning for the technical people. Is anybody surprised?
Fix is simple. Remove management insert leadership. Simple, not easy.
I used a motel vs. house analogy. But you had to assume it's not easy to move out of a motel for the analogy work. I'm still looking for a better analogy from the everyday world; some variation of a stitch-in-time-saves-nine.
No, you got it wrong, zdnet. No-code is for people who don't do software development. It's for finance analysts, marketing managers, and similar non-technical professions.
Also, no-code isn't something new. Non-technical people have been using a no-code tool for decades. It's called Excel. Now they just have more options.
IKEA’s knowledge graph and why it has three layers: https://news.ycombinator.com/item?id=32749633
For me it sounds like another Web3AIBlockchainVRMeta fad, like those trends in history: romanticism, baroque, enlightenment, etc.
That said, as development tool chains grow in options and complexity , I do see these things as being a bridge for some people to get their feet wet. Self taught devs can start here and then code later when needed. But that’s just a theoretical use case/market void that may not really exist.
All that work that could be done automatically by tools now has to be done by people showing restraint and following process. And these are the people who want a low-code solution so understand the problems far less.
It's a nightmare. Going to be good money to come in and clean it up later though.
No code won't fill all needs but they have a place in business.
> Everyone is talking about chatgpt and code generation this week. I think the code generated with chatgpt might be 90% accurate but how confident would you be to deploy that in production.
I haven't been paying close attention, but all the code I've seen it generate is also very simple -- like the kind of stuff someone could write after taking an intro programming class, prompted by a pretty detailed specification.
Modern-day software engineers basically write detailed specifications, they don't translate specifications into "code." Whether you're writing "AI prompts" or Python, it'll still be software engineering. Though my gut feel is software engineering by prompts will feel like typing with a wet noodle to hit the keys.
[1] https://towardsdatascience.com/i-used-chatgpt-to-create-an-e...
Software Engineers will have their place but no code and AI is aiming for the masses.
I actually think low-code will see a resurgence serving "almost technical" people such as tech business analysts, and also, drum roll... programmers. There is a current generation of maturing low-code tools (ex: Retool, PowerApps, Plasmic, Builder.io) which allow tech people to combine low-code and code as needed and which programmers may actually find attractive.
As for AI (ex: GPT), the main output it provides is code. It's nearly impossible to operate it at present for code-generation tasks without knowing how to code. Yes I think it's inevitable we will see a tool that blends current low-code graphical programming with NLP inputs. But it sounds very complex to make and I think it is likely to face the same base problems that low-code has.
Also, a thing people not considering with AI-assisted coding is that if it really makes programmers more productive, there'll be more chances to tend to more projects.