On Project Management
βAdding manpower to a late software project makes it laterβ βπΉπ£π π ππ€βπ€ πππ¨
βFor many phenomena, 80% of consequences stem from 20% of the causesβ ββππ£ππ₯π βπ£πππππ‘ππ
βNothing ever gets built on schedule or within budgetβ β βπππ π‘π€ πππ¨
βAnything that can go wrong will go wrongβ β ππ¦π£π‘ππͺβπ€ πππ¨
βI have always found that plans are useless, but planning is indispensableβ β π»π¨ππππ₯ πΌππ€ππππ π¨ππ£
On Estimation & Time Management
βThe first 90% of the code accounts for the first 90% of the development time. The remaining 10% of the code accounts for the other 90% of the development timeβ β ππ π βππ£ππππ
βThe time from now until the completion of the project tends to become constantβ β βππ£π₯π£ππβπ€ πππ¨
βWork expands to fill the time available for its completionβ β βππ£ππππ€π πβπ€ πππ¨
βIt always takes longer than you expect, even when you take into account Hofstadterβs Lawβ β βπ ππ€π₯πππ₯ππ£βπ€ πππ¨
βThereβs never enough time to do it right, but thereβs always enough time to do it overβ β ππππ πΉππ£ππππ
On Requirements
βWalking on water and developing software from a specification are easy if both are frozenβ β πΌππ¨ππ£π πΉππ£ππ£π
βThe user will never know what they want until after the system is in production (and maybe not even then)β β βπ¦ππ‘ππ£ππͺβπ€ πππ¨
βIt is easier to change the specification to fit the program than vice versaβ β πΈπππ βππ£πππ€
βThe more stable a requirement is considered, the greater the probability it is changedβ β βπππ€πππππ£πβπ€ βπ£πππππ‘ππ
βIncreasing the number of choices will increase the decision time logarithmicallyβ β βπππβπ€ πππ¨
βA man with a watch knows what time it is. A man with two watches is never sureβ β πππππβπ€ πππ¨
On Architecture & Design
βHiring people to write code to sell is not the same as hiring people to design and build durable, usable, dependable softwareβ βπππ£π£πͺ βπ ππ€π₯πππ₯πππ
βThe hardest part of the design is β¦ keeping features outβ β π»π ππππ βπ π£πππ
βA software system built on top of a weak architecture will sink due to the weight of its successβ β πππ πΈπ£πππππππππ βπ£πππππ‘ππ
βBefore software can be reusable it first has to be usableβ β βπππ‘π ππ πππ€π π
βA complex system that works is invariably found to have evolved from a simple system that workedβ β πΎπππβπ€ πππ¨
On Writing Bug-Free Code
βThe cheapest, fastest, and most reliable components are those that arenβt thereβ β πΎπ π£ππ π πΉπππ
βIf debugging is the process of removing software bugs, then programming must be the process of putting them inβ β πΌππ€πππ£ π»ππππ€π₯π£π
βDeleted code is debugged codeβ β ππππ ππππππ
βBugs lurk in corners and congregate at boundariesβ β πΉπ π£ππ€ πΉπππ«ππ£
βThere are two ways to write error-free programs; only the third one worksβ β πΈπππ βππ£πππ€
On Programming
βIncreasing the efficiency with which a resource is used increases the usage of that resourceβ β πππ§π πβπ€ βππ£πππ π©
βIf you automate a mess, you get an automated messβ β βπ π πππππππ
βA good programmer is someone who always looks both ways before crossing a one-way streetβ β π»π π¦π ππππππ£
βAny code of your own that you havenβt looked at for six or more months might as well have been written by someone elseβ β πΌπππππ€π πβπ€ πππ¨
βOne manβs crappy software is another manβs full-time jobβ β πππ€π€πππ πΎππ€π₯π π
On Technology
βWe tend to overestimate the effect of a technology in the short run and underestimate the effect in the long runβ β βπ πͺ πΈπππ£π
βAny sufficiently advanced technology is indistinguishable from magicβ β βπππ£ππβπ€ ππππ£π πππ¨
βInstitutions will try to preserve the problem to which they are the solutionβ β βπππͺ ππππ£ππͺ
βItβs a curious thing about our industry: not only do we not learn from our mistakes, but we also donβt learn from our successesβ β ππππ₯π πΉπ£πππ₯ππ¨πππ₯π