How to blog An Article by Tom MacWright macwright.com Own your domain and use simple technology Never change the technology Write something on a schedule Never change the technology Things Learned Blogging blogging
Hacking is the opposite of marketing An Article by Tom MacWright macwright.com One of my favorite definitions of “hacking” is the creative reuse of tools for new and unexpected purposes. Hacking is using your email account as a hard drive, using your bicycle seat to open a beer, using Minecraft’s red bricks to create a calculator in the game. The opposite of hacking is marketing. Marketing tells you that this particular non-stick pan is the pan you’ll use to make omelettes, and you’ll do it in the morning dressed in fashionable clothing in a nice kitchen. It includes a photo and inspirational copywriting to drive this home. Marketing dictates a style, context, and purpose for even the most general-purpose products. This narrative needs to be specific so that you can readily imagine it: it’s you, in an Airbnb, laughing with friends. All sorts of ways to use the machineIn ways you didn't anticipateStretching the product toolsadvertisingcreativityutility
The return of fancy tools An Article by Tom MacWright macwright.com Technology is seeing a little return to complexity. Dreamweaver gave way to hand-coding websites, which is now leading into Webflow, which is a lot like Dreamweaver. Evernote give way to minimal Markdown notes, which are now becoming Notion, Coda, or Craft. Visual Studio was “disrupted” by Sublime Text and TextMate, which are now getting replaced by Visual Studio Code. JIRA was replaced by GitHub issues, which is getting outmoded by Linear. The pendulum swings back and forth, which isn’t a bad thing complexitysimplicitytoolssoftwaretechnologynotetaking
Picking better names for variables, functions, and projects An Article by Tom MacWright macwright.com Avoid weasel words Follow patterns religiously Don’t cheap out on characters Call things the same thing Don’t name internal projects When things change, change their names namescode
A Plea for Lean Software An Essay by Niklaus Wirth cr.yp.to Software's girth has surpassed its functionality, largely because hardware advances make this possible. The way to streamline software lies in disciplined methodologies and a return to the essentials. Measured by the number of its featuresEssential vs. nice to haveDependence is more profitable than educationThe most rewarding iterationsNever enough time A grossly obese set of requirementsFeatures and complexity softwareperformancefunction
Measured by the number of its features A primary cause of complexity is that software vendors uncritically adopt almost any feature that users want. Any incompatibility with the original system concept is either ignored or passes unrecognized, which renders the design more complicated and its use more cumbersome. When a system's power is measured by the number of its features, quantity becomes more important than quality. Every new release must offer additional features, even if some don't add functionality. featuresqualitycomplexity
Essential vs. nice to have Customers have trouble distinguishing between essential features and those that are just "nice to have." Examples of the latter class: those arbitrarily overlapping windows suggested by the uncritically but widely adopted desktop metaphor; and fancy icons decorating the screen display, such as antique mailboxes and garbage cans that are further enhanced by the visible movement of selected items toward their ultimate destination. These details are cute but not essential, and they have a hidden cost. / Increased complexity results in large part from our recent penchant for friendly user interaction. I've already mentioned windows and icons; color, gray-scales, shadows, pop-ups, pictures, and all kinds of gadgets can easily be added. Menus, Metaphors and Materials: Milestones of User Interface Designlittlebigdetails interfacesux
Dependence is more profitable than education A customer who pays—in advance—for service contracts is a more stable income source than a customer who has fully mastered a product's use. Customer dependence is more profitable than customer education. What I find truly baffling are manuals—hundreds of pages long—that accompany software applications, programming languages, and operating systems. Unmistakably, they signal both a contorted design that lacks clear concepts and an intent to hook customers. The design concept documentation
The most rewarding iterations Initial designs for sophisticated software applications are invariably complicated, even when developed by competent engineers. Truly good solutions emerge after iterative improvements or after redesigns that exploit new insights, and the most rewarding iterations are those that result in program simplifications. Evolutions of this kind, however, are extremely rare in current software practice—they require time-consuming thought processes that are rarely rewarded. Instead, software inadequacies are typically corrected by quickly conceived additions that invariably result in the well-known bulk. So that you can get feedback on it and make it betterTo anticipate all the uses and abuses agileiteration
Never enough time Time pressure is probably the foremost reason behind the emergence of bulky software. The time pressure that designers endure discourages careful planning. It also discourages improving acceptable solutions; instead, it encourages quickly conceived software additions and corrections. Time pressure gradually corrupts an engineer's standard of quality and perfection. It has a detrimental effect on people as well as products. Deadlines are bullshitThe Thing-deadline calculus