by zenkat on 2/6/22, 1:16 AM with 124 comments
by mdaniel on 2/6/22, 3:16 AM
by kqr on 2/6/22, 7:51 AM
Automation is great when it replaces a stable, well-working manual process.
The way to introduce automation is to first experiment with humans doing something manually until you have a great process. Then take the dumbest, most reliable part of that and turn it into a computer program that alerts a human if it encounters an edge case.
Try not to handle edge cases in the software, but try to remove them from the greater system in which they occur.
Automate by elimination, not by complexity.
Good books in this vein would be anything with Taiichi Ohno in the title, or, perhaps better, as the author.
by kqr on 2/6/22, 6:51 AM
A lot of the things we build into our software is complexity nobody really needs. One way of managing it is by never making it in the first place. This takes at least two things:
- Thorough discussion with the customer about what problem they really are trying to solve. They will come to you with what they think is the solution. That way leads unnecessary complexity.
- Rough economical analysis of choices. Often we do things because that's what one ought to do. Make a quick napkin calculations. A lot of the things one ought to do are not actually necessary.
There are way too many books to recommend here, but perhaps some of the most relevant are
- Deming's The New Economics, and Out of the Crisis,
- Reinertsen's Principles of Product Development Flow,
- Ward's Lean Product and Process Development.
by zenkat on 2/6/22, 5:42 PM
From my perspective, the top "must-reads" are:
-- John K Ousterhout, A Philosophy of Software Design
-- Titus Winter (et al), Software Engineering at Google
-- Hanson and Sussman, Software Design for Flexibility
Other interesting titles that caught my eye:
-- Peter Naur, Programming as Theory Building
-- Scott Wlaschin, Domain Modeling Made Functional
-- Yehonathan Sharvit, Data-Oriented Programming: Unlearning objects (upcoming)
-- Nick Tune, Patterns, Principles, and Practises of Domain Driven Design
-- Robert L. Glass, Facts and Fallacies of Software Engineering
-- Donald Reinertsen, The Principles of Product development Flow
-- Eric Normand, Grokking Simplicity
by jupp0r on 2/6/22, 2:36 AM
by blowski on 2/6/22, 9:05 AM
1. Figure out the difference between your inherent and accidental complexity. The Cynefin framework can be a useful way of thinking about what types of complexity you have.
2. Attempt to reduce (or remove) the complexity at root before assuming you must model it. "The biggest tragedy in business is doing well that which should not be done at all." For example, we had an important user still on a legacy browser because they couldn't afford to upgrade their old laptop. Instead of adding a complicated legacy layer, we bought them a new laptop.
3. Think of the whole system, rather than just shifting the burden somewhere else within the system. This is why microservice architectures so often fail - engineers think they've reduced complexity because each service is so simple. Yet all they've done is move the complexity into the operational layer, where it's harder to deal with. Gerald Weinberg is a fun writer in this space.
4. In many organisations, a lot of people's salaries depend on their ability to add complexity, especially to processes but also to code. If you are working within such an organisation, you will have a Sysiphian task until you solve the organisational problem. Whether you can solve this problem depends on how much influence you have. This is why "skunkworks" projects so often work until they are re-integrated into the mainstream.
5. Once you've sorted out the organisational complexity, separated the inherent and accidental complexity, you'll be most of the way there. Keep reviewing and challenging everything. Complexity is a weed that just seems to grow unless you constantly tend to the garden.
by pluggles on 2/6/22, 3:16 AM
The entire focus of the book is reducing complexity.
by adamddev1 on 2/6/22, 7:22 AM
[1]: https://htdp.org/
by Twisol on 2/6/22, 3:21 AM
by froh on 2/6/22, 9:26 AM
https://books.google.de/books/about/The_Principles_of_Produc...
It motivates small batch sizes, decision making at ground level, short cycle times, all the mechanics behind kanban, scrum, XP, without ever using any of their jargon.
And it moves up into economics by explaining e.g. cost of delay as a metric guiding useful decision making.
The book eatablishes a wonderful shared understanding of the principles underlying lean and agile, why they work and how to make them work, shared understanding between engineering and management.
by bear8642 on 2/6/22, 2:35 AM
by MoritzWall on 2/6/22, 3:07 AM
Clean Architecture: A Craftsman’s Guide to Software Structure and Design https://www.oreilly.com/library/view/clean-architecture-a/97...
Organizational perspective:
An Elegant Puzzle: Systems of Engineering Management by Will Larson https://press.stripe.com/an-elegant-puzzle
by deltaonefour on 2/6/22, 9:28 AM
Organization is just a name for a group of methodologies. Ultimately what we want is the right way to organize programs for maximum flexibility.
by fred123 on 2/6/22, 9:00 AM
by rramadass on 2/6/22, 12:51 PM
For Software specific issues i highly recommend David Parnas' collected papers in the book Software Fundamentals. He and his colleagues defined much of what is mainstream in today's Software Architecture/Organization practice.
Finally, the case studies given here are a great source of insights: https://aosabook.org/en/index.html
by yuppie_scum on 2/6/22, 1:29 AM
The Phoenix Project. The DevOps Handbook. The Google SRE Book. And “Kill It With Fire.”
by ncfausti on 2/6/22, 9:41 AM
You want to minimize side-effects, preferring computations over them, and data over computations.
I’m still early into it, however, this already has been a helpful lens to view my code through.
by triebelf on 2/6/22, 9:35 AM
by kqr on 2/6/22, 6:43 AM
by zonovar on 2/6/22, 9:41 AM
https://www.amazon.co.uk/Pragmatic-Programmer-Andrew-Hunt/dp...
by jnmandal on 2/6/22, 4:00 AM
by throwaway2037 on 2/6/22, 4:59 AM
by eterps on 2/6/22, 7:19 AM
by bradleysmith on 2/7/22, 4:31 AM
by tq-qv on 2/7/22, 10:48 AM
Stuff on lean manufacturing (yes. manufacturing!) https://www.amazon.de/dp/B000SEGIVS?ref_=cm_sw_r_kb_dp_ocvTD...
https://www.amazon.de/dp/B002LHRM2O?ref_=cm_sw_r_kb_dp_I9SSD...
by sedeki on 2/6/22, 4:22 PM
by Ozzie_osman on 2/6/22, 3:25 PM
- Mythical Man-Month (the classic, a little outdated but the principles still ring very true)
- Software Engineering at Google (thoughts from a company that has spent a lot of time thinking about this at scale)
by andreskytt on 2/6/22, 9:23 AM
by rTX5CMRXIfFG on 2/6/22, 5:44 AM
1. Counter-intuitively, being deeply interested and reading about a topic in natural science. Software is complex because it is a system, and especially if you're using a programming language with plenty of OOP features, you're going to benefit a lot from understanding how nature separates properties and functions into organic matter, how they work in concert to achieve a particular effect, and how they compose each other to scale up from the atomic to the cosmic scale; or
2. If you can't be bothered to learn about topics beyond programming itself, then practice unit testing. As a matter fact, attempt to write unit tests for your old code. If you can't make the unit test run, then that's life slapping you in the face to tell you that your code is way too tightly-coupled.
By the end of the day, doing any of the above things (but more so, both!) will teach you the true essence of KISS.
by irthomasthomas on 2/6/22, 1:27 PM
https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-a...
by kennethh on 2/8/22, 8:40 AM
It takes a empirical view on the software process. Does writing tests first help you develop better code faster? Can code metrics predict the number of bugs in a piece of software? Do design patterns actually make better software?
by KingOfCoders on 2/6/22, 12:40 PM
by david_allison on 2/6/22, 12:02 PM
Scott Wlaschin - Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F#
by fulafel on 2/6/22, 10:56 AM
These are quite different missions since it's rarely possible to recover form complexity if you've already gone there.
by sakesun on 2/6/22, 9:27 AM
The essay in the the beginning of the book gave me a profound epiphany back then.
by m0rc on 2/6/22, 1:22 PM
More speculatively, I think that the following biology readings are inspiring:
- Gerald Jay Sussman, Building Robust Systems an essay. In general, biology should be a source of inspiration for engineers.
- E. Goldratt, The Goal
by kqr on 2/6/22, 7:06 AM
David Marquet's books have been surprisingly helpful to me in shaping simpler organisations, starting, of course, with Turn the Ship Around.
by mikevm on 2/6/22, 11:01 AM
It's very unorthodox, but cuts through a lot of the bullshit.
by bobm_kite9 on 2/6/22, 9:17 AM
Hope this is useful to you.
by AussieWog93 on 2/6/22, 11:14 AM
by rrrodia on 2/6/22, 1:26 PM
by aristofun on 2/6/22, 7:59 AM
Classics
by glintik on 2/6/22, 3:30 PM
by bkgh on 2/6/22, 2:53 PM