https://www.baldurbjarnason.com/2022/theory-building/ * Essays * Newsletter * Ebook * Contact Baldur Bjarnason Web dev at the end of the world, from Hveragerdi, Iceland I'm available as a consultant and for coaching. I also have a book out. 16 November 2022 Theory-building and why employee churn is lethal to software companies (What follows is an extract from Out of the Software Crisis) --------------------------------------------------------------------- Programming as theory-building The building of the program is the same as the building of the theory of it by and in the team of programmers. During the program life a programmer team possessing its theory remains in active control of the program, and in particular retains control over all modifications. The death of a program happens when the programmer team possessing its theory is dissolved. A dead program may continue to be used for execution in a computer and to produce useful results. The actual state of death becomes visible when demands for modifications of the program cannot be intelligently answered. Revival of a program is the rebuilding of its theory by a new programmer team. Programming as Theory Building (Peter Naur, 1985) Software is a temporary garden whose fate is inextricably intertwined with its gardeners. Beyond that, software is a theory. It's a theory about a particular solution to a problem. Like the proverbial garden, it is composed of a microscopic ecosystem of artefacts, each of whom has to be treated like a living thing. The gardener develops a sense of how the parts connect and affect each other, what makes them thrive, what kills them off, and how you prompt them to grow. The software project and its programmers are an indivisible and organic entity that our industry treats like a toy model made of easily replaceable lego blocks. They believe a software project and its developers can be broken apart and reassembled without dying. What keeps the software alive are the programmers who have an accurate mental model (theory) of how it is built and works. That mental model can only be learned by having worked on the project while it grew or by working alongside somebody who did, who can help you absorb the theory. Replace enough of the programmers, and their mental models become disconnected from the reality of the code, and the code dies. That dead code can only be replaced by new code that has been 'grown' by the current programmers. A successful software project is grown from a small living thing to a larger living thing. Building the project large from the start and will never come to life. Replacing the gardeners that brought it to life will lead it to whither. Most of our errors with software development are category errors. We treat these software projects as one kind of animal when they are a different species entirely. They are grown thought-stuff. We're treating them like lego blocks. This is why the Stock that code provides to a software development system isn't the code itself but the value the code represents. That value depends on how well it is understood by the team that needs to fix, improve, and modify it. It depends on the stability of the underlying language and platform. It depends on how often it needs to be rewritten or modified to continue to function normally as its dependencies change. Code isn't valuable in and of itself. Code can be a liability. What you want is code that has value and whose value depreciates slowly. Misunderstanding the nature of software development will increase project failures. Going against the grain of software development makes catastrophe more likely, much like how the wrong type of wood, steel, or concrete will lead a bridge to collapse. Software is the insights of the development team made manifest. Software has no life on its own but exists as a kind of cyborg simultaneously in the programmers and the code. To reuse Donna Haraway's words, software is simultaneously fiercely material and irreducibly imaginary (p. xii, Gray 1995). Software can be real and unreal at the same time. The written code is how software interacts with end users and other software systems. The insights and knowledge that exist in the minds of the developers are how software lives, changes, and grows. Without the code, it has no way to interact with the real world. Without the knowledge in the minds of the developers, it has no way to adapt and survive. Documentation only works up to a point because it can both get out of sync with what the code is doing and because documenting the internals of a complex piece of software is a rare skill. A skill that most developers don't possess. Most internal documentation only begins to make sense to a developer after they've developed an internal mental model of how it all hangs together. Most code documentation becomes useful after you have built the theory in your mind, not before. It operates as a mnemonic for what you already know, not as a tool for learning. This has practical implications for software projects. The first is that it's a partial explanation for bitrot, the phenomenon where working software seems to deteriorate even when the code is untouched. Sometimes bitrot is straightforward: the platform or dependencies has been updated. The code "rots" because its context has changed. But sometimes bitrot happens because the programmers have changed. Memory is fallible. The mental model that a programmer has integrated about a particularly convoluted piece of code can fade away. The coder returns to the code after a period, and it no longer makes sense. The programmer no longer has a cohesive, integrated theory about that part of the software which means it has to be replaced. This can happen in the other direction as well. The programmer revisits a module after working on other parts of the software. That work has left them with a sharper, more accurate theory of the software. Now they realise the original module didn't fit in with the rest and, with their improved insight, see that if left untouched the old module would become a source of friction, bugs, and defects. The code didn't change, but the programmer did. The code rotted because the programmer changed. Team structure and churn Another consequence of the theory-building model has to do with team structure and churn. The most reliable method a programmer has for building an accurate 'theory' of a piece of software is to have been there when it was first written. That programmer will have the best understanding of how the various components interact, how best to change any given part, how to minimise bitrot, and which pieces of code are actually unused. This is the first generation programmer. The second-generation programmer--the second best method for building an accurate theory of the code--is somebody who worked on the code with somebody who was there when it was first written. Whenever you encounter unfamiliar code or modules that don't make sense, you have a first-generation developer on hand to help you understand--help you develop a mental model of how it all fits together. Over time, the proportion of the code written during your tenure will grow until you have effectively become a first generation programmer. Team stability is vital for software development. Each team needs to be composed of a majority of first-generation developers. Too many second-generation developers and the first generation gets overwhelmed, and work stalls. The work slows down either because too many core tasks are waiting on the first generation or because the second generation keeps having to rewrite components from scratch because they didn't understand the theory behind the original component. Too few second-generation developers and there is no renewal--each developer that leaves the team is a potential catastrophe. Many teams in the industry constantly rewrite parts of their code. Not because they keep figuring out better ways of approaching the problem but because nobody on the team has an accurate mental model for how it works and how the code fits in with the rest. If you can't hold onto the original team, if you grow the team too quickly, you end up running to stay in place. Code keeps getting written without any improvements of substance to the software itself. The various different software processes will do little to counter these issues on their own. This is a team management issue that can only be addressed by a manager who understands the fundamental nature of software development. There is no magic development process that will prevent these problems. It takes skill. Churn is destructive Constant churn in a software development team, both among the programmers and designers, is absolutely devastating. It is the death knell for a software project. Makes deadlines meaningless. It turns software into a disposable, single-use product like a paper towel. Anything that increases team member churn threatens the very viability of the project and the software it's creating. --------------------------------------------------------------------- Out of the Software Crisis Out of the Software Crisis by Baldur Bjarnason Software projects keep failing, not because we don't have the right team or tools but because our software development system is broken. Out of the Software Crisis is a guide to fixing your software projects with systems-thinking making them more resilient to change and less likely to fail. Systems-Thinking For Software Projects Great apps are rare WTF is a Framework? Join the Newsletter Managing the Web Dev Crisis, a newsletter by Baldur Bjarnason [ ] Subscribe We won't send you spam. Unsubscribe at any time. Built with ConvertKit Archive Writing * Out of the Software Crisis Available on Kindle 28 December 2022 * A lot can happen in a month: on AI art and the fediverse 16 December 2022 * The response to Out of the Software Crisis has been amazing 5 December 2022 * Programming is a Pop Culture 21 November 2022 * WTF is a Framework? 18 November 2022 * Theory-building and why employee churn is lethal to software companies 16 November 2022 * Great apps are rare 15 November 2022 * (Released!) Out of the Software Crisis: Systems-Thinking for Software Projects 14 November 2022 * Out of the Software Crisis: the ebook is imminent! 11 November 2022 * I wrote a book - now you must suffer with me 26 October 2022 * I'm offering research, writing, and notetaking coaching for techies and programmers 17 October 2022 * Playacting genius: the performative logic of reasoning from first principles 18 September 2022 * I don't care how you web dev; I just need more better web apps 4 July 2022 * Essay Archive 2 June 2022 * On online collaboration and our obligations as makers of software 2 June 2022 * The different kinds of notes 6 May 2022 * What I learned about markdown from interviewing a bunch of people 6 May 2022 * The Colophon Cards User Survey 2 February 2022 * How to keep up with web development without falling into despair 31 January 2022 * Let's just not talk about 2021 and look forward instead 5 January 2022 * Making Colophon Cards 29 November 2021 * What do I need to read to be a great at CSS? 19 October 2021 * The event listening toolkit: five ways to get out of an event handling mess 11 October 2021 * FormData and fetch, why is serialising a form such a pain? 29 September 2021 * The Single-Page-App Morality Play 6 September 2021 * Software Crisis 2.0 25 August 2021 * Lessons in Interactivity, 2021 redux 13 August 2021 * Nobody gives a hoot about groupthink 29 July 2021 * Spontant: in praise of grey 26 July 2021 * Ways of reading without the influence of community 6 July 2021 * The Open-Source Software bubble that is and the blogging bubble that was 11 May 2021 * You are what you do, not what you say or write 4 May 2021 * The Curious Case Of The Crashing Conic Gradient And How I Used A Technique I Learned In The 90s To Fix It 28 April 2021 * 136 facts every web dev should know before they burn out and turn to landscape painting or nude modelling 21 April 2021 * I'm available for projects and other work 20 April 2021 * Which type of novelty-seeking web developer are you? 31 March 2021 * Managing the Web Dev Crisis 17 October 2020 * Every Day; a Fair Warning (You Should Read These Articles) 3 March 2020 * Weeknote 3 - Resistance and the dull blade 10 February 2020 * Weeknote 2 (2020) - News, Bad News, and Star Wars 2 February 2020 * Weeknote 1 (2020) - Ending the hiatus 26 January 2020 * The Ed Tech Conundrum 2 January 2020 * Thinking about the past, present, and future of web development 1 January 2020 * The Web Falls Apart 3 November 2019 * Weeknote 19 - blog redesign and changes at work 27 October 2019 * When life hands you lemonades, sit down and contemplate the meaning of life 10 September 2019 * Weeknote 18 - Uncertainty and Discomfort 11 August 2019 * Web Dev: The Red Queen Wire Mommy of Modern Tech 6 August 2019 * Weeknote 16 - Vacation 29 July 2019 * Weeknote 15 - Counting Down the Days 1 July 2019 * Weeknote 14 - Shadows and DOMs 25 June 2019 * Weeknote 13 - The weight of deadlines 16 June 2019 * That Web Dev Thing Where Everybody Says Something Clever Involving Toast 15 June 2019 * SwiftUI, Privacy, macOS, and the Web 9 June 2019 * Weeknote 12 - The genres of web media 5 June 2019 * The Aesthetics of Concentration 3 June 2019 * Weeknote 11 - do I have focus? 29 May 2019 * Weeknote 10 - A clear view and more reading 20 May 2019 * Weeknote 9 - Being contemplative, finishing a photo project 12 May 2019 * Weeknote 8 - Moving, Endgame, and more musings on colour 5 May 2019 * Weeknote 7 - Story length and that thing about colour 29 April 2019 * Weeknote 6 - Star Trek, rest and spring finally arrives 22 April 2019 * Weeknote 5 - Stuff, comics, superheroes, and other nonsense 14 April 2019 * Weeknote 4 - TV week with The Expanse 7 April 2019 * Weeknote 3 -- MVPs, fatigue, and emotional crutches 31 March 2019 * Web Development: with great power comes the ability to make great mistakes 24 March 2019 * Weeknote 2 - Web Development Mistakes, Mary Sues, and Icy Spring 24 March 2019 * Weeknote 1 18 March 2019 * Hitchcock and the author construct 12 February 2019 * Seams, Stitches, And The Decline Of The Mac 3 November 2018 * Neither Paper Nor Digital Does Active Reading Well 3 September 2018 * Focusing on market share blinds you to growth 7 January 2018 * The future of Software Development: Just Business Logic 7 January 2018 * Remote work is a completely different beast 7 January 2018 * Hypertext is still the fundamental model of the web 7 January 2018 * Leftover Thoughts From 2017 7 January 2018 * Over-engineering is under-engineering 25 November 2017 * The process is the thing 23 March 2017 * Von Be Don: A few notes on a recent digital publishing project in Iceland 19 February 2017 * W3C and EME: it isn't about preventing DRM but saving the W3C 14 February 2017 * Unpopular opinion: dismissing indirect pointers is a mistake 4 February 2017 * Anger feels like poison 24 January 2017 * Is JavaScript more fragile? 7 December 2016 * Debating Progressive Enhancement 5 December 2016 * The downside of believing in Apple 1 November 2016 * A short primer on Icelandic politics on the day of the 2016 election 29 October 2016 * The Tragedy/Farce of the Open Web according to journalists 18 October 2016 * Notes on debating for the web development community 17 October 2016 * Addendum on loose coupling and the iOS App Store 11 October 2016 * Idle thoughts on modularity and loose coupling in digital media 9 October 2016 * When fear is rational 24 June 2016 * Once upon a time, I couldn't imagine a better word processor than Word 7 June 2016 * A thought to consider 24 May 2016 * A few thoughts on standardisation, W3C, and the IDPF 16 May 2016 * Filling in the gaps - the dynamics of zero marginal cost 21 April 2016 * Which CMS/blog system would you choose? 12 April 2016 * A few simplified points on web and document security 30 March 2016 * Judge the work 21 January 2016 * Why did Paul Graham argue against equality? 13 January 2016 * Purpose, Joy, Capability 4 January 2016 * You can't fix the App Store, so here's how you fix it 20 November 2015 * Why I am worried about Twitter and why you should be too 4 November 2015 * The crossroads or the wilderness 23 October 2015 * You can't solve people problems with software 28 September 2015 * The discussion about ad blocking is very dumb (but not in the way you think) 18 September 2015 * This is not a book, but it is a podcast 10 September 2015 * A week of 'This is not a book' 7 September 2015 * Launching "This is not a book" - what it is and why you should be interested 1 September 2015 * My kingdom for a new bookstore 28 August 2015 * Modern software sucks 26 August 2015 * The cost versus benefits of disorganised programming power 25 August 2015 * Who benefits the most from Open Source Software? 25 August 2015 * Sex Apocalypse Later 24 August 2015 * Random thoughts on work and that Amazon thing 23 August 2015 * Bookmarks - UI flaws and other great capers 14 August 2015 * Bookmarks - learnable programming 13 August 2015 * Bookmarks - More money for open-source 12 August 2015 * Bookmarks - Leaving bosses 11 August 2015 * Bookmarks - Promoting other people's work 10 August 2015 * Bookmarks - What Would Kamala Khan Do? 7 August 2015 * Bookmarks - Trickle down golden geese 6 August 2015 * Bookmarks - Hateviews are us 5 August 2015 * Bookmarks - Milk it 4 August 2015 * Iterating the web away: losing the next generation 4 August 2015 * Bookmarks - You haven't been paying attention 3 August 2015 * Bookmarks - It's a note card world, we just live in it 31 July 2015 * Bookmarks - Just call it Smylfeste 30 July 2015 * Bookmarks - That one is shaped like an idiot 29 July 2015 * Blogger nostalgia 28 July 2015 * Bookmarks - Make it simpler 28 July 2015 * Wet streets cause rain and criminal responsibility 27 July 2015 * Tweet bookmarks galore 26 July 2015 * Random links that catch my fancy, part four of [?] 23 July 2015 * Random links that catch my fancy, part three of [?] 22 July 2015 * Mythic visions of sexuality 21 July 2015 * Random links that catch my fancy, part two of [?] 21 July 2015 * Random links that catch my fancy, part one of [?] 20 July 2015 * An exercise for the reader in integration and modularity 17 July 2015 * How to read my nonsense 17 July 2015 * Is it distributed or just a disorganised hierarchy? 10 July 2015 * On the vaunted robustness of the web 10 July 2015 * The rules of the game have changed for RSS 10 July 2015 * The web app developer's lament 6 July 2015 * Other people write about digital media 25 June 2015 * The plural of 'Medium' is clearly 'clusterfuck' 25 June 2015 * Burnout 24 June 2015 * The files Steven Pressfield works with 24 June 2015 * iOS 9 content blocking extensions are not a mobile advertising armageddon 14 June 2015 * Writing the Other: a book that's useful to all writers 3 June 2015 * Should I make a WWDC prediction? Yes, let's 3 June 2015 * Grim Meathook Present #2 2 June 2015 * Other people discuss software quality (spoiler: it sucks) 2 June 2015 * Other people talk about startups and entrepreneurship 2 June 2015 * A few quick links and thoughts on big web problems 29 May 2015 * I really want the Supergirl TV show to be fun 25 May 2015 * Our Grim Meathook Present 25 May 2015 * The new age of HTML: the web is being torn apart 20 May 2015 * Her movie, his name; Mad Max: Fury Road 19 May 2015 * We are a violent species 19 May 2015 * Toxic environments: inequality in tech is a symptom of something worse 18 May 2015 * Where I write about Facebook's Instant Articles 16 May 2015 * Facebook and the media: united, they attack the web 15 May 2015 * Speeding up decision cycles with rules and heuristics 14 May 2015 * You are here #5: UX, design, and CSS as a parasite 14 May 2015 * You are here #4: an epic journey through app dev and male bodies 13 May 2015 * You are here #3: the glorious wonders of online reading await you 12 May 2015 * 2015-05-11-18-39-16 11 May 2015 * You are here #2: an artisanal curation of reading material 11 May 2015 * You are here #1: a selection of fine links and tweets for your pleasure 10 May 2015 * 2015-05-07-00-59-18 7 May 2015 * Five publishing-related thoughts on a Friday afternoon 4 May 2015 * Why should people read more books? 4 May 2015 * How is taxing ebooks as print books supposed to work? 4 May 2015 * Kathy Sierra's Badass: Making Users Awesome - the book you all should read 4 March 2015 * Idle Sunday thoughts about web trends 1 March 2015 * Repetition only works in fiction 1 March 2015 * The web has covered the basics -- that's why it'll get harder from now 1 March 2015 * A draft of a chapter of some thoughts on things. 9 January 2015 * Taking stock of 2013 and 2014 31 December 2014 * The weather, of course 17 December 2014 * Publishing business ideas are a dime a dozen 3 December 2014 * EU VAT changes shift the digital landscape 25 November 2014 * Money is a poor measure of value 25 November 2014 * On conferences 13 November 2014 * Crushed by multinationals 12 November 2014 * Software as a strategy: prefabricated publishers 7 November 2014 * Software as strategy in the ebook world 6 November 2014 * The five types of unpublished books 5 November 2014 * Four hundred words from Anita Elberse's book "Blockbusters" 4 November 2014 * The splintered author 4 November 2014 * There is no war between Amazon and Traditional Publishing 3 November 2014 * Ebooks suck for learning 10 October 2014 * The Poisoning of Social Media: A Reading List 9 September 2014 * Wobbly Amazon 10 August 2014 * This week's must-read post 24 July 2014 * Friends don't let their friends become authors 10 July 2014 * Both at the same time 4 July 2014 * So I had to make an ebook cover... 15 April 2014 * So long, Readmill, and thanks for all the fish 31 March 2014 * What ebook production problems are self-publishers facing? 24 March 2014 * Many stories, many truths 13 March 2014 * Problem statements for digital publishing research 28 February 2014 * To do, to do 21 February 2014 * iBooks Author tempts you with bling 20 February 2014 * Microsoft Word is a liability 19 February 2014 * The print design mentality 18 February 2014 * Book contracts 12 February 2014 * Intermission: sorting through the banal 5 February 2014 * How to create value with a new thing 30 January 2014 * HTML is too complex 29 January 2014 * The ebook as an API 28 January 2014 * My last word on DRM 27 January 2014 * Except, except, except 23 January 2014 * A thought exercise 22 January 2014 * Losing faith in yourself 21 January 2014 * Changing your readership mix 20 January 2014 * Sex, education, readers, and futures: what works, what doesn't 18 January 2014 * The various types of readers 17 January 2014 * The unevenly distributed ebook future 16 January 2014 * Sex, violence, and stilbrot 15 January 2014 * Recipe for pundit response to Hugh Howey's suggestions 14 January 2014 * Bling it up for education 13 January 2014 * Blogging has trained me to assume you're stupid 9 January 2014 * Ergodic literature 8 January 2014 * What I thought I wanted versus what I really wanted 7 January 2014 * The mistake of 'enhancing' novels 6 January 2014 * Pessimistic ramblings and other fun links (week overview + further reading) 4 January 2014 * Stumbling into publishing 3 January 2014 * The publishing industry's new product categories 2 January 2014 * The last two Knights and Necromancers stories 1 January 2014 * Random, loosely connected, thoughts on the future 31 December 2013 * Old photos posted without context: Reykjavik Cats 29 December 2013 * Old photos posted without context: Sweep After Use 22 December 2013 * The Checklist: fix iBooks image handling 20 December 2013 * Great text transcends nothing 17 December 2013 * Quarantine all ebooks 17 October 2013 * The self-publisher's perspective of the ebook market 17 October 2013 * Light evening trauma 10 October 2013 * Just say no to ebook CSS and JS 2 October 2013 * The Google Wave Heuristic 17 September 2013 * Amazon's biggest ally is Apple 12 September 2013 * Readmill versus Kindle - Readmill is worth the hassle 26 August 2013 * Proprietary ebook formats versus DRM 19 August 2013 * Publishing has catered to dumb for a long while 16 August 2013 * Computers are too difficult and people are computer illiterate 14 August 2013 * Why disruption goes unchecked 12 August 2013 * Make ebooks worth it 9 August 2013 * Ebooks and cognitive mapping 8 August 2013 * Ebook silos, update 7 August 2013 * Ebook silos and missed opportunities 6 August 2013 * Technology is not inherently good 5 August 2013 * Administrative note on baldurbjarnason.com and feeds 29 July 2013 * Posted without comment 29 July 2013 * The inefficiencies of joy 24 July 2013 * Winner takes all versus the Matthew effect 23 July 2013 * What you people read (on my websites) 22 July 2013 * Tolerating the heat, noticing the water 19 July 2013 * If the Kindle fails so will ebooks 18 July 2013 * Followup to 'this ebook is a lemon' 16 July 2013 * This ebook is a lemon 12 July 2013 * Caught between madmen and mercenaries 10 July 2013 * Major update to Studio Tendra's Oz project 3 July 2013 * What are self-publishing's biggest pain points? 1 July 2013 * Intellectual terrain 1 July 2013 * Good books don't win 26 June 2013 * Why does it matter? 10 May 2013 * The OZ Reading Club: Books three and four 7 May 2013 * Which kind of innovation? 3 May 2013 * Books and Print Showcase 2 May 2013 * Peasants 30 April 2013 * For the love 14 April 2013 * The idiocies of young men 5 April 2013 * Studio Tendra's grand and marvellous Oz Reading Club 2 April 2013 * Iceland's 'crowd-sourced' constitution is dead 29 March 2013 * The B&N fallacy 27 February 2013 * Hire me! 19 February 2013 * A question only you can answer 15 February 2013 * Respect the reader 6 February 2013 * 33 observations on the year 2012 5 February 2013 * Knights and Necromancers: new books and megapacks! 4 February 2013 * The falcon's shriek 2 January 2013 * What is actually going on in Iceland 29 December 2012 * Merry Christmas! 25 December 2012 * Tag soup is history 21 December 2012 * Schlock 15 December 2012 * Strange definitions of 'nice' 5 December 2012 * Books of Christmas Past 4 December 2012 * Using IDs in CSS 26 November 2012 * Design highlights from the Icelandic book season 22 November 2012 * News, updates, and the Icelandic book market 19 November 2012 * A response, of sorts 15 November 2012 * High tide and a room of your own 8 November 2012 * Knights and Necromancers 2 has been released 6 November 2012 * The comment-fiction challenge post-mortem 30 October 2012 * Fantasy, Collapse, and a sense of history 29 October 2012 * Two questions on putting books on the web 26 October 2012 * iBooks 3.0 25 October 2012 * Perceptions of society 22 October 2012 * What I've been up to 19 October 2012 * The Readmill comment fiction challenge 1 October 2012 * Is it safe? 27 September 2012 * The time work takes 24 September 2012 * I need your help 21 September 2012 * Designing the covers 19 September 2012 * Free Kindle version 19 September 2012 * What is this? 17 September 2012 * The stillborn creature 1 August 2012 * EPUB javascript security 27 July 2012 * I be writing 21 July 2012 * Farce 16 July 2012 * Bad writing 19 June 2012 * A few random points on DRM 7 June 2012 * The web and ebooks have little in common 7 May 2012 * The end of ebook development 26 April 2012 * Aftermath - notes on the Amazon post 20 April 2012 * Today is not tomorrow (or, how to beat Amazon) 15 April 2012 * Bits, bobs, and anecdata 3 April 2012 * Lessons in interactivity 29 March 2012 * Hierarchies of ebook design 20 March 2012 * It's time to treat ebook developers as developers 12 March 2012 * Code doesn't change minds 7 March 2012 * Game over, Amazon wins 3 March 2012 * On CSS Page Templates 2 March 2012 * Javascript in ebooks 29 February 2012 * Explanatory windows 20 February 2012 * Readium and other good intentions 13 February 2012 * ePub windows and widgets - a proposal 10 February 2012 * The semantics of ebook widgets 4 February 2012 * iBooks widgets - to javascript or not to javascript 1 February 2012 * What do we want from the Kindle platform? 1 February 2012 * Disruptive crap 27 January 2012 * Me, elsewhere 26 January 2012 * The pros and cons of the iBooks 2.0 textbook format 21 January 2012 * The iBooks 2.0 built-in widgets 20 January 2012 * The iBooks 2.0 textbook format 19 January 2012 * The publishing animal 17 January 2012 * A day of innovation on the future of the book 8 December 2011 * What a publisher does 30 November 2011 * Design pseudoscience 8 November 2011 * A tale of three blog posts 28 October 2011 * CSS and ebook design 24 October 2011 * The loss of ambient intimacy 15 September 2011 * Friday links and reading 26 August 2011 * Convert or engage 4 August 2011 * CSS3 Hyphens 30 July 2011 * Just you & Google 29 July 2011 * Knowledge is not adoption 24 July 2011 * HTML5 history API 23 July 2011 * Your friends, in boxes 17 July 2011 * Localstorage & messaging in ePub 27 January 2011 * Javascript in epub 26 January 2011 * An epub experiment 25 January 2011 * What is an ebook? 21 December 2010 * Hypotheses and testing 25 October 2010 * Identifying publishing innovators 7 October 2010 * On quality in publishing 7 October 2010 * An interesting discussion 28 June 2010 You can also find me on Mastodon and Twitter