(no title)
bonki | 9 months ago
With that being said, I firmly believe that all software (given that one is not already deeply familiar with the domain) is/can/should be written three times to end up with a good product:
1. Minimal prototype. You throw something together fast to see it can be done, taking shortcuts and leaving out features which you know you will want later(tm).
2. First naive real implementation. You build upon the prototype, oftentimes thinking that there is actually not that much missing to turn it into something useful. You make bad design decisions and cut corners because you haven't had a chance to fully grasp all the underlying intricacies of the domain and the more time you spend on it the more frustrating it becomes because you start seeing all the wrong turns you took.
3. Once you arrive at a point where you know exactly what you want, you throw it all away and rewrite the whole thing in an elegant way, also focusing on performance.
(1) and (3) are usually fun wereas (2) fast becomes a dread. The main problem is that in a work context you almost never are allowed to transition from (2) to (3) because for an outsider (2) seems good enough and nobody wants to pay for (3).
mandevil|9 months ago
A software engineering book written decades before I was born- my college assigned us the 25th Anniversary Edition- and yet I re-read it every few years and find some new way to apply its lessons to my current problems.
mpweiher|9 months ago
https://moss.cs.iit.edu/cs100/Bentley_BumperSticker.pdf
barrell|9 months ago
Every feature every variant ever possible configuration and all future potential states. Don’t care about how it looks or how it feels just put it all there. Build out as much of it as possible, as fast as possible, knowing it will be thrown away.
Then, whittle away. Combine, drop, group, reorganize, hide, delete, add. About halfway through this step it becomes clear what I really should have been striving for the whole time—and invariably, it’s a mile away from what I started out to build.
One I have that, then I think step three stays about the same.
This isn’t really a critique of lean development, but after a decade of trying to do things leanly, I’ve just accepted that it’s not how my brain works
breckenedge|9 months ago
pjbster|9 months ago
I've worked in a lot of places where end to end testing is performed manually by a SIT team who absolutely do not like to re-run a test once it's been passed. These people hate the idea of (3) and will overestimate the costs to the PM in order to avoid having to do it.
jbverschoor|9 months ago
mbreese|9 months ago
I think of the three iterations in these terms:
1) You don’t know what you’re doing. So this iteration is all about figuring out the problem space.
2) You know that you’re doing, but you don’t know how to do it. This iteration is about figuring out the way to engineer/design the program.
3) You’ve figured out both what you’re doing and how to do it. So now, just build it.
dustingetz|9 months ago
bonki|9 months ago
mrheosuper|9 months ago
Those devs had spent weeks/months for this app, now they want to throw it all away ?, that means throwing money through windows. Also, the risk that the new app may not work like before, or missing deadline, etc. A safe bet would be reiterating (2)
bonki|9 months ago
blitzar|9 months ago
mattnewton|9 months ago