Live data from Hacker News

My approach to building large technical projects

mitchellh.com

21–29 of 29 posts

Re: My approach to building large technical projects

#21

Note he doesn't mention a user story. Large technical projects apparently let you ignore what the user wants, use cases, dependencies, stakeholders, design reviews, feature changes. Instead you just decide what you want and wait to see if the user wants it too.

Well, he write stuff for developers so he might know the space well enough to start his work,

unlike the recent story of a developer trying to disrupt coffee delivery

Re: My approach to building large technical projects

#22
Nice approach. It feels very similar to "tracer bullet" development (I think coined by the pragmatic programmer book), where you get something end-to-end as quickly as possible and then start iterating on the parts. (https://www.swaroopch.com/tracer-bullet-development/ explains it too)

Re: My approach to building large technical projects

#23
> My goal with the early sub-projects isn't to build a finished sub-component, it is to build a good enough sub-component so I can move on to the next thing on the path to a demo.

The one caveat I'd add to this is to make sure to panic (throw an exception or assert false) at all unhandled edge cases in the good enough subcomponent. It's often easy to write conditionals for the happy path without a corresponding else for the unhappy path. You don't need to implement all branches initially, but you will likely be glad you added those panics, which have the bonus side effect of showing you exactly where the unhandled edge cases are, as you expand the sub-component to handle those edge cases.

Re: My approach to building large technical projects

#24
post #23

> My goal with the early sub-projects isn't to build a finished sub-component, it is to build a good enough sub-component so I can move on to the next thing on the path to a demo. The one caveat I'd add to this is to make sure to panic (throw an exception or assert false) at all unhandled edge cases in the good enough subcomponent. It's often easy to write conditionals for the happy path without a corresponding else…

NotImplementedException("reason") is my greatest ally when adventuring into the dark forest. I will sometimes build the entire prototype as a big NIE experience and then decide on which path(s) to implement.

Getting deep into details/code when you aren't quite sure of your surroundings can be extremely dangerous for the health of a fledgling project.

Re: My approach to building large technical projects

#26

Cool that he's still writing code. Not sure I would if I became a billionaire.

In a previous job, the owner of the company would do all the fun parts of the engineering -- the brainstorming, the rough specs, the prototypes -- and leave the details and grunt work to everyone else. He was having a ball.

Re: My approach to building large technical projects

#27

Note he doesn't mention a user story. Large technical projects apparently let you ignore what the user wants, use cases, dependencies, stakeholders, design reviews, feature changes. Instead you just decide what you want and wait to see if the user wants it too.

Two thoughts, one, his approach is orthogonal to that. This is a way to move yourself forward on any project, no matter where the design comes from.

Two, he IS the user! His example is the terminal emulator he is writing for himself. He says to write something that you will use yourself, as a good way to generate your own interest and involvement in it. Also, it seems like good practice to write something for the user you probably have the best communication with!

I used some of these ideas to get over the hump on a project today. Just get the simplest thing going to give a useful result, and that helps break the log jam!

Re: My approach to building large technical projects

#28

Being able to prioritize building projects like this is a skill in itself, and I think it's a really important one. People seem to chronically undervalue optimizing for shipping something. Mitchell does say "I don't talk about shipping", but shipping a demo for yourself is still shipping! It doesn't matter how good you are if you can't stick at something for a long period of time. You're probably not going to be able…

Definitely true. That's something my co-founder talks a lot about. If you just stick at it for a few months, projects get huge. It's incredible how much code gets written when you look 6-months back. If you had to look forward and try to guess, you'd never imagine this much would have happened.

What do you mean by not being able to guess, specifically? I seem to start growing code at 1000 lines per week, decreasing to 200 after a small number of months, yielding around 15000 lines after six months. For reference, this is about half the size of Wolfenstein 3-D. Is that not a fair guess?

Re: My approach to building large technical projects

#29
post #13
post #7

Earlier quoted context omitted.

What users want and User stories (in the agile iterative software sense) are different things. At their best user stories represent problems to solve for the end user, but rarely have I been able trace back a user story to something that an end user actually wanted because nobody bothered to ask them. Not talking to customers is extremely common . Everyone’s just too busy, including the customer. It’s kind of the “ea…

> At their best user stories represent problems to solve for the end user, but rarely have I been able trace back a user story to something that an end user actually wanted because nobody bothered to ask them. This is such a universal problem in the industry. It's also the source of the endless reinvention cycles we go through. Everyone hates user stories now because no one actually does the other work involved - tal…

> It will start getting hyped and eventually we'll all be doing it - except we still won't be talking to the users and the next generation will hate it.

By the way, user stories are an iteration of that. I remember:

- when user stories were a novelty, everyone hated actors and use cases,

- when actors and use cases were a novelty, everyone hated functional requirements.

Post reply on HN