This is an extremely common failing in technical writing. Without a clear problem statement, the reader has no clue whether the writing is worth the time. And without a clear answer to that question, most readers will do the rational thing and head for the exits.
You might call this Problem-First Writing.
If you're going to be educated about a conclusion that is surprising or objectionable, would you rather be told the non-controversial premises first and then share in the reasoning process that leads to the conclusion? Or would you rather be told the conclusion first, and then unpack the argument from there? The latter seems like it could invite more opposition and waste more time.
Solution: Do the parts of the project you are worst at first and save the easy safe tasks for last.
You start with an easy one to prove you’re not completely insane for considering this idea. You move to the hard ones to make sure you’re not going up a blind alley. By the time you’re done, they’ll all be easier (and if they aren’t, then pain is information. Use it.)
If you haven’t done the hardest one by the midpoint, odds are good someone is relying on wishful thinking. But doing the hardest one first is masochism.
Software is written by humans. Humans need confidence, and practice. Jumping into the deep end will just teach them not to try. People who can do the hardest one first? Aren’t looking for advice, and so you don’t need to write with them as the target audience.
- Situation
- Complication
- Implication
- Position
- Action
- Benefit
It's a bit heavy for my tastes but helps focus thinking.
https://www.mandel.com/why-mandel/SCIPAB-how-to-start-a-pres...
All right the sitemap says 127 pages.
Would appreciate any hints.
They could have layed-out the articles better than this.
I sometimes think about programming as having two distinct acts of creation:
1. Designing the program conceptually. This might involve whiteboarding, architecture overviews, design review, sketches, etc
2. Actually writing a working program
Writing good code is expensive and time consuming, so you want to bring any eureka refactoring / design moments as early as possible in order to decrease how much useless code you write. And for that you need to spend time nurturing the design in your head. Make prototypes. Test the database you're thinking of using. Make a simple in-memory prototype of the difficult logic. Make wireframes. Mine all that for clear headedness - you want a low risk, obvious road to tread when you build.
Before starting: I've got a sweet idea for a web app!
After step 1: I'm trying to solve ___ problem for ___ users. My MVP will look like these rough sketches and I'm going to use build it on top of ___ libraries / databases / frameworks.
After step 2: Here's the website if you want to give it a spin!
The easier the code is to write, the less time I'll spend in step 1. Which makes sense - up front design won't save much programming time if I can make a prototype faster than I can write a spec.
can't say I understand it clearly either, but maybe the biggest mysteries you have in whatever application you want to make are the things to attack first? Kinda like "save the easiest for last?"
If an aspect of the project requires research and/or significant engineering/development resources, most engineers will generally “front-load” these tasks, to “get them out of the way,” and maybe allow for further refinement, as the rest of the project progresses.
This is very important, if the feature is a “central” feature of the project.
However, if it is a feature that is not “critical path,” or something that could be added after an “MVP” stage, then work on it could suck the oxygen from the important (to the end-user) features.
I call this the “Front of the Box/Back of the Box” approach.
When we are designing product packaging, the front of the box may have only two or three major “eye-catchers,” in big, obnoxious lettering.
The back of the box may have three or four more, in slightly smaller font.
The sides would have still more, in even smaller type.
The “Front of the Box” features are always the most important ones to the end-user (or, at least, that’s what we believe). Those features should always get “first cold press” treatment; even if they aren’t particularly challenging or difficult.
That way, even if the technical “whizzy-bang” stuff goes pear-shaped, or takes longer than planned, a viable MVP is still available, to generate funding and support for continuing development.
It’s amazing how often this fundamental approach is ignored.
But this is not what the article is about, which is described under Quick Summary: https://riskfirst.org/overview/Quick-Summary
The RAT is really important in areas like Healthcare that require a lot of monetary investment to build an MVP. In my experience, the hardest part about the RAT from the technical side is convincing people before building that their MVP assumptions or technical understanding may be wrong. Technical RAT only works if estimates are trusted and management isn't overriding technical judgement.
Whether it's RAT or MVP, the most important priorities are still talking to users and working from solid data, to avoid leaning on assumptions.
Basically it's a lot of name dropping of concepts and keeps promising to get to something later which it then doesn't (within my time frame).
I loathe web pages like this, where the whole design is guided by flashy optics but they then don't deliver anything.
That said, people here appear to fundamentally agree that the riskiest part should be done first. So I would like to present the opposite view so we can start a discussion.
You will probably not be able to do the riskiest part first because you are missing infrastructure. So, if you strictly adhere to the dogma of doing the risky stuff first, you may make rash decisions about the structure of the final product, when you really don't know anything about it yet. You might pull in frameworks and tooling which later turn out to be a bad choice, creating additional stress to replace later.
Personally, I have been grappling with this for decades. Watching myself I usually tend to do easy infrastructure first. This has two major reasons. First it gives me time to think about how to actually approach the risky parts.
Second, if I then fail in the risky part, the work was not for nothing but I at least got the reusable infrastructure code out of it.
Third, it buys me time to gain understanding of the problem space.
Fourth, and this is particularly important for open source projects, it gives me a steady stream of successes after each puzzle piece gets finished. Without this stream of successes motivation fizzles and projects die.
There are risks with doing it this way, but I think you shouldn't unfairly just discard the whole idea. After all people are doing it like this all over the world. That probably means there is some kind of evolutionary background to it and it was actually better than the other approach.
I think a good rule of thumb is that you limit the risk about WHAT you are doing, not HOW you are doing it. By the time you tell your engineers what you are doing, it should be basically risk free.
To me it appears obvious that failure is too often blamed on engineers when it was really management failure.
Ironically, it ignores the riskiest category of software development, classes of software that have never been built before or require necessarily bleeding edge software engineering. This is a very different kind of risk than “bad at software development”.
Viewing all activity through a single lens feels extremely reductive, and the language of risk is already understood in different contexts within business to mean something a bit different.
Implement spec.
Refactor spec and implementation.
The details after that are problem specific. These frameworks drive me nuts.
Software is not a car. I can do the same stats on a reasonable data set with a bit of C or UNIX tools.
The only thing that’s different at scale is businesses trying to do it for us, for their financial gain.
Forcing humans to move and bend like they’re robots in order to minimize risk to private finance fiefdoms is some thought policing nonsense.