Найпоширеніші міфи про сучасний Low-Code та їх спростування

Вітаю, мене звати Андрій і понад п’ять років ми з командою займаємось кастомною Low-code розробкою різного спрямування. Від автоматизації бізнес-процесів до мобільної та веброзробки.

Під час роботи з пресейлами для замовників в мене з’явилася ідея про написання однієї або й серії статей, які детально розкажуть, що сьогодні собою являє Low-code. І чому Low-code сам по собі — це навіть не технологія, а певний підхід до розробки, який реалізують інструменти.

Наразі на українському ринку спостерігається тенденція спроб використання Low-code для розв’язання точкових завдань або для створення прототипів. Про його використання тільки для прототипів (і про те, чому це не повноцінне використання інструменту) я розповідав у своєму виступі. Можете ознайомитися, якщо цікаво.

У статті ж я буду намагатись показати реальну сьогоднішню ситуацію щодо Low-code розробки, маючи прямий досвід роботи з 8-10 Low-code інструментами для створення комерційних і Enterprise-продуктів.

У цьому пості я ні в якому разі не відкидаю класичну розробку або не стверджую, що Low-code розробка краще за всіма параметрами. Однак я хотів би продемонструвати деякі спостереження, працюючи в цій сфері досить тривалий час.

Чи дійсно Low-code позбавляє необхідності писати код

Якщо підсумувати все, що я скажу нижче — ні, Low-code інструменти не нівелюють необхідність використання мов програмування або певних фреймворків, які можна застосувати до тієї чи іншої галузі. І зараз я розповім, чому це добре. Наразі на ринку існує певна сформована думка щодо актуальності «citizen developer» (людей без технічної кваліфікації, які можуть розробити якісний продукт, використовуючи No/Low-code інструменти).

Думка ця свідчить якраз про те, що будь-яка людина за певного спорядження може розробити програмний продукт. Деякі компанії просто навчають людей використовувати ці інструменти, і вони за певний час без проблем можуть створювати продукти, що відповідають стандартам ринку.

Певні дослідження показують трохи інший погляд на використання Low-code, з якого використання коду по мінімуму вважаю виправданим, наприклад, у сфері QA.

Велика стаття щодо використання цього підходу до тестування Challenges & opportunities in Low-code testing розповідає якраз про domain based citizen developers, які можуть використовувати певні спеціалізовані інструменти Low-code для автоматизації візуального тестування. У тексті наводиться аналіз компонентів тестування п’яти комерційних платформ Low-code, щоб висвітлити переваги цього підходу з точки погляду бізнесу. Я із задоволенням розберу цю тему у майбутніх статтях.

На мою думку, у застосуванні до розробки мобільних чи вебпродуктів продуктів трактування citizen developer і цієї практики (культури, напряму розроблення, можна називати по-різному) є некоректним з кількох причин:

  • Розробник — це не людина, яка пише код, це інженер, який вміє розв’язувати поставлену задачу оптимальним способом, а інструмент може різнитися.
  • Якщо автоматизація деякого бізнес-процесу з використанням, наприклад, RPA, може бути передана в руки citizen developers, то створення вебпродукту або мобільного застосунку — навряд. І причина тільки в тому, що людині необхідно знати певні стандарти, практики, які на цей момент не застосовуються автоматично Low-code інструментами.

Що це означає? А те, що інструменти розробки зараз автоматизують деякі best practice комерційної класичної розробки, проте точно не покривають всіх нюансів і деталей використання певних технологій всередині продукту. Як і не покривають усіх кастомізацій, які може вимагати замовник.

Наприклад, Low-code інструмент не оптимізує твій запит до БД або не пропише логіку валідації вхідних аргументів до методів. Не опише оптимальну структуру зберігання даних у БД. Інструменти можуть не мати певного функціоналу для реалізації того чи іншого візуального елемента.

Приклад: у розробці одного застосунку, який розробляла моя команда, була потреба в реалізації елемента анімованого еквалайзеру для вхідного звуку (на кшталт візуалізації вхідного звуку у Siri). В такому разі нам потрібно було розробляти кастомний widget на Dart, який використовував би всі можливості мови та її синтаксису (точно не Low-code).

Чому ж те, що Low-code вимагає знання і вміння використання мов програмування — це плюс? Тому що такі інструменти не повинні створювати нову парадигму розробки — вони повинні оптимізувати стару.

Початкові спроби створення популярних і, що важливіше, реально використовуваних Low-code інструментів мали на меті повністю нівелювати необхідність писати код. Та сфокусуватися на маркетингу й бізнес-частині продукту. Чим породили негативну думку технічних фахівців, а також ввели в оману поточних ЛПР щодо того, що таке Low-code.

Той самий обраний підхід створення нової парадигми розробки, що буде доступною людям будь-якого рівня технічної підготовки, призвів до реалізацій доволі посередніх продуктів. Продуктивність і скомпільований код яких залишав, м’яко кажучи, бажати кращого. Адже використовував неоптимальне дублювання коду, його мінімальне перевикористання тощо за списком антипаттернів проєктування.

Через це сформувалася думка «Low-code — для прототипів».

Сучасні ж інструменти Low-code мають на меті не прибрати необхідність коду, а оптимізувати рутину програмістів. Саме так їх і потрібно сприймати.

Інструменти не роблять інструмент за розробника, вони надають швидший спосіб виконати дії, які він виконує на класичних технологіях — реалізація та гнучкість проєктування залишається за спеціалістом.

Для демонстрації гнучкості розробки з використанням Low-code інструментів звернемося до прикладу реалізації застосунку, який розробляє моя команда, — «IdeaEcho». Він записує голос користувача, який надиктовує свою ідею, і за допомогою мовної моделі перетворює голос на текст. А текст — на структуровану ідею, до якої можна повернутися.

Гнучкість розробки з використанням Low-code інструментів

Розглянемо приклад реалізації сторінки запису голосу у візуальному редакторі студії. Вона містить кілька нетривіальних елементів для стандартного Low-code інструменту, як-то curved slider, еквалайзер у вигляді трьох вигнутих ліній, який динамічно реагує на голос.

Саме таких компонентів немає у FlutterFlow, тому необхідно звернутися до написання кастомних віджетів, використовуючи в цьому випадку Dart. До речі, переглянути базу всіх компонентів можна тут.

Інструмент FlutterFlow має стандарти структурування сторінки, які переносяться із стандартів Flutter/Dart.

Наведена вище схема ілюструє дерево віджетів для ExamplePage. Сторінка структурована за допомогою ієрархії віджетів, які визначають її макет і функціональність.

Кожен віджет у цьому дереві відіграє певну роль у побудові користувацького інтерфейсу. Від базових елементів, як-то Text, Image, до структур макета, як-то Rows/Columns, які організовують ці елементи.

Зробимо крок назад і подивимось, які елементи було розроблено, не вдаючись до кастомного коду. А які було створено власноруч за допомогою сторонніх бібліотек.

Для цього я виділив зеленим кольором елементи, які було створено тільки у візуальному редакторі, а помаранчевим — ті, які було створено із використанням кастомного коду:

Студія розробки Flutterflow підтримує всі примітиви Flutter, а також компонентну структуру сторінки. Як приклад на скріншоті нижче демонструю частину структури сторінки, яку ми розглядаємо.

Кожен компонент, чи то створений з використанням стандартних компонентів FlutterFlow, чи то класний код, можна відобразити у вигляді атомарного компонента і працювати з ним усередині візуального редактора.

На зображені нижче — розгляд reusable-компонента на прикладі RecordControls.

Компонент має анімацію під час інтеракції з ним. Це так само було реалізовано за допомогою вбудованого редактора анімацій, який дає змогу описувати їх як на рівні стандартних властивостей об’єкта, так і на рівні заздалегідь заготовлених пресетів (Fade, Shimmer, Slide тощо).

Кожен компонент надає можливість керування івентами протягом його життєвого циклу, що підтримує стандарти атомарної структури.

Робота з кастомними компонентами (віджетами), функціями, бібліотеками теж представлена всередині студії розробки й підтримує IntelliSense, як і будь-яка класична IDE. Сторонні бібліотеки можуть передаватися через PubSpec. Так само можлива компіляція застосунка й окремого компонента та його розгортання для тестування на емуляторі AndroidStudio або Hardware-пристрої.

Розробка на цьому інструменті прискорює процес, оскільки багато елементів візуального інтерфейсу є стандартними. Їх можна реалізувати, використовуючи тільки графічну обойму редактора, не вдаючись до коду.

Використання цього інструменту конкретно в нашому випадку прискорило процес створення продукту майже вдвічі. Якраз коштом оптимізації швидкості верстки інтерфейсів і внутрішньої логіки програми.

Чи можна написати «поганий код» на цьому інструменті? Звичайно! Однак як і в будь-якій розробці, якщо дотримуватись певних стандартів проєктування — проєкт виходить підтримуваним і розширювальним. А програміст, своєю чергою, більше піклується про структуру програми та її логічність, ніж про код.

Для подальшого спростування думки «Low-code — тільки для прототипів» можемо знову звернутися до деяких публікацій. У сучасній роботі 2022 року розглядається зростаюча роль платформ Low-code у корпоративному середовищі. Демонструється їхня ефективність у розробці критично важливих застосунків, що виходять за рамки простого створення прототипів.

Те саме підтверджує публікація в Carpathian Journal of Electronic and Computer Engineering. У дослідженні показано, як Low-code-інструменти перетворилися із засобів створення прототипів на основоположні компоненти при створенні критично важливих застосунків у галузях фінансів, охорони здоров’я та виробництва. Воно підкреслює перетворювальний вплив платформ Low-code, який дає організаціям змогу ефективно створювати та розгортати складні застосунки, що не виходять з експлуатації після впровадження.

Маючи це на увазі, клієнти можуть отримати більш коректне розуміння про те, що роблять розробники на такого роду проєктах.

На мою думку, цей підхід залишає за нами вибір рівня абстракції та гнучкості продукту, який ми розробляємо. Якщо це прототип — накидай стандартні компоненти й не переживай. Якщо це продукт, який користувачі будуть використовувати, проєктуй систему досконально, не обмежуючись якимись умовностями Low-code-інструменту.

Чи дійсно Low-code прискорює процес розробки

Швидкість розробки з використанням інструментів Low-code залежить від чинників, що стосуються як самих інструментів, так і розробника.

Деякі інструменти використовують певні абстракції над стандартними сутностями з категорії проєктування систем. Мабуть, щоб знизити складність входження в розробку для citizen developers або розробників, які не використовували раніше фреймворки та методології класичної розробки.

Як приклад можна навести те, яким чином деякі інструменти розробки реалізують концепцію візуального програмування. Що саме по собі хоч і є досить абстрактним, та в деяких випадках — зручним інструментом, який приніс нам Low-code.

Реалізації поділяються на такі категорії:

  • Односторонній спрямований флоучарт, що бере елементи з BPMN 2.0, відомі кожному.

Простий та популярний у використанні. На відміну від деревоподібного (графоподібного) формату, не перетворює блок логіки на спагеті, бо має напрям логіки процесу, що полегшує процес читання.

  • Двонаправлений граф.

Дуже спірний інстурмент, що використовується в небагатьох інструментах. Дозволяє рухати ноди графа (які можуть репрезентувати функції або операції в коді) в будь-яку точку простору, і напрям визначається виключно вибором розробника або конвенціями в команді.

  • Контекстуальний конструктор (мені тут згадується Scratch, наприклад😐)

Використовується в давніших реалізаціях інструментів розробки й не дуже зручний у читанні та написанні.

  • Point-n-click формули для невеликих блоків коду і класичний код для більших елементів логіки.

Блоки коду, в які візуально вбудовуються змінні з обраних контекстів або функції, описані розробником. Змінні та операції з кодом можна визначати як написанням коду, так і point-n-click варіантом.

Такі варіанти написання логіки використовуються найчастіше і мінімально відходять від класичного коду. Тільки трохи спрощують операції з контекстами й областями видимості, з якими працює розробник у кожному блоці коду окремо.

Найчастіше вони використовують можливості написання блоків коду класичним методом, що дає змогу використовувати всі можливості та конструкції мови в стандартному форматі.

Я не буду сперечатися про те, що справді існує велика кількість інструментів, які навпаки ускладнюють життя розробникам. А не спрощують, як заявляють вендори під час продажу. Проте коли коректні інструменти для команди знайдені — можна помітити збільшення швидкості роботи. Як із візуальною частиною продукту, якщо така наявна, так і з частиною бізнес-логіки, умовним відображенням елементів та реактивністю продукту.

Проводили нещодавно змагання між розробниками й бачимо збільшення швидкості під час побудови адаптивного веб-застосунку приблизно у два рази за умови наближених (звісно) початкових вступних, як-от технічна кваліфікація спеціалістів, завдання, яке вони вирішують тощо.

Звісно, не завжди такі результати можна екстраполювати на всі типи проєктів і логік, однак вони можуть бути на цьому рівні за умови вибору кваліфікованої команди або розвитку відповідної внутрішньої практики.

Чи означає Low-code, що AI зробить мені застосунок

Ні, футуристична концепція про всемогутній AI, який може за текстовим описом згенерувати highload-архітектуру, у цю угоду не входила.

Часто ви можете побачити пости в LinkedIn, які демонструють Low-code-компоненти інструменту, що дають змогу, за прикладом Copilot, написати блок коду або згенерувати віджет. Однак наразі в сучасній Low-code розробці ці методи застосовуються рідко.

Такі інструменти можна використовувати для побудови простого макета або концепту з величезною швидкістю. Звісно, якість реалізації та підтримуваність такої генерації лежить на вендорі рішення розробки.

Наразі технології такого роду не є ключовими в розробці, проте, можливо, в майбутньому матимуть успіх.

Сподіваюсь, мені вдалось раз і на завжди спростувати твердження про те, що «Low-code — це майже свій ручний розробник, який за тебе все зробить». Повірте, такі трактування справді зустрічаються.

Low-code не підтримує стандарти DevOps

Як підтримувати продукти? Досить важливе питання, коли розглядаємо інструменти такого виду для Enterprise-розробки. У великих компаніях снують регламентовані процедури перевірки коду, автоматичного тестування, тестового розгортання та численних шарів тестів й перевірок перед відправленням на реліз певної фічі чи продукту.

Логічне питання, чи підтримує це ваш Low-code. Моя відповідь — так.

Сучасні інструменти найчастіше використовують два підходи, щоб підтримувати стандарти розгортання додатків за стандартами тієї чи іншої компанії:

  • Надання точок входу для побудови своїх пайплайнів розгортання і тестування.
  • Надання інтеграцій з різними рішеннями на ринку для реалізації логіки автоматичного розгортання і тестування.

Використання методу do it yourself у цьому випадку виправдане, тому ми обираємо перший варіант.

У такому разі програмний продукт, при його розташуванні на cloud-потужностях вендора, надає нам API виконання release, rollback. Проведення тестування відбувається через написання Unit-тестів у самому інструменті Low-code і їх запуск. З використанням API, який надається вендором.

Може бути використана система моніторингу, що надається вендором, або ж підключена ззовні. І, так, існують спеціалізовані інструменти моніторингу спеціально для Low-code інструментів.

Методи вище застосовуються, коли розроблене нами рішення хоститься на закритих обчислювальних потужностях вендора, які використовують публічні cloud-провайдери.

При self-hosting-розгортанні ми природно отримуємо набагато більше гнучкості в налаштуванні тестування інструментів.

Low-code інструменти надають варіант вивантаження коду повністю як у форматі проєкту на певному фреймворку, так і як кластеру K8S, наприклад, коли йдеться про Back-end розробку.

А як же проводитися підтримка Low-code-продуктів? Існує два варіанти:

  • використання редактора, який надає вам вендор для редагування проєкту, залишаючись в екосистемі;
  • використання класичного коду з підтримкою коду, який було експортовано з інструменту розробки, виходячи з екосистеми вендора. Vendor-lock — це часта практика в Low-code інструментах, і я вважаю це неприпустимим під час розгляду інструменту для великого комерційного розроблення. Тому потрібно уважно вивчати інструменти Low-code перед початком розроблення.

Найчастіше у своїй практиці я бачив використання першого варіанту. Він зручніший, тому часто компанії обирають саме його.

Чи є Low-code-продукт моєю власністю

Можливо, це для багатьох буде неочікуваним питанням. Але дійсно існує велика кількість вендорів, які настільки глибоко використовують vendor-lock, що не лише не дозволяють забирати код із собою, а й мають право власності на кінцеві продукти! Це природно неприпустима для комерційної розробки практика, яка створила для деяких клієнтів негативну конотацію Low-code.

Поспішаю заспокоїти — це прописується в договорі з вендором, що дає змогу на рівні вибору стратегічного партнера обирати саме партнера, а не господаря.

Що можна винести з цієї інформації

Я пройшовся найвідомішими питаннями, які я чую сьогодні від клієнтів або від розробників, і дуже сподіваюся, що мені вдалося пролити світло хоча б на частину з них.

Low-code інструменти не замінюють класичну розробку, а натомість доповнюють її, дозволяючи розробникам зосередитися на більш складних і творчих аспектах проєктування. Важливо розуміти, що такі інструменти не усувають потребу в знаннях мов програмування та принципів розробки, а скоріше надають ефективні засоби для їх реалізації.

Ідея про «citizen developer», яку наразі пропагандують інфлюєнсери, є до певної міри перебільшеною. Оскільки створення складних продуктів все ще вимагає глибоких технічних знань і досвіду. Водночас використання Low-code-технологій вимагає обережного підходу. Особливо у великих комерційних проєктах, де необхідно забезпечити гнучкість, масштабованість і відповідність стандартам якості.

Маю в планах написати більш аналітичну статтю щодо вибору інструментів, які підпадають під усі критерії, що я вказав. Думаю, буде цікаво.

Дякую за ваш час.

👍ПодобаєтьсяСподобалось5
До обраногоВ обраному2
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Прийшов час струсити порох з мого коментаря до іншої схожої теми. Надаю його з деякими скороченнями.

З мого досвіду, проблеми low-code/no-code рішень стоять на чотирьох китах, які, в свою чергу, стоять на черепасі.

Черепаха називається «як би це не називали, але це все одно програмування».

А кити виглядають так:

Перший кит: composability. З ним зазвичай усе десь між «взагалі ніяк» і «погано». Або немає можливості винести частину функціоналу в окрему перевикористовувану сутність, якщо вона не пов’язана з якимось графічним/візуальним елементом. Або reusable components можна писати виключно якоюсь «справжньою» мовою.

Або якісь проблеми з параметрами: параметри «не можна», або максимум один, або передавати тільки константи, чи щось подібне.

Звідси ми плавно переходимо до Другого кита: проблеми з моделюванням даних. Можуть виникнути труднощі з тим, щоб у рамках процесу щось порахувати і зберегти результат (щоб використати його двічі). Або такої можливості взагалі немає. Або з типів даних у тебе тільки рядки. Може бути так, що всі дані представлені у вигляді global або local key-value map, і це єдина структура даних, і починається танець з магічними іменами ключів, які очікуються в тій чи іншій точці процесу.

Звідси переходимо до Третього кита: discoverability та namespaces. Імена, створені користувачем (імена процесів, змінних, ключів у key-value map), можуть жити в одному глобальному плоскому неймспейсі, який з часом перетворюється на смітник. Якщо вам дають пошук, то він може бути тільки за ім’ям (яке ви вже повинні знати). Якщо є пошук за тілом/атрибутами/чимось подібним, то він може бути дивним, адже показати контекст, у якому знайдено потрібне, важко — це ж не текст, з якого можна вирізати фрагмент.

Звідси переходимо до Четвертого кита: редагування. Якщо немає нормального пошуку — не буде й пошуку із заміною. Якщо немає пошуку із заміною — погано продумані імена сутностей можуть залишитися з вами назавжди. Контроль версій може бути, але порівняння різних версій або щось на зразок diff-а — вже ні. Двоє людей, які редагують одне й те саме, або обмежені якимось глобальним mutex-ом, або ризикують затерти правки одне одного.

І це все залежить від того, чи подумали творці low-code інструменту про ці всі речі.

На прикладі Boomi
Черепаха: так, це все програмування

Перший кит
Непогано: ми настругали собі купку утилітарних процесів та скриптів, які вирішували наші задачі; само собою, вони були юзабельні тільки тому, що частково прибиті цвяхами до декількох глобальних об’єктів (конекторів, операцій, процес пропертів), але і мали набір «параметрів»

Другий кит
Відносно непогано, оскільки дані все таки «моделюються» у профілях і потім їздять між процесами.

Третій кит
Все погано, оскільки discoverability обмежена тільки process properties і профілями. За бортом — всі різноманітні DDP і DPP (жаргон Boomi)

Четвертий кит
Тотально погано, редагує один за раз і по черзі. Перетерти зміни товариша — раз плюнути. Діффів нема (точніше є, але це неюзабельна і несмішна пародія)

Враховуючи, що під цю статтю прийшли люди які знають про лоукод чи з ним знайомі, тому залишу своє питання тут. Чи є проста тула яка може мені замінити веб клієнт, простий веб клієнт, який використовує готове кастомне апі?
ПС флатер флоу обожнюю, але веб з ним то сльози, вебфлоу і апі — на пряму не дружать, рітул цікавий, але схоже що він ок лише для адмінки

Дякую за статтю. Було б цікаво почитати про ваш досвід саме з продуктами для веб-розробки (WebFlow, Framer)

Можна було б і згадати шось лоукодівське типу корезоїда, камунди чи на крайняк паверапс, а то ніби людина дані поінт-кліку не зайшла

З лоукодом проблема трохи глибша.
Лоукод припускає, що знання мови програмування — це єдине, що відрізняє програміста від непрограміста.

Звісно, це не так. Основний скіл програміста — це керувати складністю, і лоукод-підхід цьому лише заважає.

На простих і стандартних проектах усе працює добре, але як тільки складність почне рости, візуальність і розробка мишкою почнуть заважати.

Будь-яку складну проблему можна виріши в простий спосіб, окрім проблеми великої кількості простих способів вирішення проблем.

Тут більше проблема в тому, що не треба з одним простим набором примітивних інструментів намагатися підходити до вирішення всіх абсолютно задач. Універсальність стане проблемою. Але, якщо розширювати пул інструментарія, то можна доволі довго тримати проект в робочому та незасміченому стані. З часом рішення, які дублюють одне одного, обʼєднувати, таким чином постійно тримати певний рівень функціональності, яка актуальна прямо зараз.

Не будь-яку складну проблему можна вирішити в простий спосіб. Часто єдине що можна зробити це або поділити складну проблему на багато частинок, або винести частину рішення кудись в інший спейс, скажімо так. Це переносить частину складності з коду програми вище, наприклад в СІ систему, яка може бути непристосованою для такого (особливо якщо її постачає автор лоукод системи, єдиним комплектом), або ще кудись. А інколи складність просто нікуди діти, якщо це і є цінність заради якої писали код в першу чергу.

Наприклад у вас є величезний тест який перевіряє купу всього лінійно. Можливо так сталось що цей тест можна поділити на маленькі частинки, наприклад на 10 частин. Ок, ми спростили код, але тепер ускладнили СІ систему яка оперуватиме в 10 раз більшою кількістю тестів, ускладнили систему репортингу та пошуку де тепер буде в 10 раз більше записів, ускладнили дебаг та репродакшен, бо тепер є купа залежних суб-тестів і це треба відслідковувати. Ну і так далі. Тобто ми не позбавились складності, а просто перекинули її кудись на інші системи чи інших людей. Або цей тест не лінійний і тут вже не дуже і вийде його розділити на частини.

Простий спосіб буде для тих, хто буде користуватися low-code solution.

Наприклад у вас є величезний тест який перевіряє купу всього лінійно.

В low-code системі величезний тест? А навіщо він там потрібний такий красивий? Що ви збираєтеся ним перевіряти?

Якщо ви маєте проблему, то не факт, що її треба вирішувати в лоб або в самий очевидний спосіб. Це біч сучасної розробки, коли речі мавпуються абсолютно бездумно, потрібно це, чи ні. Якщо вам не вистачає прозорості в коді — рухайтеся краще в цю сторону, щоб це було більш зрозуміло та передбачувано. Якщо ви боїтеся щось зламати, використовуйте підходи, які будуть мінімізувати вплив розробника на систему в цілому. Якщо ви не можете охопити все водночас, щоб зрозуміти, як все працює, то вирішуйте цю проблему. А тестами покрити — це не рішення проблем, це їх маскування.

Я би відмітив наступне: (1) відлагодження. Це головна задача, якою займаються розробники. І зазвичай для такого Low Code всіх інструментів не вистачає. (2) трекінг змін. Рано чи пізно стає питання пул-реквестів, що змінилося, ... І тут текстові файли та git рулить. Що змінилося, як мінялося, ... (3) це пошук відповідей, залучання chatGPT, ... Коли работа йде з текстом, то і запити до Google простіші, його рекомендації точніші, плюс LLM можуть допомогти.

Усе це приводить мене до висновку, що Low Code має працювати усе гірше з ростом складності проекту. Так само, як і різні ідеї графічних мов програмування.

Мій досвід з одним лоукод фреймворком це жах. Дорогі ліцензії; костильна розробка в кастомному тулі; надзвичайно тормознутий інтерфейс, що крешив браузер уже на пів сотні тестів; також дуже незручний для користувачів через хардкодед елементи інтерфейсу; надзвичайно повільний код через купу оверхеду (після переписування на пайтон, швидкість тестів зросла в два рази); малопопулярна мова для самописних компонентів (TCL); нестабільний загалом. І звісно більше нікому на ринку цей досвід не потрібен, тобто в основному витрачено впусту.
Все це УГ переписували на потім на пайтон кілька років. Це звісно лише один приклад, але мені вистачило. І ще я зрозумів, що всі недоліки лоукод підходу вилазять через значний час після початку розробки, особливо критичні проблеми зі скейлом чого завгодно. Тому підхід спробуємо і подивимось не працює. Це як варити жабу в каструлі, якщо це робити досить довго, то потім вже пізно повертати назад.

Сто відсотків такі тули є і із ними буває ДУЖЕ багато проблем. Цікаво що це був за фреймворк, може згадаєте? Бо я саме low code фреймворки (у классичному розумінні слова) ніколи не використовував.

Оо, чув про такий, не мав досвіду роботи (на щастя), але знаю наскільки з ним складно працювати, тому ваше обурення і проблеми з ним — абсолютно підтримую!
На жаль, у сфері Low Code інструментів дуже багато не якісних проєктів, які компанії намагаються застосувати до себе через «Low Code» у назві.

Я працював з багатьма рішеннями, але зараз мені видається оптимальним стеком для середньо+ складності проєктів це WeWeb/WebFlow — Wized/XANO для веб і FlutterFlow/XANO для мобільного розроблення.

На жаль, у сфері Low Code інструментів дуже багато не якісних проєктів, які компанії намагаються застосувати до себе через «Low Code» у назві.

Ні, це означає, що Low Code це приваблива маркетингова ідея, куди вкладаються кошти у розробку, але на практиці працює не дуже. Тому що в принципі це не дуже складна задача, багато хто пробував її вирішити, якогось результату досягли одиниці, і то якщо занурюватися можуть бути питання.

WeWeb/WebFlow — Wized/XANO для веб і FlutterFlow/XANO для мобільного розроблення.

Відкрив демку апі білдера XANO, на 4 чи 5-му слайді бачу «Add Function... CreateVariable... For Each loop...». Якось так «лоу код» закінчився не почавшись :)

Low Code мені нагадує залізницю: все добре їде там, де прокладені рейки (особливо на презентаціях). А крок ліворуч-праворуч або веде до катастрофічного зростання складності і тоді Low Code просто втрачає сенс, або взагалі неможливий.

Поцікавлюсь, із якими інструментами ви мали такий жахливий досвід?

Retool, Refine, AppSmith. Навіть AWS Amplify хоча це не зовсім воно.
Далі ресерча справи не зайшли в нас.
Завдання стояло дещо класичне: зробити панель керування нашим продуктом. Кількість опцій та настроювань велика і між ними є зв’язки. Треба було якісь штуки які б покращували для юзера орієнтування у всьому цьому. Але по суті там не рокет сайнс і буда мрія передати хоча б якусь частину керування дизайном UI/UX людям які знаходяться ближче до юзерів ніж розробники.

Причому на цій залізниці ти не пасажир щоб просто сісти й їхати, а типу машиніст, що повинен якось вести це одоробло, маючи з інструментів керування тільки одну кнопку On/Off :)

Low Code мені нагадує залізницю: все добре їде там, де прокладені рейки (особливо на презентаціях). А крок ліворуч-праворуч або веде до катастрофічного зростання складності і тоді Low Code просто втрачає сенс, або взагалі неможливий.

Два віски цьому джентльмену )). Підтримую.

Звичайний сценарій:

— Є зовні гарний low-code фреймворк
— У нього майже 100% має буде компонент, за допомогою якого можна отримати дані з REST API, та цей компонент скоріш все буде працювати як очикується у простих випадках
— Але,

крок ліворуч-праворуч

— наприклад, нестандартна аутентифікація \ нестадартні хідери \ нестандартне %you name it%, що не підтримується напряму.
— Додається якийсь кастомний плагін або інший workaround

.... Повторити N разів, ....

— Через деякий час маємо жахливий мікс low-code артефактів та різного рода extensions,який дуже складно зрозуміти та підтримувати, чим далі тим гірше.

Додатково, постає важливе питання інструментів розробки — тривіальний diff між двома версіями low code ... може бути не дуже тривіальним, та/або вимагає використання специфічних тулів.
Наприклад, текстовий diff навіть у випадку відносно human-readable BPMN, не дуже допоможе якщо були зміни складніши ніж імена змінних.
І це ще не source в бінарному форматі (так, бувають і такі збочення)

Звичайно, це великим чином залежить від продукту, але це є загальною тенденцією у цілому

Усі потуги «обійтися без розробника» приречені і розбиваються о перший закон кібернетики

Тому в статті і не говориться про те, що можна чи треба «обійтись без розробника». Навпаки, наводиться пропозиція оптимізації роботи розробників.
Наявність різноманітності системи, до якої ви посилаєтесь — не суперечить можливості використання інструменту, який надає певну автоматизацію рутини розробника але і надає гнучкість до створення складних рішень.

Але це дається по перше ціною спеціалізації «складних рішень» які добре підходять для вузького набору поширених юзкейсів. А по друге складність просто переноситься в декларативний простір. По мірі росту складності від кількох кнопок до кількасот кнопок повертаємось до необхідності програмування 🤷‍♂️

Грубо кажучи, так звісно лего з компонентів може бути краще за писати код, але по мірі того як ми починаємо використовувати сотні різних кубиків лего, сам процес використання конструктора перетворюється на програмування

Вихід є — гібрид між декларативним та імперативним підходом. Використовую щось схоже зараз. Дозволяє доволі вдало балансувати між написанням нового коду та перевикористанням наявного.

Хоча підмічено доволі точно, що відбувається на проектах з low-code підходом. Сам з таким стикався не один раз.

Підписатись на коментарі