
What do you need to make a successful web app? - malditojavi
http://mir.aculo.us/2014/04/13/what-do-you-need-to-make-a-successful-web-app/
======
spindritf
_Multiple load-balanced “webscale” servers_

This is the biggest one. I have seen many, many projects held back by the idea
that they need eight nines of reliability and a geodiverse HA cluster before
they can even start, where a single server with a half-decent backup plan
would be more than enough.

 _Good security from the start_

You don't need that either. You absolutely should think about security but
it's by no means necessary to succeed. And really, backups and letting someone
else handle payments will usually make it impossible to fail
catastrophically†.

† Some exceptions apply.

~~~
hanief
Do you have a recommendation on decent backup practice? Thanks.

~~~
adwf
The most important - and most forgotten/ignored - part of a good backup
practice, is actually _checking_ that you can restore the backup successfully.
Ok, it's slightly less important than actually backing up at all in the first
place, but only slightly.

You won't believe just how many organisations will have an automated script
for a daily/weekly/monthly rolling backup of their database, but won't have
any procedure to restore the previous days database to check the backup
procedure went ok!

At the most basic, it's just another automated script on a spare box to ensure
the restore returns ok. But people don't even bother with that...

~~~
sjclemmy
Word to that. I was contracting once and I asked about the backups. Someone
was diligently changing the tapes on a daily basis but the backup had actually
been failing for months. How we laughed...

------
sergiotapia
One thing I would add to this is start writing tests from the get go. Any
language you're writing in offers a lengua-franca Testing frameworks, NUnit,
Gotest, RSpec, PHPUnit etc - just do it now.

Much later down the line when you start finding harder bugs you wish your
basics were tested and verified. It's _priceless_ to run your test suite and
make sure everything is kosher after a change. This is something that took me
years to put into motion with my projects despite reading about it online.

Set up a build server on your own VPS or something like
[https://www.codeship.io/](https://www.codeship.io/) and have it hook into
every commit and run your test suite, if all green, deploy to production.
Saves time, thus saves money.

~~~
randall
We added test suites after we were making money / people had to rely on our
software. I think doing it before is kind of a waste of time... because who
cares about well tested unused software.

I'd say add them in after you have enough to pay one person full-time.

~~~
conorgil145
Putting off testing until you show traction can be a slippery slope. Writing
tests early on can have many benefits including: better architecture/design,
confidence the code performs as expected, regression testing when adding new
features, ability to more quickly add new features because of the good design,
etc.

If the person in charge is the stereotypical "business type", then it can be
difficult/impossible to convince him/her to allow engineers to spend time
doing a refactor and/or writing tests for code which was written months ago
and is "working fine" because you now are showing some traction. This can
easily lead to never actually getting around to writing that robust and
practical test suite that is really necessary in the long term. Note that I
also say the test suite should be practical (for some definition of practical
which may vary from engineer to engineer). For example, 100% test coverage may
not be useful, determine which parts of the code MUST be tested and which
parts are just diminishing returns, etc, etc.

~~~
subsection1h
> _If the person in charge is the stereotypical "business type", then it can
> be difficult/impossible to convince him/her to allow engineers to spend time
> doing a refactor and/or writing tests for code which was written months ago
> and is "working fine" because you now are showing some traction._

What I've done on a couple of occasions was to tell the nontechnical
stakeholders that automated tests must be added before the web app framework
(or whatever significant dependency) could be upgraded. In the context of such
an upgrade, they could understand the benefit of a test suite, and they signed
off on it.

------
crazygringo
> _And here’s some things you don’t need:_

> _reset.css_

Wait, what? I was with him until that. Using a CSS reset is part of CSS 101, I
would never dream of starting a project without one. It isn't a "complex
dependency", it simplifies cross-browser issues greatly. Putting this on the
list is simply... bizarre.

~~~
sunseb
I have never used any reset.css file (I'm more of a backend developer), but I
find this idea very interesting. Is this reset technique often used in modern
web development ? Any feedback on this ?

~~~
hackNightly
"Professional" web developer here. Indeed the reset technique is used very
often. Browsers often implement default margins and padding differently. A CSS
reset can give you a more reasonable baseline to work with.

~~~
Achshar
These browsers usually have reasons to have their own styles. Sometimes they
are there to be consistent with the base OS (drop downs, buttons, etc) or they
are there to best suit the format that the browser runs on small screen
(phones), large screen (desktop) etc or to take care of device input types
(touch screen devices would have larger buttons by default whereas pointing
device doesn't need to have large buttons). I think it's best to let the
browser decide what it wants to decide and build our app around browser
differences instead of forcing our own design down browser's throat.

~~~
ttty
I think the problem is manly IE vs Chrome vs Firefox.. (and of course Opera).
Example: Why would you want to have by default a padding of 10px in IE, a
padding of 5px in Chrome, 7px in Firefox and 0px in Opera? Of course is easier
to make a default for all those browsers to 0px or whatever you want.

------
tomasien
Are you suggesting that using HTML5 Boilerplate is a bad idea? Because no, no
it isn't. That is an insane assertion. The number of weird idiosyncrasies or
browser specific problems that WILL come up with any web app that I've fixed
by just saying "hmm, wonder if I put in HTML5 Boilerplate" are insane. It
creates 0 technical debt, you will always be happy you started with it, and it
is fantastic.

I do no understand the big about reset.css either but I guess I"m willing to
listen? Reset.css has also been a lifesaver.

For a blog making a really important point (don't just use Angular because
you've heard of it, use what gets shit done), suggesting that boilerplate
creates dependancies that you will regret having seems out of place.

~~~
Chris_Newton
_It creates 0 technical debt_

That’s a bit of a stretch.

The current version of HTML5 Boilerplate includes several things in the header
that probably aren’t exactly what you want, particularly if you’re supporting
mobile devices.

It loads 4 distinct JS files. One of those is Modernizr, which is loaded at
the top of the page and will therefore block, and there’s a custom class on
the HTML element to go with it.

It loads 2 distinct CSS files.

It inherently has potential security and privacy issues that come from using
any third party servers, in this case Google Analytics and attempting to load
jQuery from their CDN.

Likewise, it has dependencies on some third party scripts, both Modernizr and
the ones for Google.

And it contains an unprofessional nag message for users of IE8.

This is not a criticism of HTML5 Boilerplate. All of the defaults mentioned
above might be a good fit for _some_ projects, even _many_ projects. However,
none of them will be suitable for _all_ projects, so the moment you start from
HTML5 Boilerplate you almost certainly have some technical debt to pay off,
just like any other template or framework or scaffolding system.

~~~
Gigablah
Your points sound suspiciously like premature optimization... and I'd argue
that is exactly what you DON'T need.

~~~
Chris_Newton
How did only adding parts that are relevant to the current project become some
sort of “optimization”? There is _more_ work to do if you start from someone
else’s boilerplate that has lots of parts you don’t want, because you have to
actively delete things that you need to replace or just don’t need at all.

In any case, some of the defaults in HTML5 Boilerplate can have real negative
consequences if you just use it without fixing them. If your market will be
using mobile devices a lot, or tends to have limited connection speed for any
other reason, then making half a dozen extra requests before you even start
doing anything interesting can have a significant impact on performance.
Playing around with viewport settings can have significant adverse effects for
usability if you don’t know what you’re doing. That little message about IE8
that isn’t going to show up on the recent browsers your developers usually use
is going to get you in trouble with a client one day if you develop a lot of
intranet sites and forget to remove it.

------
selmnoo
Great piece. I realize now that I'm more or less clueless about one of the
things mentioned there:

> An understanding of tax laws in your country

How does one learn this? Is there a book you guys would recommend?

I think in addition to tax code, learning a bit of legal stuff is probably
necessary too. And for that, grellas's guide is probably handy:
[http://www.grellas.com/faq_business_startup.html](http://www.grellas.com/faq_business_startup.html).
Learning about accounting would be a good idea too, I'm also clueless there
though - any recommendations for learning that?

~~~
jakobe
In my experience you don't need to know much about tax laws to run a small
business. Find a cheap accountant* , and he'll tell you everything you need to
know about taxes in two hours.

* When you are just starting out, it makes a difference if you pay someone 300€ a year to do your taxes, or if you have to pay 1000€. Stay away from the big companies. They will charge you for every phone call. Ask other small business owners for references.

~~~
moron4hire
Hiring an accountant was a godsend. I had just moved to a new city and did not
know we had a business property tax here, or that the city itself had their
own business licensing requirements (even for work-from-home freelancers). Not
only did my accountant quickly get all of that taken care of, they also found
more deductions in my taxes than I was paying them. It _paid me money_ to hire
an accountant.

Technically, yes, one could navigate all of the forms on their own and get
even more tax savings, but that is only the case if you don't value your time.
Since I charge my clients by the hour, and filing taxes often takes several
hours for us in the United States, having an accountant also meant I could
work without worry and make money instead of having to take a day off from
working or stress myself out on my regular days off.

Hire an accountant. Do it right away, you give them a retainer and they'll
have a price sheet of services they offer. They'll ask you what your goals
are, just tell them you are interested in making sure you are in full
compliance with the law, but don't know what you're doing. They deal with
customers like us all the time. They have it streamlined and know exactly what
to do.

------
daleharvey
It continuously surprises me how little programming knowledge is actually
useful in this field where we call ourselves programmers.

Even if you arent building your own startup, knowing how to tradeoff big win
features over engineering resources, understanding the risks of X new tool
over delivering a product, being able to communicate effectively and work
within a team are very typically far more important than raw programming
talent, brilliant engineers will always be needed especially on big projects,
but you can get a long way with a little programming talent and a lot of a
common sense approach to delivering a product.

~~~
bluedino
Look at how mature the industry is. 15 years ago you didn't have the kind of
tools we have today.

------
jroseattle
An OK list of tools. Two I would add at the very top, though:

1) A problem your app solves

2) Users of your app

Seriously, the other items on the list aren't necessary until these two
criteria are met. Then, and only then, will the elements of that list be
necessary.

~~~
ben336
"A plan to make an application that helps real people to make their lives
easier, solving a well-researched problem" is his top item...

~~~
jroseattle
I missed that comment, thanks for drawing attention. I do wish it was included
in the actual list.

------
danpat
That's easy: customers! Everything else is secondary really.

------
techaddict009
"Something you dont need" contains the points everyone focusing on developing
a quick MVP should focus on.

------
maninalift
Why so many articles about how you don't need the cool hip new technology to
be successful? Surely this is a news site populated by people who like playing
with cool new technology.

I don't want to be successful it sounds stressful. I want to enjoy hacking
maths and code.

------
roryhughes
Great article, I often see myself looking to use the latest thing as opposed
just creating a good app.

One thing I disagree with is "don’t anticipate 'potential' problems".
Preparing early for problems which may occur later is very important for
obvious reasons.

------
jbeja
Great article, here some resources that click on me when a read points
addressed:

 _Understand human
psychology:[https://www.youtube.com/watch?v=_X8OEt6QTAg](https://www.youtube.com/watch?v=_X8OEt6QTAg)

_Know how to design, both in terms of UX flow and visual design:

[https://www.youtube.com/watch?v=2tPXgFBzLRs](https://www.youtube.com/watch?v=2tPXgFBzLRs)

[https://www.youtube.com/watch?v=IDYjSdqtNZU](https://www.youtube.com/watch?v=IDYjSdqtNZU)

[https://www.youtube.com/watch?v=7OSkB4BCx00](https://www.youtube.com/watch?v=7OSkB4BCx00)

*And ofcourse the best text editor ever created: www.vim.org/

~~~
cliveowen
>*And ofcourse the best text editor ever created: www.vim.org/

Please, let's refrain from blanket, subjective statements for once.

~~~
jbeja
Tee hee.

------
derengel
Maybe a little bit off topic and probably depends on the app, but how sane is
developing a web app/UI that works for mobile/desktop these days? or is it
just better to develop for desktop and mobile separately?

~~~
err4nt
I build web apps that are mainly for desktop use, but I make sure they're as
polished as an HTML5 fronted can be for iOS and I test on android to make sure
it's good there too.

We have run into issues on layouts where the project leader wanted one thing,
then changed his mind two or three times (and this was after being
implemented) so that view is a little tough to work with now, but generally
speaking if you have a clear picture of what's important to your user it's
trivial to present one experience to mobile users and a very different
experience to desktop users based off the same markup.

The key is is tilling your markup down to the minimum to suit both layouts.
When you have too much markup it gets tougher to make it responsive.

------
Confusion
Too bad he mixes great suggestions with awful suggestions. I use those 'CSS
frameworks, boilerplates and reset.css' specifically _because_ I want to give
_all_ my customers 'good UX flow and visual design'. That would be a lot more
trouble without it, reinventing a lot of wheels, some of which are hard to
reinvent.

How on earth can you give a list of goals to achieve and then banish
technological measures that have the primary aim of achieving some of those
goals?

~~~
ben336
He's not "banishing" anything. He's saying there are some things you NEED, and
some things you don't. You can have a successful webapp without using a CSS
framework. You can't without solving a real, well researched problem.

~~~
Confusion
You can definitely have very successful apps/services without decent UX,
design or researching the problem. The internet is full of examples of each of
those.

------
gobengo
At some point you've made a successful web app, and then you need to make a
successful business and supporting services, and you need to minimize costs
and meet SLAs that are required to secure your revenue.

So the subset for a 'successful web app' is a useful distinction to get
started, but the condescension implicit int he second list just comes off as
ignorance.

------
dpcan
I thought this was going to be a little deeper, but it's physically the TOOLS
(software, skills, knowledge) you need to make a web app... successful or not
really has nothing at all to do with this.

And he forgot a really important one.

1) A genuine interest and passion for the service you are building and will be
spending thousands of hours working on.

~~~
dangrossman
Required for a successful VC-funded shooting-for-the-moon startup, maybe. Not
required for a successful web app. I paid off my student loans and put a
downpayment on a house with a "add reviews with star ratings to your online
shop" app. I have no passion for ratings widgets. I also now host contact
forms for ~1 in 20 Shopify stores; I have no passion for contact widgets.
They're just products, that happen to solve problems for some people that
value the solution. Solutions to most business problems aren't complicated,
thousands-of-hours undertakings.

~~~
amyhoy
What Dan said. Passion doesn't have to be for _topic area_. Passion can be for
helping people, for solving problems (whatever they are), for seeing your work
in the hands of people who benefit from it, for creating a comfortable & happy
life for yourself & your family.

"Passion" is a cheap word. It can mean anything. But it's taken to mean
"something that overpowers your sense of judgment and reason" in the startup
world. Doesn't have to be so.

------
mwcampbell
I wonder if it's safe to add "big-iron client-server database" to the list of
things you don't need. One of my friends is running his production web app on
SQLite.

------
EGreg
A successful web-app yes. A social app? Not so much...
[http://platform.qbix.com](http://platform.qbix.com)

------
Eduard
_A payment processor of sorts_

No, not every web app needs that. It depends on the business model.

~~~
mwcampbell
If you can't charge your customers, you probably don't have a sound business
model.

~~~
jdubs
it may be better to get feedback upfront instead of spinning your wheels on
collecting money. idea validation seems quite important, at least in the
beginning.

~~~
mwcampbell
[http://unicornfree.com/2014/validation-is-
backwards](http://unicornfree.com/2014/validation-is-backwards)

~~~
jakobe
I don't like how every single post on unicornfree tells you that the
conventional wisdom is wrong, and to learn the truth you have to sign up for
their online seminar.

~~~
amyhoy
That is a mischaracterization, don't you think?

Every post I write says that conventional wisdom -- e.g. creating a product
people want & need, and charging for it -- is _right_. And most of my blog
posts are full of value, and actionable things a reader could do right there,
for free:

[http://unicornfree.com/2013/how-i-increased-
conversion-2-4x-...](http://unicornfree.com/2013/how-i-increased-
conversion-2-4x-with-better-copywriting)

People who want more, have more money than time, who value an expert
demonstration, and live exercises graded by a teacher… take my class. But I've
known many people who had more time than money who implemented the principles
in all my free content and turned that into valuable businesses.

Good for them. That's why I put it out there.

------
sugerman
Link bait title and 2 hastily written lists just to say KISS.

------
err4nt
Blood, sweat, and years

