"A minimum viable product (in software) is not a mess of code that barely works, but a well-done piece of software that is perhaps missing some of the features that would be necessary to call it 'done' or 'ready' from a business perspective."
@ContinuousDelivery2 жыл бұрын
💯
@sewera.account2 жыл бұрын
The best time for me to see this video was over a year ago, when I started my over-engineered project for my B. Sc. Thankfully, the second best time is now, when I have many more projects ahead of me.
@tudz1232 жыл бұрын
10:33 Please don’t get tired of reminding us! Had a good lol when I heard it 😂
@arturk91812 жыл бұрын
10:33 hahaha that caught me off guard!
@travispulley52882 жыл бұрын
I just watched his advice on the subject previously, so I was ready for it (see kzbin.info/www/bejne/op3EhnV-atSUr9k )
@robwatson8262 жыл бұрын
How often should we test? "All the f***ing time" - Dave Farley, 2022
@travispulley52882 жыл бұрын
@jimhumelsine91872 жыл бұрын
Yes. Yes. Yes. Yes. We can't predict the future, but we can't avoid it either. I often quote the chorus from "Que Será, Será" as an metaphor: Que sera, sera Whatever will be, will be The future's not ours to see Que sera, sera What will be, will be We need to design our code to be flexible enough for any future that will be, even if we cannot see it at the time. Design Patterns have always worked well for me in trying to achieve this.
@ronylev-ari32192 жыл бұрын
another great video and I really appriciated the concrete example of a design problem and the thought process involved when approacing it
@hannesvanniekerk22562 жыл бұрын
Rewatched that f-bomb drop 3 times :D Uncle David keeping it real in another great video.
@somewhereinyorkshire47822 жыл бұрын
Great video. I am reminded of a quote from Michael Jackson (The programming guru of old, not the singer) who said something like "Don't work on detail unless you're really good, in which case, don't do it yet"
@devsuvara11 ай бұрын
Excellent info Dave!
@BryanFinster2 жыл бұрын
19 seconds in and it sounds like Dave is quoting me. I must be on the right track!
@brownhorsesoftware36052 жыл бұрын
I always start with the UI which keeps you on a track of making the fewest assumptions as well as additional insight into the functional design. The initial design is the simplest list of the tasks the software needs to accomplish which grows as you work on (code and run) the software. You always build on what works so writing test code is superfluous. The backend can evolve independently and your backend bugs are immediately visible. I don't know if my process has a name. 😀 Your video has inspired me to formulate something I just took for granted.
@hypenage24152 жыл бұрын
I think youre right for this design pattern and I practice the same when making software. Steve Jobs once said “youve got to start with the customer experience and work backward toward the technology, not the other way around”
@mx-hx2 жыл бұрын
Interesting idea, but "writing test code is superfluous" is a big smell. There are tons of reasons why TDD / BDD are currently considered best practices (not widely implemented properly, but widely dreamed about by devs with aspirations). If you do write up your method/practice in depth, do let us know where to read it. If you've really found a way to develop software better making testing superfluous, I want to think about it deeply with you 🙂
@brownhorsesoftware36052 жыл бұрын
@@mx-hx I did not say that testing is superfluous, I said writing test code is superfluous. That is because the production code IS the test code. On the contrary, the code gets more testing because you always run the final code, not a generated test based on a possibly false assumption.
@Gemasted2 жыл бұрын
Upfront design when the parameters are unknown is definitely something to be avoid. However continuing on evolutionary designed code when the problem is well understood can be just as problematic if not more so. I've seen countless projects where people tolled on a hard to maintain system for years just because you "shouldn't" do a big refactoring, the most successful systems I've seen are systems where people rewrite and redesign it completely upfront from scratch one or two times.
@BryanFinster2 жыл бұрын
How do you know the problem is well understood?
@Gemasted2 жыл бұрын
@@BryanFinster because you've written the system already :)
@errrzarrr2 жыл бұрын
This, exactly this
@BryanFinster2 жыл бұрын
@@Gemasted I’ve frequently seen that not matter. :)
@hipvivid2 жыл бұрын
Isn’t rewriting it from scratch what we’re trying to avoid here? If we now know how it should be designed to reduce maintenance pains then we should work to refactor those portions of the code that are causing us issues. If we ended up with a big ball of mud and a huge amount of technical debt then this is surely a case of not taking enough care to refactor as the project progressed. This shows the importance of refactoring as we go along so are design isn’t hindering our ability to change and maintain the software.
@krumbo2 жыл бұрын
Hahaha, just shared this video with another branch of our company. They always start as Big Upfront Design and then stuck because just crazy complex. Like stuck every time.
@thmstbst2 жыл бұрын
I recently interviewed at a job that said they were using tests, but they only seemed to use them to assign work. What I mean by that is team leads would write the test, then pass it off to someone else to complete the feature. They seemed to have a lot of custom functionality for individual customers too. If I end up working there, how should I adapt? I guess I could write additional tests, but I would be worried about being seen as creating additional work.
@BryanFinster2 жыл бұрын
Honestly, I wouldn’t work there if that’s how they work.
@thmstbst2 жыл бұрын
@@BryanFinster thanks for replying, I'm sure that's your honest opinion. I guess I'm just trying to think through why it's a bad idea. Some places are similar in that a manager give requirements, as a go between. It's just not in the form of a test.
@BryanFinster2 жыл бұрын
@@thmstbst both of those are honestly terrifying to me. I’ve heard of places like that, but that level of micro-managing destroys product value and the souls of people working there. It’s one of the worst anti-patterns that exists for value delivery.
@gamer-gw9iy2 жыл бұрын
@@thmstbst I guess it depends what kind of tests they are assigning, if it's super high level (which I doubt), you might get some (little) breathing room. I'd work there only because I'm only going to be working for this summer before I continue school😂
@ContinuousDelivery2 жыл бұрын
I probably agree with Bryan, If these tests are high-level "executable specs" for a feature, as @gamer describes, that only say what the user should perceive at the end, then fine. If not, this really won't work well. There are lots of places that try to write SW this way, but they aren't very good at writing SW! If you have a choice, I'd look elsewhere. If you don't don't worry about adding more tests, because this is how you write good code faster, so it isn't "additional work" in the long run it is significantly less work.
@m.x. Жыл бұрын
1) "If the only tool you have is a hammer, you tend to see every problem as a nail." Big up-front design is not dumb at all when the requirements, size/complexity and context tell you so, 2) the true technological, scientist and mindset revolution wasn't during the mystified Enlightenment, but rather the Renaissance with the discovery of America, 3) SOLID, High Cohesion, Low Coupling, SoC , DRY, KISS, YAGNI, etc. are concepts that have been around for quite a long time, most developers just don't understand or know how to apply them.
@Immudzen2 жыл бұрын
When working on any kind of simulator the one thing I think you have to do upfront design on is the actual math. What are the actual equations you are going to implement and why are they the right ones? This is such a foundational issue that it ends up touching a lot of the stuff the software does and while you can change it later it can also be quite painful.
@DinkarGuptaDG2 жыл бұрын
Toyota improvement kata in actual form for us engineers
@finne-dich-selbst-33952 жыл бұрын
"Much of present-day software acquisition procedures rests upon the assumption that one can specify a satisfactory system in advance, get bids for its construction, have it built, and install it. I think this assumption is fundamentally wrong, and that many software acquisition problems spring from that fallacy. Hence they cannot be fixed without fundamental revision, one that provides for iterative development and specification of prototypes and products" - Fred Brooks, No silver bullet, 1986 Only that currently we might be mistaken to think that something we have coded is ready. It will never be if we are able to learn, since learning changes our understanding, and should change software also. It would be great if these changes would be easy to implement.
@ContinuousDelivery2 жыл бұрын
💯💯Exactly my point! I think that the only sensible approach is to start out assuming that we are probably wrong. That focusses us on being more defensive, and so, when we find out how and where we are wrong, we can easily fix it.
@karlgustav99602 жыл бұрын
This is all well and true in a world without graphical user interfaces. However for an e-commerce web site, users who hate your „first step“ will just not come back for further iterated versions. Sometimes first impressions do matter. That’s why disciplines like User Experience Design do exist. It is the UX Designers‘ job to design and test before things go into production. Sometimes several iterations go into a solid design doc that is handed to development and is then misunderstood and frowned upon as „big upfront design“ and important parts of it are ignored or changed at will out of ignorance or a false understanding of agile practices… I’d still say leave the design to the designers and the engines to the engineers :-)
@mx-hx2 жыл бұрын
You are confusing visual/ usability design of the UI with structural/modular design of the codebase. To follow your analogy, you need both an aesthetic designer for the car body, but also a technical designer to make the engine blueprint.
@TjSpoonManJacques2 жыл бұрын
Awesome!
@NickDanger32 жыл бұрын
Dave, The foundations of modern science were laid in the middle ages. The “enlightenment“ was merely an ideological accretion on top of that foundation, and has nothing to do with science itself.
@ContinuousDelivery2 жыл бұрын
Not really, one of the key ideas that gave birth to science was that decisions from authority are not guarantee. This was firmly an enlightenment idea. As feynman said, "science is the belief in the ignorance of experts". en.wikipedia.org/wiki/Age_of_Enlightenment
@Sergio_Loureiro2 жыл бұрын
10:32 "Test all the fucking time". No shit, Sherlock!
@jamesgg99502 жыл бұрын
Keeping your design options open is great until you realize your last project's server code is still running SQL on CSV files because you deferred choosing a database.
@ContinuousDelivery2 жыл бұрын
...but since you were keeping your design options open, this should be a simple fix, of course, if you were keeping you options open, the SQL wouldn't have leaked outside the persistence code 😁😎
@motyakskellington77232 жыл бұрын
not knowing what you want or keep failing at getting what you want
@foad-esad2 жыл бұрын
I love it .... test all the f&^king time!
@mabdullahsari2 жыл бұрын
I work in a team that gets scared when I define anything that ends with the suffix "Interface". ¯\_(ツ)_/¯
@krccmsitp28842 жыл бұрын
Then choose another suffix, e.g. Contract, or choose another team. ;-)
@mabdullahsari2 жыл бұрын
@@krccmsitp2884 It'll probably be the latter haha.
@BryonLape Жыл бұрын
Evolution is random, undirected change.
@sergmmm2 жыл бұрын
👍
@way.journey2 жыл бұрын
Unless you are Mozart
@MisFakapek2 жыл бұрын
We need more code. There are too many words but not enough code. I feels like someone explaining how V8 engine works with tubo-charger without showing a mechanical schematics of how it works.
@ContinuousDelivery2 жыл бұрын
kzbin.info/www/bejne/op-XiKGujZKqqNk
@gamer-gw9iy2 жыл бұрын
The difference between a mechanic and a developer is that the mechanics tools will rarely change 😅 Only code that would be easy enough for most aspiring to learn some software engineering would probably be some really simple Python, but I doubt much Python will be used in 30-40yrs.. Teaching without much code will keep these lessons useful forever and for everyone 🙏
@mx-hx2 жыл бұрын
You might need more experience, then you won't need the code to grasp & apply the concepts.
@pvtjoker38332 жыл бұрын
What does not work: Teams of "architects" that are not developers (no real experience) and don't test what they propose. They are total idiots proposing "designs" that are fundamentally wrong. Corporations need to wake up and stop having these useless "architect" groups.
@ContinuousDelivery2 жыл бұрын
Yup, I talk about architecture here: kzbin.info/www/bejne/e52wn3t6iKuUedk
@mx-hx2 жыл бұрын
Do you work at my company? 😀
@mikeguantonioify2 жыл бұрын
100% Agree!!!
@bc41982 жыл бұрын
There's something fascinating here where the things that get published are the things that get finished, with the side effect being that they are less evolved. They were able to finish because they stopped getting better ideas...