Які ви знаєте закони, що притаманні розробці ПЗ?

Вітаю. З вами Артур! Хотів би поділитись законами в розробці ПЗ, які познаходив на просторах інтернету.

💡 Brooks’s Law

Adding [human resources] to a late software project makes it later.

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

💡 Goodhart’s Law

When a measure becomes a target, it ceases to be a good measure.

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

💡 Hyrum’s Law

With a sufficient number of users of an API, it does not matter what you promise in the contract: all observable behaviors of your system will be depended on by somebody.

Користувачі починають залежати від навіть неочікуваних поведінкових аспектів системи, що ускладнює зміни.

💡 Conway’s Law

Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization’s communication structure.

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

💡 Linus’s Law

Given enough eyeballs, all bugs are shallow.

Чим більше людей перевіряє код, тим легше знайти помилки.

💡 Hofstadter’s Law

It always takes longer than you expect, even when you take into account Hofstadter’s Law.

Реальність майже завжди перевищує очікувані терміни виконання завдань.

💡 Kernighan’s Law

Everyone knows that debugging is twice as hard as writing a program in the first place. So if you’re as clever as you can be when you write it, how will you ever debug it?

Якщо ви пишете занадто складний код, його буде важче виправити.

Надмірно складний код ускладнює відлагодження і підтримку.

💡 Peter Principle

People in a hierarchy tend to rise to ‘a level of respective incompetence.

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

💡 Pareto Principle

For many outcomes, roughly 80% of consequences come from 20% of causes.

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

💡 Gall’s Law

A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over with a working simple system.

Розвивайте ваші системи, ітеративно їх ускладнюючи.

💡 Parkinson’s Law

Work expands so as to fill the time available for its completion.

Чим більше часу виділяється на завдання, тим більше його займає робота.

💡 Wirth’s Law

Software gets slower faster than hardware gets faster.

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

💡 Knuth’s optimization principle

Premature optimization is the root of all evil.

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


А чи знаєте ви ще якісь закони, що притаманні розробці ПЗ?

P.S.

Всім гарного дня та буду радий бачити у групі!

👍ПодобаєтьсяСподобалось15
До обраногоВ обраному8
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

Закон Лінуса, по-перше, неправильно перекладений, по-друге, неточний.
Якщо казати про переклад, то чим більше людей перевіряє код, то навпаки, менше багів вони знаходить, тому що думають що «ще Петя буде перевіряти, він уважний, знайде всі баги, а я просто лайк поставлю», а Петя буде думати так само про Васю.
В оригіналі йдеться саме про достатню кількість тестувальників (якщо трактувати, як не надмірну, то буде більш-менш ок)

ви БУКВАЛЬНО невірно зрозуміли цей закон і придумали якусь «отсебятіну»

цитую оригінал:
Given a large enough beta-tester and co-developer base, almost every problem will be characterized quickly and the fix obvious to someone
або переклад вікі — uk.wikipedia.org/...​ься для когось очевидною.

як ви прийшли до вашого висновку розуміння цього закону — питання цікаве))

я коментую те, що написано в пості, там такого немає. Однак, якщо ми вже полізли на вікі, то БУКВАЛЬНО там же розміщено критику цього закону.

there is a small maximum number of useful reviewers, between two and four, and additional reviewers above this number uncover bugs at a much lower rate

Трохи нагадує мою отсєбятіну, чи не так?

In these cases, the eyeballs weren’t really looking

Ну і на десерт

Large scale experiments or peer-reviewed surveys to test how well the mantra holds in practice have not been performed

Тобто це не більше, ніж гасло

так критика != формульовка закону :D це АБСОЛЮТНО різні речі :D

мій оригінальний коментар містить 2 тези:
1. Переклад не відповідає оригіналу (дослівно «неправильно перекладений»). Як виявилося, в пості англійською вказане одне формулювання закону, а в перекладі АБСОЛЮТНО інше, хоч і присутнє в тій же статті на вікі, отже тезу підтверджено.
2. Закон не повністю відповідає реаліям розробки (дослівно «неточний»). І навів аргументи, схожі з тими, які наводяться в критиці цього закону, отже цю тезу можна вважати, як мінімум, логічною, якщо не підтвердженою.
Наступного разу буду ясніше формулювати свої думки, щоб АБСОЛЮТНО кожна людина змогла зрозуміти БУКВАЛЬНО, що я пишу

Відповідаю:
Коментар на 50% невірний. Ось причини.
1) це НЕ ДОСЛІВНИЙ переклад, а адаптація суті законів.
2) цитата

в пості англійською вказане одне формулювання закону, а в перекладі АБСОЛЮТНО інше

— ви НЕ ЗРОЗУМІЛИ формулювання закону виходить. Закон каже про те що чим більше людей ревʼюває тим більше вірогідність знаходження багу. Дослівна цитата автора закону : «Given a large enough beta-tester and co-developer base, almost every problem will be characterized quickly and the fix obvious to someone» — Дослівний переклад: «Враховуючи досить велику базу бета-тестерів і співрозробників, майже кожна проблема буде охарактеризована швидко, а виправлення буде очевидним для когось», тобто ʼ

Чим більше людей перевіряє код, тим легше знайти помилки.

що являється АБСОЛЮТНО ВІРНИМ.
Враховуючи досить велику базу бета-тестерів і співрозробників -> Чим більше людей перевіряє код
майже кожна проблема буде охарактеризована швидко -> тим легше знайти помилки.
3)

отже тезу підтверджено

— тезу АБСОЛЮТНО не підтверджено з причин того що вона попередньо АБСОЛЮТНО невірна. Вивід — в цьому пункті ви займаєтесь демагогією, підверджуючи заздалегідь невірні та некоректні тези :)

Інші 50% коментаря цілком вірні.

Закон не повністю відповідає реаліям розробки (дослівно «неточний»). І навів аргументи, схожі з тими, які наводяться в критиці цього закону

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

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

Закон минимизации кода
Чем больше кода реализует функциональность — тем больше в нём багов и тем больше требуется тестов для покрытия.

Закон спагетти
Если в коде что-либо оставлено публичным — оно будет использовано/вызвано в неподоходящих местах, превращая код в «спагетти»

Закон роженицы
Десяток джунов не родят того — что может сделать 1 тру-синьор

Закон гибели (следствие из закона роженицы)
Демократия на проекте (где на 1 тру-синьора приходится десяток джунов) — заведёт проект вместо релиза на кладбище

Adding [human resources] to a late software project makes it later.

Через [human resources] подумав про ейчар. Зрозумів, що додавання ейчар все робить гіршим

Estimate time треба множити на 3.14

Не спеши делать задачу может оказаться что она и не нужна была

Закон табуретки: кто сломал код, тот его и чинит.

Перефразовуючи слова Вінстона Черчіля про демократію:
«Agile/Scrum — це найгірша методологія створення програмних продуктів, якщо не враховувати всі інші»

Закон недеплоя в пʼятницю:
Деплой в пʼятницю може призвести до проводження вихідних за ноутбуком, а не за шашликом.

Закон пʼятничного естімейта:
Якщо у задачі естимейт 1 день, але цей 1 день припав на пʼятницю — естимейт помножається на два (вона буде готова в понеділок).

Закон колективної відповідальності (зі слів піемів):
Якщо виникла помилка, це вина всієї команди.

(ще згадаю, допишу)

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

А пм присвоює успіх і звинувачує інженерів в програші

Закон колективної відповідальності (зі слів піемів):
Якщо виникла помилка, це вина всієї команди.

А якщо все добре, то це заслуга пма?)

А, ще згадала, це теж із менеджерських законів:
«Будь-яка людина може зробити будь-яку задачу, просто деяким людям треба більше часу»

Я тільки не розумію, чому в мене торт наполеон вже 15 років не виходить, і додавання часу ніяк не допомогло, може в мене нема .... все-таки .... скіллів???? Може, будь-яка людина може і команду поменеджити?

Шашлик канцероген і печінці шкода
А ноутбук з екологічно цінних матеріалів і можна працювати стоячи

Чим більше часу виділяється на завдання, тим більше його займає робота.

Чим більше часу виділяється на завдання, тим більше робочого часу люди дивляться ютуб

знаю лиш пік Балмера)

якшо налити у чашку для чаю пива то ніхто на дейліку і не здогадається :)

пиво трохи палиться, а ось віскі — ідеально підходить під колір чаю ;)

секрет в тому, що треба заїдати лимоном, щоб довольне *бало не видало.

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

💡 Lehman’s Laws of Software Evolution
Continuing Change: Програмне забезпечення, яке використовується, повинне постійно змінюватися, щоб відповідати змінним вимогам середовища, або воно стане менш корисним.
Increasing Complexity: З часом система стає все складнішою, якщо не вживаються цілеспрямовані зусилля для її спрощення.
Self-Regulation: Процес розробки ПЗ має тенденцію до саморегуляції, що обмежує швидкість змін.

💡 Boyle’s Law of Communication (аналог до фізичної версії закону Бойля) Зі зростанням команди комунікація стає більш об’ємною і складною, що може призводити до уповільнення процесу розробки.

💡 Law of Triviality (Parkinson’s Law of Triviality) Члени команди мають схильність витрачати надто багато часу на обговорення простих і тривіальних аспектів проекту замість складних і важливих. Часто люди більше дискутують про знайомі їм речі (напр. вибір кольору кнопки) замість складних проблем архітектури.

💡 Murphy’s Law Everything that can go wrong, will go wrong. У розробці ПЗ це означає, що потенційні проблеми з високою ймовірністю виникнуть у найменш підходящий момент, тому варто мати план на випадок непередбачених проблем.

💡 Zawinski’s Law Every program attempts to expand until it can read email. Those programs which cannot so expand are replaced by ones which can. Це жартівливий закон, що описує тенденцію додавати нові функціональності у програми, навіть якщо вони не мають прямого відношення до основного призначення програми.

💡 Pesticide Paradox (в контексті тестування) З часом певні тести стають менш ефективними, оскільки система «адаптується» до них, тому їх потрібно постійно оновлювати або розширювати, щоб виявляти нові помилки.

💡 Ninety-ninety rule The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time. Розробка останніх етапів ПЗ може бути набагато тривалішою та складнішою, ніж це здається на початку.

💡 Liskov’s Substitution Principle (з SOLID принципів) Об’єкти в програмі повинні бути замінні на екземпляри їх підтипів без зміни правильності програми. Це допомагає уникати проблем із сумісністю в об’єктно-орієнтованому програмуванні.

Закон курника:

Клюнути ближнього нагадати на нижнього

1) Якщо не затестив якийсь едж кейс — саме в цьому едж кейсі і буде бага, яка боляче вкусить

2) Кожна програма, яка працює достатньо довго, перетворюється на набір тимчасових рішень. Що більше часу проєкт підтримується, то більше «тимчасових» рішень з’являється в його коді.

3) Закон 90-90: Перші 90% коду займають 90% часу розробки. Останні 10% коду займають ще 90% часу.

4) Один день толкового дебагу і рефакторингу коду вартий більше, ніж тиждень написання нового.

5) Чим довше код залишається без змін, тим складніше його змінювати. Старий код, який колись здавався «ідеальним», з часом стає важким для розуміння та оновлення без ризику щось зламати.

Дозвольте підправити оце:

Закон 90-90: Перші 90% коду займають 90% часу розробки. Останні 10% коду займають ще 90% часу.

Мало би бути:
Закон 90-10: Перші 90% коду займають 10% часу розробки. Останні 10% коду займають ще 90% часу.

1. Складність підтримки(багфікс, розширення) будь-якої системи росте з часом.

2. Якщо людина звільняється, то вона забирає мінімум 50%( часто більше ) знань про те, що робила на своїй позиції. Навіть якщо про звільнення попереджено завчасно і проведено knowledge transfer.

3. Доручіть задачу самому лінивому члену команди і він знайде найоптимальніше рішення задачі. При цьому часто це рішення буде не правильним або, як мінімум, не повним.

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

про токсиків прям неістово плюсую! цьому закону треба дати окрему назву якусь уже)))

цьому закону треба дати окрему назву якусь уже

«Закон Токсичного Члена»

Мав подібний досвід, плюсуюсь. Команда перетворилась на стадо упирів і 2-3 людей, що ледве виживають.

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

тільки головна проблема, тобто типова, у «90+%» випадках
такого опису на початку — ніхто не робить, бо — довго, дорого, і все одно треба буде його непередбачувано змінювати.

«Писати по технічному завданню так само просто як ходити по воді. Треба просто їх заморозити»

ніхто не забороняє замовнику платити х10 :)

колись для цього створювали посаду «dev tester» — досвідчений тестувальник, який працював в дев команді, і на ходу все перевіряв, ще до основного тестування — прийомки фіч.
По ходу знаходились неочевидні проблеми реалізації.

є такі підходи і в сучасних «вченнях», наприклад теж тестування документації

потрогать глазмі, увідєть своими руками ;)

я вам більше скажу що цей процес навіть автоматизуються вже є певні тулзи

Що «??» ?

Цитую себе давнього:

> Вышла новая версия документации? Ну-ка почитаем... Почему скриншоты от старой версии, если половина кнопок переехала? На каком языке фраза «жмякнуть на пимпочку»? Зачем выполнять работу X методом прохождения через цепочку из 7 экранов по 100 полей в каждом, если через средство Q это делается одним экраном на 9 полей, а работа X составляет ~55% действий пользователя? Кстати, а зачем форма 215 вообще нужна, если все данные уже размещены в предыдущих?

Найліпшу практику, яку я зустрічав а продуктовій розробці, це був штат спеціально навчаних\вирощених в конторі продакт-аналітиків, або принаймні окремо призначена людина, яка веде задокументовану-базу-вимог до продукту.
Не Confluence, де всі пишуть у вільному стилі, шарять знання, А саме документацію, до якої будуть звертатися у спірних випадках, коли треба розібратися: 1- то баг чи фіча, 2- чи можна тут змінити локальну логіку, не зламавши загальну, 3- ітд ітп

Найгірше, що зустрічав а продуктовій розробці, це лід-девелопер, який з вумним єб*лом закотив під брова свої мігдальні очі й заявив: «код — луЧЪшая документация»

це штат продакт-аналітиків, або принаймні окремо призначена людина

Все так. Але і їм треба зворотній звʼязок, і QA — ті, хто за означенням має його давати.

«код — лучшая документация»

:)
Ну из такого места надо быстро бечь.

Ну из такого места надо быстро бечь

це була епічна контора. Ніколи її не забуду.

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