
How to start and scale a full stack startup - malomalo
http://blog.42floors.com/how-to-start-and-scale-a-full-stack-startup/
======
jliechti1
Many engineering types seem to feel more at home making tools to "automate all
the things". On the surface, it appears a lot easier than making 100s or 1000s
of phone calls, but it can be dangerous because it gives you the feeling of
doing important work (not to say it isn't important, but for early stage
startups, it's not the highest priority).

But I guess everyone is learning that this is not a substitute for all the
grunt work needed to grow a business. PG wrote it in his "Do Things that Don't
Scale" essay:

[http://paulgraham.com/ds.html](http://paulgraham.com/ds.html)

\--

On another note, I hope this term doesn't catch on, because full stack already
has an abundance of meanings depending on who you are talking to:

\- Full Stack Web Developer (backend, frontend, maybe design?)

\- Full Stack Developer (backend, frontend, design, ???)

\- Full Stack Developer (older meaning) (knowledgable about hardware and
software)

\- Full Stack Startup (developing, business, and everything else?. They call
it a "complete, end-to-end product or service")

~~~
peterkelly
I'm just waiting for the Full Stack Cloud to become a thing

~~~
_random_
Surely that would disrupt the industry. Social, mobile, local!

------
zaroth
I think the sad thing here is the idea that code is so expensive and rigid
that it's better to slog through something manually, just to avoid the
potential of being locked in by code.

I get that sometimes automation sets you on a course of infinite refinement,
and you end up investing more money that you should have making some tool
cover 100% of all possible use cases. But that doesn't mean you never should
have _started_ building the tool, just that you went way too damn far once the
"bugs" and "feature requests" came rolling in.

What about the relative costs and risks associated with hiring a workforce for
all the manual labor? There's a certain net weight in work that needs to be
done, you can shovel it by hand or you can build a machine to help you. How is
it not a winning move to hire fewer, smarter people, and empower them with a
great software stack?

The goal isn't to build a machine which can do 100% of the work. But whatever
the product you sell, you may find you can spend $1 in engineering to reduce
the variable cost of delivering that product by more than $1. That's printing
money. But to identify these opportunities, and more importantly to
_prioritize_ these opportunities and stop working on the BS never-pay-you-back
feature, I think you need a project manager who can understand software
complexity as well as the business case.

~~~
smoyer
"code is so expensive and rigid"

For a former embedded systems engineer, this is a hilarious sentiment ... if
code you can deploy to your web server two minutes after you've written it is
"rigid", I'd hate to see what the current generation of software engineers
would think about not being able to "reROM" an embedded device once it was
shipped. Even remote-FLASH capabilities are a pretty recent invention.

I think the main problem the article describes is that if you prematurely
write software for a perceived problem, you will often be wrong. Writing
software will always be more expensive than some number of manual operations,
but those manual operations, in the absence of a clear specification and
solution, will help you understand the problem domain in ways you wouldn't
have otherwise.

~~~
zaroth
I said 'the sad thing is _the idea_ that code is so expensive and rigid'. I
personally don't think that code is particularly expensive or rigid at all,
perhaps least of all this type of specialized task automation code.

I guess there are two ways that you "will often be wrong" when automating a
specific task. 1) You could improperly or so incoherently automate the task
that it actually is harder to for your users to accomplish the task with the
tool -- failure to improve productivity of the stated task, or 2) you could
successfully automate the task at hand, but either the improvement is too
minimal, the task is too rare, or the code cannot be well leveraged when the
task needs to change, meaning you never get to break-even on the investment.
Both failure modes can be well defended against by a good PM.

Are you saying, that by shipping some automation code, now just by nature of
having the tool in the workforce's hands, they are actually less able to
understand the problem domain and come up with better ways of doing things in
the future?

I think of it a bit differently; the automation of a given approach gets _so
good_ that a competing idea that could actually produce a better outcome, but
must be done completely manually, is so inefficient compared to the automated
workflow as to result in a negative effect, and so it's dismissed. (E.g. you
earned an extra $10k on this client doing it your way, but if you used the
automated fast-path, you could have just closed 5 more clients at $10k each in
the same time).

One way I see this often manifest is the idea that sales always wants to be
able to say YES to the prospect / client. If you have a large software
automation toolset, you only say YES when the needs match the capabilities,
because you lose money every time you work on the special-case clients. I
think basically you sacrifice growth rate in this case in order to be a jack-
of-all-trades.

~~~
smoyer
I totally missed "the idea" \- it seems like we're in violent agreement!

------
sixQuarks
I don't really consider this example to qualify as a "full stack startup".

If 42floors was a real full stack startup, they would be developing, buying,
and selling real estate

------
mreiland
I think the author is learning the wrong thing.

Software isn't about automating things, and certainly not about automating
things 100%. It's about building tools to leverage people's times (in this
context).

If you can build software that makes those folks doing those manual processes
30% more productive, then do so.

He has this idea that you should never build tools by default because
automating them 100% is too costly. Automating them 100% may be too costly,
stop trying to do that.

------
ilaksh
Very interesting perspective. I think he goes a bit overboard with saying that
everything should be manual by default. Most business are not like real estate
in terms of profits in dollars. I think that is giving them the opportunity to
hire a lot of inexpensive workers to do all of these manual tasks. That and
investment which is naturally attracted go real estate. Anyway it is a good
point if a bit overblown in this case. Even internet businesses need
tointeract with the real world and changing requirements in a fluid way and
that means you can't always have the ultimate integrated automated system.
Spreadsheets are very powerful.

------
fred_durst
Anyone know why 42floors blog posts end up on the front page so often?

~~~
infinitone
Not sure what you mean, i don't see them that much. And they had some good
stuff, like about manual scaling: [http://blog.42floors.com/manual-
scaling/](http://blog.42floors.com/manual-scaling/)

------
jds375
I think with many founders being software engineers themselves, they naturally
steer away from manual solutions (and usually with good reason). But some
problems, such as those faces by Uber and 42Floors, simply need manual
solutions. That's why it's useful for software-oriented founders to also
educated themselves in operations and management.

------
danso
> _Start with manual processes_

 _This actually goes for all companies. Early on, whenever you can replace
code with a manual process, you should; if for no other reason than it can
help you to iterate faster. We do it religiously at 42Floors. Everything
starts manually. Save your precious engineering cycles for the times when you
actually need it._

God, there needs to be a sexy phrasing of this, kind of like how quick-
iteration-cycles has "Move fast and break things." Today, people are so
dependent on computers that they seem to forget that there used to be a way to
just _do things_ even without an app.

I've helped or consulted on various researching projects for fun, and it
always pains me to hear a very smart person say something like, "I saw that
there's a great Java library for sentiment analysis. Should we build our
project on Java?"

Nevermind the layperson ignorance of software engineering evident in that
question...my problem with this kind of question is _why do we need any kind
of software to do "sentiment analysis"?_

The reason isn't self-evident...and if the questioner would just take the time
to do "sentiment analysis" manually, as if no computers existed, what they
actually _need_ would be easy to explain to a software engineer. And what I
mean by "manually", I mean to take a sample of input and a spreadsheet, and
then mark down the "sentiment" you yourself can detect by reading over each
unit of input.

After an hour of that, you'll have a great idea of what you actually _want_
and _need_ , such as, what _kind_ of sentiment are you looking for? What is
the granularity of sentiment, e.g. just "happy" and "angry"? Or do you need
"Very happy/happy/neutral/unhappy/angry?" And if the latter, how did you,
yourself, as a human, differentiate between an "unhappy" and "angry" input?

You may realize that you don't need very much granularity. Or that the kind of
input you're analyzing, such as tweets, do not lend themselves very easily to
accurate sentiment analysis...or, at the very least, will require certain
tweaks in the software so as not to be thrown off by common styles of
phrasing. Or you may find the input lends itself to having a nice loophole
that greatly enhances how quickly you can judge sentiment, such as if your
input sample tends to use a lot of emoji.

These are all computational thought processes that require no machine learning
to just _do_ , that we as humans can do for ourselves, whether it's to
efficiently prototype a machine learning model or because an EMP bomb just
went off. As a programmer, I'm all for automating the hell out of everything,
but it really irks me when people have no idea _how_ to automate something,
nor have a reason _why_ something should be automated, and then hope that the
machine (or its mercenary operator) can figure it all out for them.

~~~
mercer
I realized exactly this when I wanted to write a backup script for some of my
client's websites.

My usual process had been to 'manually' backup using rsync, which was a matter
of cutting and pasting the commands from a text document.

When automating, however, I realized I'd also have to check if certain files
(db dumps) were present, and of course if the script itself succeeded.

I then realized that in this particular case, the simple cut and paste
approach was perfectly fine, because: 1) it would take months for the time
spent automating to be worth it compared to a quick cut and paste, and 2) it
was much safer for me to quickly scroll back in my terminal and see if the
particular files were present.

Now I wouldn't generally recommend my approach, but in context it made sense
not to automate, and yet I felt a 'need' to automate anyways.

~~~
icebraining
Automating is not just about speeding up the process; it's also a way of
lowering the bus factor[1] of the process. What happens when you go on
vacations, or you get sick? Do the websites stop being backed up?

Besides, you should always document your process, and writing a backup script
doesn't really take much more time than a detailed description in English.

[1]
[https://en.wikipedia.org/wiki/Bus_factor](https://en.wikipedia.org/wiki/Bus_factor)

~~~
arthurjj
Exactly, writing down the steps should be the first step in automating a
process. The order I do the steps are:

1\. Write down the directions to do the task 2\. Have someone else follow your
directions. Any time you need to interrupt them because you missed something
add a note or additional step 3\. See if any part (or the whole thing) is
worth automating

