You'll lose all negotiating leverage with those investors and possibly spook them into not investing.

The best way to get people to actually move is to create some competition. Seek out other investors, and when they're ready to invest, circle back to the original folks you were talking with and say "We've had some interest from other investors, and the round is closing NOW [or some short deadline like a week]. Do you want in or not?"

I find an SSD helps a lot. Visual Studio runs fine until I install ReSharper then it absolutely needs an SSD and 8 GB minimum of RAM.

> How about using text files for configuration rather than overly complex APIs (WMI Providers)?

The Windows Registry is more akin to /etc than WMI is. The Windows Registry is clunky, however at least you only have a single interface to program against rather than one per configuration file which is nice. Even XML doesn't resolve things quite as nicely as the Windows Registry.

Do I wish the Registry was better? Sure. Organisationally it is horrifying and there are some strange bugs and workarounds. However I think /etc style text files are a step backwards.

> How about a proper bash shell (powershell is no replacement)

I agree Powershell is not a replacement for bash. It is in fact one of the best command line interfaces ever designed and leaves bash well in the dust (although bash is a bad example of the best the unix world has to offer anyway).

> how about a proper SSH client?

Putty?

If you wish to use Linux, BSD, or OSX the more power to you. There is a lot of great tech' around on those platforms. That being said, your post reads a bit like a troll, you don't seem to know a lot about Windows and seem to be spouting very bland generic "benefits" of UNIX-style operating systems out of context.

Almost like you read someone else say these things then just decided to repost them to get a rise out of people? Some of your complaints (e.g. Powershell sucks) are pretty laughable. As someone who is quite familiar with both Linux in particular and Windows, it is a hard complaint to take seriously...

My career started in SCO Unix, Solaris and SGI then went to Microsoft for years and finally in the past 5 years I am back to almost exclusively Linux and non-microsoft tech stacks. So I have been on both sides, and can say that each has their blemishes and beauty, but I greatly prefer non-microsoft stacks overall.

Like you, I am limited in some ways because I have kids in school, shared custody of my daughter and also really enjoy where I live, so moving isn't really an option. To make it work I do a ton of remote work and collaborate with people from all over the place.

To get started, just release some simple things into the wild on GitHub or pick your platform. You could write your own tutorial on learning node doing different common tasks, like reading files, writing files, network communications, API definition, project structure etc. It would serve two purposes, you learn how to solve real problems via node, and you help others with that same transition. You could even do the tutorial idea but use iojs (https://iojs.org/) to show how it differs etc. People would like that and you would be learning something of value.

As for remote work, it is doable especially now. Nice part about Javascript in general is even the diehard Microsoft shops will accept node more readily then they would say Rails or other tech stacks. Honestly, it does and doesn't make sense to me why that is but I have found it to be true overall.

I had the same thoughts that you're having. My specialty is client-side JavaScript, but my backend experience is almost exclusively ASP.NET. Having switched to a Mac in 2012, I found myself spending more time in OS X and Sublime Text, less time in Windows and Visual Studio. I've started scratching the surface in other areas (Python/Django, Rails, Node), but I really just don't enjoy them like I do the ASP.NET stack.

That being said, with the announcement of ASP.NET vNext and the open-sourcing of .NET Core, I've decided to double-down on the Microsoft stack (installing vNext, learning F#, writing more apps in ASP.NET, etc) since I'll eventually be able to develop ASP.NET apps in OS X, with all of the tools I could ever want.

Do you live within commuting distance to a city that has more opportunities for the type of technologies you want to use? If so, what I've found is that a vast number more companies are open to part-time remote than full-time remote. You might have more luck if you widen your parameters there. If not then there are definitely full-time remote positions out there. They are just harder to find.

Also I would look for positions with a well-funded startup or a small company (opposed to a large company). They are the best bet for getting to use cutting edge technologies while also allowing remote work, in my experience.

I see your point, I really do. It seems like there are management problems within this particular startup. These problems happen everywhere, unfortunately, if management and software best practices aren't in place. At a particularly large ($100+ Billion gross revenue) company, we had the same problem. The solution for me was to just break the management rules. If one of my employees worked all night or all weekend, I told them to take the day, or two, off. I broke the rules. I didn't report the time. I didn't fuss over the PTO policy. I took care of my people and they took care of business and we all won. I felt bad about having to break management rules in order to take care of the very really humans that worked on the software, trying to keep their quality of life in balance with the rules an organization keeps, and to keep revenue high. Those bad feelings lead me to the next point I will make.

There are some software best practices that can solve a lot of these issues. Years ago I began to espouse DevOps principles. Those principles keep people from being there all weekend and all night. High levels of testing and high levels of automation really do help and make a huge difference in quality of life for engineers.

I can hear the objections now. "I am already working nights and weekends, how can I add more to get tests and DevOps in place?" or "my company won't support it!" or even "we have some of that..." Well, if you are up all night for a release, if you are there on a weekend fixing something that is broken, if you are constantly on call and exhausted, you don't have enough. Just do it one step at a time and you will find that you will spend a lot less time fixing things, being exhausted, and being frustrated, and a lot more time making new features for your employer. It's a skill that moves to any environment and any company.

This is why I started my own company. No matter how great the company, you will always eventually be put in a situation where management or sales makes a promise they can't deliver and you, the developer needs to suffer the consequences.

Now, I will only put in all my nights and weekends if I am at least a 50% owner in the company.

Maybe, but this isn't the issue at hand. The issue is that it's easy for employers to take advantage of employees. Just because you're in a startup doesn't mean you MUST be taken advantage of since that's the cross to bear for engineers. That's not sustainable and it's a bummer so many people in the industry think that being abused is the only way to make it to the end zone.

I used to do this; Putting in 80 hour weeks taking 1 day off every 10 days or so -- worst time of my life. I wasn't going to the gym and I wasn't eating well primarily because I had to eat out for breakfast, lunch, and dinner. And at the end of the day, the only thing I gained was knowledge. All of my work is gone, our company is gone, the project was lost and the company that bought our company is struggling.

Living in Costa Rica I've experienced some pretty big quakes including a 7.6 - equivalent to 3rd biggest in 150 years in California - and a bunch of 6.x's. My monitor wobbling is usually my first indication there's a quake, but I don't think there's enough horizontal momentum or force to make it fall over.

.. then it's not surprising. It works similarly with anything, not just asterisks. For example:

",a,".split(",") #=> ["", "a"]

But I don't consider this behavior odd, and it's been the same behavior all the way from 1.8.6 (the oldest implementation I have installed to test with) through 2.2.

Think about what's necessary when splitting up a row of CSV, say (or even some space limited logs or configs). You want that first 'missing' value to be represented in the output as it affects the position of later values. However, you don't need the final missing value represented as it has no significance - it's merely a trailing null value.

Also remember that Ruby has its heritage in Perl with methods like this, and Perl behaves similarly:

Sidekiq (http://sidekiq.org/), a Rails job queueing system, works on related model: open core, paid subscription if you want to host a version with all the commercial bells-and-whistles plus get support. The author does well for himself, deservedly.

I'd consider shipping a bare bones version of the back-end under MIT, letting people spend their own two weeks getting one ready if they want to have it more useful in production, or give them the option of paying $500 per year for your back-end. That's an easy, easy call for a lot of companies to make.

Just to set expectations: just OSSing your thing is not going to cause the world to beat a path to your door. You're going to have to go bang down doors to get this adopted, whether it is 100% free, 100% paid, or some combination of the two. Unless you put in the marketing and "sales" work, you will probably build no community, receive no buzz, acquire no press mentions, and get no meaningful support from other developers. Be ready for this, because three months from throwing most projects on Github you can expect a deafening cacophony of absolutely nothing at all unless you find the people it solves a problem for and, with the best of intentions, shove it down their throats.

I'm as well currently thinking about open-sourcing components of my web application. "Open sourcing" comes in many flavors, and the one I'm mostly favoring right now (for one of my particular components) is a dual license, "GNU AGPLv3 / commercial" combination.

While an MIT and BSD license is (among other things) good for monetizing on consultancy (... not easy for a one-person project), a GPL-including multi-license may additionally allow to monetize on third party modifications of a software component (... that's way easier for a one-person project).

If someone sees a fallacy or gotcha in my monetization reasoning, please comment.

The conclusion I'm leaning towards is that the Saas version should, on top of the hosting/maintenance, offer some distinctive features ( it depends of your product, but on an Saas model, your architecture can be more complex than a Backend/Frontend/DB architecture, thus allowing more advanced features ).

In my view there is three layers, that could be seen as three steps ( but maybe I'm wrong ) : open source ( great for WOM if well managed, great to harden the software ), enterprise-behind-the-firewall license to make recurring revenue and build a sales pipeline, Saas once the architecture is stable enough to handle hundreds/thousands of customers with acceptable costs of operations.

Someone can take your code and set up in competition to you using the OSS version, just changing the logo. But the software is at the end only 30% of a company. What makes a great company is how it evolves with its market to serve and nurture better its customers. Economy is not about selling products, it's about exchange between humans. The real product is in the experience ( the software, the tone, the customer service, the email, the documentation, the ads... every little byte, pixel, sound that your company emits ). A company that steals your OSS and monetize on it without making it a new experience is just like a guy around the corner selling Rolex replicas.

We did exactly this with ShareLaTeX.com (https://github.com/sharelatex) we are a bootstrapped SASS business that started a couple of years ago and now supports 3 people full time.

We have open sourced 95% of our code, which gives people a really great product they can install on their own servers. Along with our hosted version, we have a premium self hosted version with a few things that only the big users would want. I would not personally want to build my business around support/contracts as it is really pretty close to being a contractor.

We were already an established company before we open sourced so I can not speak for how many users it got us. I don't think its foolish todo but at the same time it is not going to make your business.

Be aware open sourcing will add extra burden to everything you do. But starting open source is going to be easier than doing it retrospectively.

discourse.org started life open source and they are doing very well but have some big hitters and finance.

> Is there any examples out there of companies that have actually made money taking this approach?

There are many, whether it fits depends a lot on the product but this open source first, business second approach is definitely not new. See for example MongoDB, WordPress, Vanilla Forums or Discourse.

Sentry is both SAAS[1] and open source[2], but has an interesting history.

It was originally started as an internal tool at Disqus[3]. Its developers were able to open-source it, and spin it off into a side business. The developers then moved on from Disqus to other companies but kept getsentry.com running till it was profitable enough them to go full-time on it.

I'm using the open-source version as part of a solution at $dayjob. So how does this benefit getsentry.com? Well first of all, I'm talking about it here. They could also potentially sell my employer a professional services contract if I needed some level of customization that I can't do myself. Finally, I've contributed bug fixes and code changes which benefit my use cases, but also make it a better product for other sentry users.

So, win/win.

As an aside, the sentry developers are great to work with. Very responsive to issues on github and they seem to be available on the sentry IRC channel almost all the time.

GitLab B.V. CEO here, our business model is to charge the largest organizations that run GitLab on their servers. Our SaaS GitLab.com is free to use for almost all (there is a plan if you want personal support). More than 100,000 organizations use the open source version for free. But our paid offering that offers features that are most useful for organizations with more than 100 people is where we generate revenues. Don't underestimate the needs of larger organizations to run software on their own servers.

It depends on the business. That model definitely works, and another variant on the model where paid solution users get additional enterprisey features also works (single sign on, Active Directory integration, etc). Take for example Chef, which has a paid version and an open source version. Paid Chef comes in 2 flavors, hosted and on-prem. There's also Nagios and several other IT monitoring solutions.

You may want to double check on which license is best to use in this scenario, but it definitely is possible to grow a business using it.

Their software is open sourced and easy for anyone with a server and some technical knowledge to get up and running. They offer a paid for hosted product which is reasonably priced and offers automated updates.

Here's[0] a report on their progress in 2014, as you can see their model is working very well for their product.

Like the other responder caw I think it depends on your business, and it also depends on your target audience.

Open sourcing the wordpress blog platform? Sure that makes sense, the target audience for wordpress are largely technical (to a greater or lesser degree), and want to see what they're putting on their servers. More importantly they want to customise it without limitation.

Open sourcing a productivity application? Hmm, not quite so clear cut. If the majority of your users are technical that's good. But are your users going to want to fiddle with it to the extent that they want it open sourced? I'm really not confident that they will unless you know something about them that I don't? In other words, what is the benefit to your customers in your app being open source?

To answer your other questions...I don't think that you'll get more press coverage about your project just because it's open source. Open source isn't a new thing.

My personal view is that I would launch your app paid for using one of the standard pricing models. See if you can gain traction on the benefits of the app alone, rather than trying to put an open source twist on it at the outset.

Odoo[1] (an all-in-one platform for companies) has been having plenty of success using the open source model. There's a community of partner companies which contributes bug reports, fixes and modules, and builds upon the base platform, and then when selling those solutions to other companies, those contracts often include an yearly support fee for Odoo (the company) itself.

Regardless of the technical merits of the platform (I think it's actually pretty decent, but some disagree), the business model has been working. Some of the clients using it for core business functions include companies with revenues in the hundreds of millions, as well as official organisms.

Open-sourcing your code is a big step, and in doing so, you're essentially gambling on the fact that the services you provide are what's worth money, not the platform you do it on and even if someone else had your tools, you could still do what you do better.

Additionally, I think it depends on how likely your clients are to use that code, IE the model of your business. For example, if you have a time tracking software, a good portion of your clients are probably not strong technology companies. In this case, open-sourcing it, while continuing to develop it, could create an excellent open-source project that is maintained through paying subscribers.

A few examples:

OpenStack[0], is a huge open source[1] cloud operating system. Rackspace runs on them. They've fostered a huge community, all through original backing by Nasa and Rackspace[2]. Essentially, OpenStack is now used by Rackspace to fund their for-profit business, while OpenStack is being actively developed by thousands of people.

Sidekiq[3] is an background job processor, that sells a pro[4] version on top of the open source library. This pro version provides additional user functionality at a cost, allowing funding for future development of the open source library.

Essentially, both these platforms use open source to sustain for-profit businesses, and both had a long term plan for why they wanted to open source a big part of their business. While I think a lot of planning needs to go into open sourcing it, it's definitely sustainable and doable.

The big risk with your suggested approach is that you have no defensibility as there's nothing stopping someone else offering a hosted version of your software. Because of this it's hard to maintain the high-margins typically required to grow a software businesses.

Open sourcing your product also isn't going to magically make it more popular; unless there's strong reasons why a customer would prefer an open source version (i.e. if you're making infrastructure software which you're asking your customers to bet their business on) it's unlikely to have a significantly greater marketing impact than other freemium strategies.

It sounds like what you really need is a go-to-market strategy. Most SaaS is sold through traditional online marketing (ads, seo, whitepapers, etc.) and sales and those are probably the main options you should be evaluating.

Your developing process with opensource model will be much faster, you will always be few steps ahead with your community.Theoretically yes, but those people who will fork and "steal" your project are not your clients you are not targeting such audience, they will never pay for your product (hosted service, support etc...).If they are capable to fork you project, improve and change you code, develop the product faster then you, become your competition, you should hire them :). This is a signal you are failing, something is wrong in your organization/team and you should quit.

I always wanted to try and test this approach, as I am convinced that a lot (most?) of the value in SaaS is in hosting. Operating your own servers is a huge hassle, and many people will gladly pay someone to do it for them.

Also if you open source your code and offer customers a full export of their data you have two advantages over closed source SaaS: Customers do not need to worry about vendor lock-in. And they can depend on being able to continue using your software even in case you ever go out of business.

As mentioned in the comments here, there are companies like MongoDB, Wordpress & Spring Framework (of which its parent company was sold for 420 million dollars) which have open source products at their core and have been successful companies financially.

I would argue though, that many of these successful companies are more platform providers than SASS.

IMHO, your source code is not what makes your product special, it's your service and support that counts and is valuable to customers. There's plenty of examples where at least a core product is open source under very liberal open source licenses, but a company behind it sells support, services, extensions etc around the open source core product. I think that at least companies are more interested in buying your services around the product (guaranteed support response times, customization, training, ...). However I mostly know infrastructure tools which follow this philosophy (e.g. Vagrant, Chef, puppet, various database products etc...).

For an application to be ready for customers there is usually a lot more around it. I've met the guys from codebox.io and gitbook.com and what they did with codebox was, they open sourced the web-ide, however, all the infrastructure they build around the SaaS offering was what actually made it work. While users have the possibility to help improve the essential part of your offering, it will still be a lot of work for someone else to be the copycat.

webhook.com is open source, and an amazing tool. Could a Russian or Chinese developer basically recreate their service for a different market? Yes, but not without significant work. And then, unless they are as committed to making their product awesome as the webhook.com team is, they'll always be looking over their shoulder. E.g as webhook.com internationalizes, etc.

Is it likely someone would try that in the English-speaking market? I just doubt it. Technology that someone else is using and improving but also made available to you will never be a competitive advantage.

This is exactly what we're doing at Scalr (http://www.scalr.com/). Our experience has been the following:

+ An open-source version that folks can download, install, and trial is a great way to get your software in as many hands as possible. However, that's also more work for you: if folks download your software and it doesn't install / has bugs they can't troubleshoot, you're providing a very bad experience, and that will reflect badly on your commercial offering.

+ Research your market first. In our case, it's increasingly difficult / unpopular today to provide developer / IT tools that aren't open-source. In other words, being open-source is becoming a requirement.

+ Open-source offers reassurance to enterprise customers who might not have considered your product otherwise (you're small, and they don't want to tie their success to your survival, but if your product is open-source, this concern is more limited). There again though, it depends on who're selling to.

+ Our product hasn't been forked / used by a competitor. This wasn't really ever a concern. Note that we're following a model where we do open-source releases on a 3/6 month basis (we don't develop in the open); that's a reason, too.

+ We did lose several prospects to our own open-source software, but we also acquired several customers who transitioned from the OSS edition to the commercial edition. the only incentive at this time to choose the commercial edition instead of the open-source one is "support and more frequent updates" (which is good, but not always enough to get prospects to sign you a check). Before you decide to open-source your product, think very hard about how you'll differentiate your open-source and commercial editions (options include delaying updates, differentiating on features, support...).

+ Most of our revenue is now coming from the commercial single-tenant edition, whereas it used to be the SaaS edition. This happened after we pivoted to the enterprise, and made it much easier to deploy your own Scalr installation (it used to be a pretty daunting task).

+ We're not getting that many contributions (probably largely because of the model I mentioned above), and because so far we haven't had the energy to encourage them. In other words: just putting your product out on GitHub doesn't mean some folks from the internet will suddenly start working on it for free. That just doesn't happen. We did get a few very-well-thought-out bug reports, though!

Ultimately, I'd conclude with saying that open-sourcing your product is a solid way to get more attention. However, it's also more work: you're creating a competitor (your own product) that you must somehow beat in deals, all the while making sure that that competitor is solid enough that it doesn't turn people off your product.

Hope this helps!

You can reach me at thomas@scalr.com if you have questions you think I could answer!

----

One last thing that isn't stricly-speaking sales related is people. We have an open-source culture here at Scalr, and there are employees (including myself) for whom that matters a lot.

In December, I open sourced SageMathCloud (https://cloud.sagemath.com), after it had been closed source for years. SageMathCloud (SMC) is a "SaaS product" in which you collaboratively edit IPython notebooks, LaTeX documents, Sage worksheets, R code, etc., in a browser. It is not yet a business, though it may become a business soon. Here's what happened with open sourcing.

It was politically contentious for SMC to be closed source, due the connection with the Sage open source math software project (see [1] for a big thread attacking SMC for being closed, and [2] for a rebuttal). SMC was closed source for years, primarily because my university commercialization office wouldn't work with me unless SMC was closed source.

In December 2014, I discovered that SMC had received some development support from NSF grants that had explicit requirements that all code written under those grants be released under the GPL (very few NSF programs have open source requirements, but the SI2 NSF program recently added them [3]). As soon as I realized this, I complied with the conditions of those grants and open sourced everything. This has had no real impact on SMC development. This didn't surprise me -- many of the other responses in this thread express the same expectation. I wasn't surprised because I started the Sage math software project back in 2005, and grew it from 0 to hundreds of developers (over many years), so my expectations for what it would take to get useful contributions to SMC were realistic -- massive, insanely hard work over many years, many workshops, writing lots of documentation, recruiting developers, arguing for why my project is better to contribute to than the many competitors, etc. Building an open source project is like building a company -- you have to recruit and train every new "hire" (contributor), build up process, sell a vision, etc.

My situation is unusual, since I am balancing simultaneously being both a (tenured) mathematics professor at a university and founding a company. Technically the university can assert ownership over anything I write using university resources (see [4]). However, due to the viral nature of the GPL, it doesn't matter who owns what I write, since I (and everybody) can still use it. I didn't want to use the GPL for SageMathCloud (I much prefer the BSD license), but technically I have no choice.

Foolish? That covers a lot of ground. So much that the only answer is "it depends."

The first thing it depends on is where one is wandering on a spectrum from Coca-Cola brown beverage trade secrets to full on Stallmanism. People can and will disagree about "the right thing" using plausible arguments based on reasonable assumptions [this doesn't preclude implausible arguments based on unreasonable assumptions or the other corners of the 2x2 grid]. We all decide what sort of person to be.

Since this is a common conundrum, Spolsky has encountered it and being Spolsky has clearly thought about the issue. My understanding, and he can correct me if I'm wrong is:

My gut says that Spolsky and Stallman more or less would agree on something like the language of 1]. They don't on 2]. Spolsky takes the philosophically utilitarian approach to "because": if it benefits users, then open source. Stallman takes a philosophically deontological view of "because": Open source always benefits users. There is no 2] for Stallman. For what it's worth, I admire him greatly for that.

Wasabi is FogCreek's VBscript compiler. It performs a specific task. That task doesn't require a math library so Wasabi doesn't have one. The only people who need it are Fogbugz customers for the purpose of using Fogbugz. They don't need Wasabi to have a math library. [wasabi]

The compelling rationale for not open-sourcing it is that it basically sucks as a compiler for the way people usually use compilers. In the very limited use case of Fogbugz, it doesn't suck. It's even good enough for Spolsky. If someone wants to learn about compilers The Dragon Book is better. If they want to learn from example code, there are much better compilers in open source. Is the world better if using Wasabi in the wild just plain sucks and studying the source code leads to poor conclusions about writing compilers? Probably not.

Why not just open source all of Fogbugz? It uses technologies which are licensed under terms incompatible with various open source licenses. The same is true of StackOverflow. They both have free as in beer options. It's a more generous business model than used car lots operate under.

Since you are asking the question, you're in the land of utilitarianism. Utilitarianism is hard because it requires weighing potential harms against potential benefits. That's engineering for you.

I think the world is better for what StackOverflow provides right now than it would be if it provided less but was entirely open source. The pace of improvements that not having to patch bugs on other people's systems allows outweighs the benefits of it going the route of PHPbb.

If you make a program for interconnecting element together (by definition a complex system) it can yield chaotic behaviour.What will be important will not be your code for doing so, but your setup.

You may not want to spread your specific setup, but you can release good brick of your code that may benefit from externalities (the more it has adoption, the more it enforces your position on the market). (virtuous cicle)

You can also release on purpose shitty free softwares blocking the devs from easily be able to use their platform if there are not pro of your complex solution... like systemd (vicious circle, the more it is adopted, the more you block competitors)

I started freelancing 6 months ago and I'm doing ok. I've made the same amount of money I would have made working a regular job but I only have worked 1/8th the time (billable work anyways).

To answer your questions

1. Popular opinion here on HN is to charge by day or per project (considering what value you bring to the table). I found it hard to implement so I found a rate that was reasonable for the kind of lifestyle I wanted. This is an exercise you have to do it yourself. For me I figured out what was my necessary expenditure (bills + insurance, what was enough for me to keep myself happy (books,movies,outdoor day/weekend trips etc.). However as soon as I get my head around actually implementing popular HN advice I'm going to follow it.

2. I started with oDesk and so far have only got 1 project out of it. It was only 3 weeks effort. There is too much competition there and it is hard to stand out AND get good rate. Rest of the work I found through my network. I let everyone know I was freelancing, reached out to everyone I knew and asked if they have any project or any of their friends needed any help.

3. Following things helped

a. My spouse was working until recently so it was comforting to know we will at least have food on the table and pay mortgage. If you don't have any support I suggest build at least 6 months savings first before jumping in or get a contract first.

b. When I was not working I was either constantly searching for work or working on side projects.

c. I had a pretty good previous work experience to bank on but if you don't have any make sure you have some sort of portfolio to showcase your skillset.

1. Charge by the hour. Your rate is not high enough. IMO, start at around $100/hour and see where that gets you. Don't fall into the trap of trying to calculate your expenses and divide them down into 40 hours/wk, etc - that simply doesn't work. What has worked really well for me is asking the question: "How much would I want to get paid to not spend the next hour with my family/dog/whatever is important to you?"

2. Stay away from oDesk, elance, Freelancer.com, etc. You won't get quality clients that way, and you'll constantly be competing with some guy that only charges $8/hr for "expert" level web development. Gun.io has been very nice for me, and going to networking type events in your area could help too. The majority of my business comes from people that I've met in person at an event like this.

3. Make absolutely sure that you bill for each and every hour you work. No freebies. You're running a business, not a charity. Get paid before you deliver the final product. Always have a contract. ALWAYS have a contract. In most cases, don't let your clients dictate technical solutions to their problems. They're the client, but you're the expert.

Regarding a contract, you don't necessarily need to know legalese. Putting the terms in writing is adequate. See https://github.com/cweagans/Contract for an example. IANAL, YMMV, etc.

Get clients through friends, co-workers, previous employers and by going out and meeting people and companies. Start a blog or contribute to open source projects etc. That always helps your credibility and also helps you get recognized over time, but it doesn't happen overnight.

1. In the U.S. most contract placement agencies will charge between $75 and $135/hr per person, except in some of the higher cost locals where it will be more. You are competing against them regardless of what people say, simply because companies will talk to these agencies when looking at projects only requiring one or two people to do over a short period. You compete against them not by lowering your rate, but by offering a solution not a warm body. Overall, I see rates typically from $100-$185/hr in the South East, some try to get $225-250 but reality is I see those people losing deals and/or constantly discounting their rate to get work. Your rate should constantly be going up as you get more experience and successful projects behind you that you can point to, but you'll find the point which it is in balance with the market. Also, discounting your rate is generally a bad idea, don't do it if you can avoid it. A couple of clients have told me before that they think a discounted rate means you know you are overpriced and are just looking for a sucker. Not sure I totally agree, but I don't discount my rate because I never really have a fixed rate, I will vary it by the job, duration etc.

2. Avoid these sites, unless you are outside the US in a low cost nation where you can live on $1-2k USD/month. Use friends, co-workers and previous employers as a first start and go out and talk to people and companies. We have found work on Craigslist a number of times where companies were looking for a "coder" to write their project. I don't get turned off by poorly written ads, or obviously non-technical people seeking help and will call them up and discuss their needs. I have walked away with $40-70k deals this way when some friends looked at the same ad and said it was a waste of their time to call. Fuck it, call them the worse you find out is the job isn't worth your time but you can still use practice on your sales pitch and interviewing potential clients. I have a client right now that I found on Craigslist and called up, that contract ended up being roughly $60k over the next few months, not bad for less than an hours work searching craigslist and calling him up. Of course it took a couple of weeks to get the contract in place etc, but well worth my time.

3. There are a ton of things you need to know, get yourself insured, always have a contract with clients, get paid by the hour, day or week. Demand payments be timely and stop working when they aren't. Small clients I make pay weekly or at worst NET 10, medium clients I go NET 10 and up to NET 30 the larger they get. Accept you will get screwed over a few times with clients not paying or paying slow, just learn from it and try not to repeat those mistakes. Set expectations clearly, and avoid clients you feel are going to have unrealistic expectations, no matter how desperate you are. Don't take on more then you can do, it will just piss people off (rightfully), at the same time, don't turn down work, just schedule it for the future when possible. Don't let small clients drag out the project or let scope creep in. Every client will try, but small businesses seem to be the worst, they will call/email you constantly and always want more for free. Don't let people devalue your time by getting your time for free, you don't have to be rude, but make them respect that your time is worth money.

When it comes to understanding the features and tradeoffs of keyboards for programming, I've never seen a better resource this Xah Lee's Keyboard pages [1].

One of the big things I learned is symmetric C- and M- for Emacs.

I like the MS Natural Ergonomic 4000 because it is designed to sit in a person's lap. I can't describe how much better this is than VT100 knockoffs. And it's not absurdly priced [from a price anchoring perspective].

Take as little as possible, as late as possible. Money comes with a cost (in terms of equity %, interest and/or liquidation preferences).

I suggest you create a simple financial plan. In Excel or Google Sheets, put months along the top, and each line item of expense along the left. Do it on a cash flow basis (i.e. book revenue in the month when you will receive the payment, not when you make the sale).

You can then total up each column to see your net cash in or out in the given month.

Then think about what could make you need more cash. Need to hire some sales people? Possible delays getting paid by customers? Need to scale up infrastructure before the related revenue will come in?

If you want to do this 'properly', all of the numbers in the main body of the table will be formulae, driven by a small set of assumptions (start dates and salaries of key employees, starting # customers, customer acquisition rate, monthly churn %). Then you can play with these assumptions to find your pessimistic and optimistic cash flow scenarios. This will tell you how much cash you need and when, for the most-cash-hungry scenario.

Then work backwards based on how much time you think it will take you to raise money, and when you can afford to spend the effort to do that.

If it's the first time you're putting together a monthly budget or financial model, then start simple. Don't worry about highlighting every input cell in yellow. Just make sure the big numbers make sense. Make 2-3 copies of the sheet (one for each scenario) and adjust manually to something that looks reasonable to you.

Wait until you have customers who will pay for the app, so that you have ongoing revenue to sustain your project as a business. Spend some on marketing. Once you reach up-to a 5-digit figure in monthly revenue (MRR), then try to hire one (or few) dev/devop people so that you can focus on other important areas like business development, sales, product development, customer support etc.

Investment makes sense (and you'll get a much better deal from investors) when you have recurring revenue AND you have to grow fast to the next stage (e.g. from a small team of 2 to a team of 5-10, from a few servers to many, from a local office to globally, from self-serve online sales to face-to-face B2B/Enterprise sales for which you need sales people etc.)

You'll probably need investors when you need the money to scale (more servers, employees etc). Or when investor money will get you significant growth (even when you don't need the money).My personal opinion is that you start looking for investors a month (how however long you think will take for you to get the money) before you deploying it to the rest of the grocery stores. This will ensure that you won't run into shortages of money when you are scaling up.

Microsoft basically bootstrapped for a decade before taking investment. It was in the form of an IPO and made 12,000 current [at the time] and former employees millionaires. It made the two founders and Balmer billionaires. Gates became the richest person.

Maybe you don't need investor money. If you don't need it, you probably don't really want it. The purpose of a business is not to raise money from investors...well maybe if you're running a con, but that's another story.

How quickly is it growing month over month? You want to convey predictable growth over a period of time if you want investor just by sign ups. A lot more to it but if signups are your primary indicator of traction, it's more about what the future holds.

Maybe you could run a Tor exit node, or setup a public mirror of your favorite code bundles. Or you could donate the processing power to a large distributed-computing project like Stanford's Folding-At-Home (http://folding.stanford.edu/).

Or you could always just turn your server into a little bitcoin miner. Probably won't make any money from it, but it might be fun to do regardless.

There's some precedent for this in the contractor-marketplaces like Odesk. They'll have a list of dozens of skills/topics that a contractor can prove their knowledge of. They give them a score based on their performance relative to the larger group who has taken the test. You can see the tests here: https://www.odesk.com/tests but you'll need to create an odesk account first).

There are also a number of coding-challenge sites where you can show off your skills and get ranked, like codeeval.com

Both these types of scoring systems are just rough heuristics though. Since full-stack development uses a lot of "soft" skills like organization and creativity, you'll never really get the full-picture from these kinds of objective battery tests.

1) if I understood correctly, the design of Angular has some inherent, and rather large, performance hits.

2) Google isn't dogfooding Angular save for one project. Facebook seem pretty serious about doing all new developement in React.

3) the specific kind of developement they're doing is similar to the one I have to do right now, viz. taking an established mostly static page and adding bits of highly interactive and dynamic behavior here and there. Google used Angular to reimplement the app from scratch. I can't afford that.

4) Angular, at what will probably the top of its popularity right now, just broke all interfaces and syntax and everything during the passage to 2.0, for reasons that were never fully explained (to me at least). Facebook won't be able to do that without breaking the proportionally large investment they had so far with React.js and incurring significant costs, which is nice and stable and comfortable. If the benefit/cost ratio of React 2.0 (or 1.0, I guess) is acceptable for Facebook, then it will probably be acceptable for me, too.

5) React interacts nicely with their Flow typechecker, which I think is, uh, the safest vector, right now, to foster the adoption of algebraic typing in the mainstream of programming. I won't typecheck my JS before the summer, probably, but still, this is philosophically fun.

I've made applications using both React and Angular. Qualitatively, Angular is way easier to get started, but React "feels nicer" (it's hard to explain, but because you have to handle a lot of the eventing and message passing yourself, you feel like you understand your own app a lot better. Angular is a framework, with inversion of control -- React is just a library).

Personally, when I switched to React, I never turned back. Angular gives you more out of the box but I personally hated that box. I really jive with the React way of doing things and mixins allow you to easily add more functionality like routing, etc.

that's dependent on the problem at hand. Are you building a site that has a lot of moving parts on the same page, that needs to communicate nuanced state changes across components? If so, react/flux is a godsend, since the system will be easier to maintain and customize.

Is your site made up of many different views that don't change much once loaded? Then angular would be a fine tool for the problem. You would likely move much faster initially, since Angular handles a lot of problems with data binding and routing for you.

And finally, are you sure you need either of these frameworks? If you want your front end to consume JSON but it isn't particularly dynamic, something like backbone will probably be good enough. Hell, server-rendered templates do the job in a lot of cases. No reason to solve a problem that doesn't exist.

My conclusion is that meeting user expectations with regard to spreadsheets is impossibly hard. Excel, for all its warts, just sets the bar too high. That "bad csv" that causes problems is handled by Excel - people aren't uploading broken spreadsheets where broken is what the user deems broken not a programmer on the other end.

Spreadsheets are so hard that the resources of Google couldn't unseat Excel despite Google providing web access, simplifying collaboration, and giving it away for free.

It's not getting numbers in boxes that matters, it's the long tail of functionality. Microsoft has been dogfooding its spreadsheets since MultiPlan in 1982. They have more than 30 years of robustness in their sausage.

I've been involved in this space quite a bit back in 2012/2013. I founded Spreadsheet.io to address this problem as well.

I wrote the xls/xlsx/csv/tsv pipeline parser that converts to JSON. Also wrote a native Excel add-in the embeds a JavaScript runtime / REPL for applying JS scripts against local files. Using scripts to extract, clean up and integrate data, etc.

Anyway, thinking about open sourcing it and/or finding a partner of sorts, etc.

I can absolutely recommend sheet.js. It opens an xlsx file in a browser and dumps the data out as json that you can chuck in to something like handsontable.js for the user to view or modify data, then just take the handsontable data and pass it to your backend. If you want to do automated checks you can very easily do that to the json that sheet.js outputs. It's exceptional.

There's an xsl parser too, but if you want to handle csv you'll need something like papaparse.js (which is sort of the grandparent of harb, which is the node.js csv parser sheet.js uses).

You should be asking questions about your tax domicile, double taxation treaties, your personal legal status w.r.t. to this company, cost of extracting personal profits from this company, can you get a bank account as non-resident, VAT rules etc.

Lots of variables there.

Tax offices in most countries have ways of ignoring cute little "bulletproof" accounting setups, throwing the book at you even retroactively (money, even jail time).

I mean, if you're a small fish, you may well slip under the radar. But obviously you're asking for trouble if you set up a company somewhere, hoping for the best, because someone on HN suggested "country XYZ, low taxes!".

For what it's worth, I "digitally nomaded" through Asia on tourist visas, acting as my normal, home legal entity. No problems. But don't take that as legal advice :)

Panama offers a super easy residence visa to citizens of 48 "friendly" countries. If your primary country of residence is Panama, you don't have to pay taxes on non-Panama-sourced income (as long as your country of citizenship doesn't tax you on your worldwide income as a non-resident). Panama corporations also don't pay taxes on non-Panama-sourced income.

From Panama City it's a 2.5 hour flight to Miami, 5 hours to New York / Toronto, about 7 hours to LA / Vegas, 10 hours to Amsterdam. Copa airlines has its base in Panama city and operates direct flights to many US and South American destinations.

A lot of people in Panama speak English so it's fairly easy to get by even if you don't know much Spanish. I found people in Panama City to be very friendly and helpful. Panama City also has great infrastructure, Internet, roads, apartments..

If you're a citizen of one of the 48 "friendly" countries you can be a legal permanent resident in Panama is a matter of months for under $5000.

And if your profession / business is global and online, you can likely break free of highway-robbery tax rates and the mind-numbing, time-wasting accounting / reporting requirements of your home country by moving to Panama.

Unfortunately for US citizens, they're still on the hook for US taxes even if non-resident in the US. But for citizens of 47 other countries, Panama is just about the #1 easiest and most practical residence option on the planet at the moment.

This depends highly on your country of citizenship, as well as country of residence.

Americans have it different than most others, because they are taxed globally.

A true 'digital nomad' without set residency somewhere might also encounter problems, because certain countries might challenge the tax treatment of certain transactions. (depends on if you're selling your own stuff, or doing consulting, for example)

Talk to a lawyer (or law firm), see legal500.com (-> tax) for some recommendations. A firm in the country you're currently residing in is a good starting point.

I can't give you and advice. But I'm observing a lot of foreign companies (software agencies) getting full residence in Bolivia like Cochabamba y Santa Cruz de la Sierra, I had friends working as full time programmers and doing consulting for this companies, and I had heard a lot that the owners prefers to stay here and pay taxes here, for what I know is useful for UK, Canadian and France citizens.

Here in Boliva we typically complaint about taxes management and government regulation, but looks like is a breeze compared to other countries.

It would be extremely helpful to know what the company you wish to form does. If it's product-based that's very different from service-based... and if it's an intangible product that'll be very different from a tangible one.

If not legally, in practice. With the nomadic piece, you have a certain amount of momentum that makes it hard to pinpoint your origin, so you might be giving up freedoms by putting a flag in the ground when you don't need to.

We're taxed on personal income worldwide, with small exemptions for living overseas/based on tax treaties, etc.

But on the corporate side, can you incorporate in a 0% tax location, then leave the money in the corporation? You'll be taxed when you pull it out, but if you leave it in then you have a larger capital base to re-invest, and can grow the money faster. Then worry about taxes when you take the money out.

Is this plausible? Can you own the corporation outright without any tax implications, or would it be more ideal to put it in a trust or foundation type of ownership structure?

And obviously a lot of here us are doing digital/mostly online businesses. Could you open a US based LLC that is a subsidiary of the foreign company, for passing through Stripe payments, and for managing your salary payments?

Ideally you'd want a business entity that is as inexpensive as possible to maintain but provides liability protection in case you're sued. Then you need to consider where you will be "registering" this business (apart from the original country) as a foreign company because that will involve expenses, tax, etc. Finally, if you're just one person, not really renting offices, not really hiring employees in the country where you are operating you need to ask yourself do you need to really register in that country as a foreign company and who would know if you didn't.

My company has been thinking of creating a sort of "world company" package for people like you: solid main entity (Wyoming LLC for example); globally accessed banking, mail scanning/forwarding, etc. I'm curious if that would appeal to you (or anybody else on HN). Email me mattknee at google's mail system if so.

Now? Estonia. Hands down, Estonia. Although I haven't done it myself yet, I intend to, simply because it now makes an incredible amount of sense.

In case you don't know already, Estonia is offering an e-residency program[-2]. For the time-being it requires a quick trip to Estonia to get this (and it's open to everybody regardless of nationality), but afterwards you can run and administer a company remotely with this smart card. (Bonus points for the fact the smart card reader plays nicely with Linux as well as OS X and Windows.) Soon you won't even need to show up in Estonia, but will be able to register as an e-resident at one of their consulates.

Estonia have made it pretty straightforward to run a business there and it doesn't appear to be especially expensive to start an Estonian company either. To the best of my knowledge you can deal with the government entirely online and IIRC in English too. (This is a big deal because some English-speaking countries like the Netherlands have tax offices that are forbidden from speaking English unless they come out to you in person, even though all the staff are fluent. I hear this might change in the Netherlands in the future.)

Banking in Estonia appears to be awesome and developed. Stripe isn't there yet, but Paymill is.

Estonians are fluent in English and just about everything the government, banks, etc publish online is in English. The Estonian government even translates some of their laws (like the ones pertaining to companies) to English too. They might be translating others but I've just never looked.

To the best of my knowledge, Estonia didn't really implement the EU cookie directive. They got a slap on the wrist for it but no Estonian site (even big bank and government sites) has those "y'all accept cookies?" banners. That's a good sign.

The biggest downside to Estonia is its size. It's going to be a ghastly nightmare to hire a decent number of staff if you want them to be all in the same building in Estonia, but hey, why not just run a 100% remote company? But cross that bridge if and when you come to it. You can always just open up offices in other cities around Europe or other places.

Right now I'm in the United States and I'm forming a Nevada Series Limited Liability Company. I needed a Registered Agent to do that, but the question came up for me: how long do I need to be somewhere, and what kind of mailing address do I need, to not even need a Registered Agent?

Nevada has no State tax, but there's still Federal. I'll be watching this with interest on the tax piece... otherwise to me, in this country, it seems like Nevada is the way to go.

Do you need to register a corporation? Or do you just need a legal entity other than yourself to pass your earnings through? Will you have employees? Partners?

If you just need something simple with no employees partners then you probably only need the equivalent of a u.s. LLC which separates your business income/debt from your personal income/debt. Find whatever the equivalent is where you're a resident.

If you need an actual corporation then it's much tougher. Where I live (Switzerland) you need to start out with a lot of capital, probably need a lawyer and an accountant, etc.

It will get complicated if you need to register a corporation outside of where you're a resident and paying your taxes.

I moved from Germany to Paraguay. When I work from Paraguay I have to pay 10% income taxes (it does not matter if I do it as a person or a company) and if it is for a local client another 10% of VAT (IVA). When I travel and do onsite jobs in other countries the Paraguayan government does not demand any taxes.

To get permanent residence you need to visit Paraguay, proof that you have a fortune of at least 5K USD and run around a few days between different agencies. I helped a US citizen some month ago with his residency and we had everything together in 4 days, it would have been 3 if we not had forgotten one paper.

The answer is not, "um, it depends on X", which usually indicate a lack of understanding of the problem as well as a lack of knowledge about the solution. People, especially tech nerds which tend to have ego issues, need to learn to just say "I don't know", or to simply not answer a question that they don't know the answer to. It doesn't depend on anything. The best place to register a business for international travel is the same as the best place to avoid having to pay taxes on your income, while maintaining impunity. The Cayman Islands, for instance, make for an interesting conversation. The only real problem that you have to be okay with breaking a few laws. For instance, if you are traveling in countries that require you to pay income tax for income earned while in their country, and you are working for an American company of the contractor, etc., technically you need to pay taxes there, but most people in the situation would not. If you are okay with breaking those types of laws, then your best bet is just to find a place that is willing to hide your information, hence the Cayman Islands. Now, the Cayman Islands won't work for everyone, because you have to have a significant investment to found a company there, but you can do this and other places with little or no investment, such a Belize, or any number of tax havens.

"I am not a lawyer or CPA and this is not legal advice. It is for general guidance only. You should work with an attorney and a CPA for specific professional advice.

If you're American, this gets really sticky. The US taxes you on your worldwide income. If you have a US corporation, it is also taxed on worldwide income, so it can be double taxed. And foreign corporations in the US are taxed on US-sourced income.

However, there is a loophole. If you own a company outside the US, and the company earns money outside of the US, it's only taxed in the US when the money comes back into the US. So, many people have companies registered abroad (Hong Kong is a popular jurisdiction) and money earned offshore is accrued in the foreign corporation. Expenses abroad are also paid by the foreign corporation. So, you can effectively avoid the money being double taxed (paying personal income tax only) if you earn money offshore and your offshore corporation pays your salary.

Also, if you're working abroad, it's not a vacation. A lot of things you spend money on are legitimately considered business expenses. So, if something is a business expense, pay for it with company earnings that haven't been taxed.

Now, what about paying income tax in the jurisdiction where you were living abroad? Typically, countries only tax income sourced within the country, and many countries have tax treaties where income is only taxed once. So, for example, if you're living in China, a country that has a tax treaty with the US, and you're paid by a company outside of China, and you pay taxes in the US, you don't actually have to pay taxes in China. Technically you are supposed to file there (at least in Beijing), but this isn't actually enforced unless you're on a Z-type visa and you are working for a Chinese company. And, if you're on a tourist visa pretty much anywhere in the world, you won't owe any tax in the country you were visiting. As best I know, no country in the world charges tourists income tax!

One thing that WILL happen if you're living abroad, and have foreign bank accounts: You will get audited if you claim tax exemptions that apply when you live outside the US. In my case, this came in the form of a letter to my Chinese address which basically said "prove you're really living in China," and gave me a list of documents to supply as evidence of same. There was a list of 8 or so things, of which I had to supply 3. I just sent the IRS everything on the list (not only 3 of the things, but all of the things), mailed the package from Beijing, and I never heard from them again. I think they just wanted to make sure I really was living abroad."

.hk = low personal tax (none, unless resident >3 months/year). can open business and bank account within 2 hours (pay an agent). first world level of service. less US-friendly and more fun than .sg.

.cn = low chance anyone will come looking at your balance. basically no tax. nice forex trajectory for CNY at the moment. only way to really do business in china. possible to convert inbound international SWIFT xfers to EUR/USD/RMB cash, even without a bank account, with any foreign 'id' document. online banking is crap. foreign banks are barred from providing most services despite china signing to the contrary when joining the WTO. ~impossible to process card not present credit card transactions. its bladerunner meets monkey magic meets the land of opportunity. taobao is a big win if you ever do hardware sourcing.

other countries in Asia tend to lack decent english or infrastructure, but may provide interesting fringe benefits (eg. IIRC Philippines gives you permanent in/out visa with a property purchase, has lots of good english speakers, though they recently dropped their relative bank secrecy to US pressure)

I believe the first $100,000 in income is not taxed if you live outside the US for at least 330 days out of the year. This is for federal tax. If you are registered in a state with no income tax, then you would pay zero tax on that first $100k.

I feel... confused. Knowing that the key to monetary success in this world would require I turn into a person I could no longer be proud of. So I'd win, but I'd lose.

I feel angry, knowing that there are people in this world who knowingly work to make things harder for others.

But that's the world we live in.

I'm slowly coming to the conclusion that the only true success in life is that which you create for yourself. Doing something you believe in. Providing for your family; contributing towards the community; making the world a better place. Everything else is just a proxy for that.

I am currently between jobs with nothing on the horizon, because I chose to leave a place, a career, that I felt was abhorrent. I don't know how it'll work out. I could end up as one of those statistics; an unemployed or underemployed graduate. But there's no other option but to keep on trucking - if you think you have potential, anything else is a waste.

- Why do you want to go to Stanford, MIT, Columbia, etc.? There are probably tons of great options that are cheaper and more accessible to you if you want to get educated. Don't make that dream an impossibility by creating artificial barriers. Do you just want to go there because it seems sexy and it'll make you look cooler? Be careful not to value status over substance.

- Life is short, you should do what you want to do. The transition probably won't be as painful as you think it is.

- The grass is always greener on the other side. Right now someone in some dirt poor country is wishing he was you and had the opportunities you had. They may not have the opportunity to change things, but you probably do.

> Just immerse myself in full-time learning rather than working on unexciting web dev work and doing fragmented self-learning in my free time (which is what I've been doing for years, and it's terribly inferior to full-time, uninterrupted learning.)

The advantage however of self-learning is you choose what you want to learn, how you want to learn it and the pace. You don't need to jump through the hoops of writing essays or passing exams.

I am not sure what university is like in US but my experience is you get a lot of core topics you have to cover whether you like it or not. The pace is set for you. I found most of the time it was too slow but then sometimes too fast.

Someone else mentioned ITT a list of famous successful (as in money) people and said they had been to top universities. The question is do you want to build a $10 Billion dollar business and all of the responsibility and sacrifice that comes with that?

Or maybe you would prefer to be something like the anonymous creator of Bitcoin. No certificate required for something like that. Or create something to help lots of people for little profit. Or maybe simply doing a PhD and enjoying the subject is enough.

Forgive me for bringing some political thoughts with me into this thread, but your post really resonated with me and I think you are a perfect example of why we should work towards a basic income. Imagine how many people there are who are just like you, who can't afford to pursue their ideas due to financial or social constraints, yet have the potential to solve global problems (or at least contribute to their solutions). We are wasting so many brilliant minds by forcing them to grind from 9 to 5 in order to support themselves and their families.

To me it sounds like you don't like the work you do, and going to university to do an undergrad won't get you a better job (assuming you still want to work in tech?). The best way to get a job you might like more is to learn some new skills and pivot your career.

I'd also like to mention that going to a prestigious university has generally no bearing on the jobs you get, it's the people. As a result hiring companies (in the tech sector) don't really care where you came from as long as you can prove your value.

Yes I definitely feel I'm not being utilized properly. However, I've been making strides to correct that. My current work went from full software dev with cool new tech like WebGL to having to repeat data entry work (3 or 4 times) because of incompetence within corporate. To get myself out of this I work on side projects and currently attending grad school via OMSCS at Georgia Tech.

Any time I find myself thinking something remotely close to that, I realize that I won the lottery of growing up in and being able to call North America (or more broadly, Westernized civilization) home. I certainly have more control over my path here than I would almost anywhere else.

Haskell claims cross-compiler support for iOS and lists some ways to get it to work on Android.

Probably be easier for the non-GUI parts. Networking and filesystem is probably trivial. It doesn't sound like you need much access to the device otherwise, but that would be something I would check before using -- they probably do some kind of native-bridge.

Perhaps the QR scanning connects the phone and the browser via some token stored somewhere and used to both authenticate and send/receive messages.

Think of the "token" as a channel. Phone sends all messages to that channel. Browser gets messages from the channel.

This is obviously not the whole picture. For example, the web app can scroll back and "load" previous messages.

It's weird though. Why would they go through such a router? It would make a lot more sense to just use the QR scanning to authenticate, and then let the browser receive messages in the same way that the phone app does: directly from the server(s).

The QR code contains data unique to your web session. You're already authenticated to WhatsApp on your phone. So the data in that QR code is sent back to WhatsApp's web server, through your phone, and they connect the open web session to your account. Websockets make it seamless.

(Note: I have an iPhone and so can't test it myself, but I can read the client js code)My guess is that they are routed through the phone. That's certainly something that Apple would have a hard time allowing which might explain the android onlyness. They are clearly using WebSockets and the phone receives messages but only in so far as the phone. For a E2E encryption they would have to routed through the phone, which it seems they are from the look of their code. Again only guessing, someone should packet sniff it and lmk.

This allows me to see exactly what's hitting my server and not trusting any third party skewed "summary" analytics offerings.

Have few paying hosting clients that are paying for it, so it's essentially free and clients are happy.

If I'd get busier with offering hosting services to other i'd probably get faster server and add cloud Linux to it as well, but my passion os not exactly service administration and hosting, so it works for me as is, pretty ok.

You talk about techniques and tools. Having seen the movie, I think that Jiro's most important quality is his passionate dedication to satisfying his customers with a high-quality product and experience. This doesn't have much to do with his tools - the tool set of a sushi chef is quite limited, and hasn't changed much over many years. Any other other sushi chef would use the same tools. The intuition he uses to select his fish in the market and how he presents it to the customer are more important than what kind of knife he uses.

I think Jiro-like programmers would similarly be distinguished by their mental attitudes, and not by their tool sets. For example, satisfying the customer - by creating code that's reliable, secure, easy to use and cost-effective - would be their most important goal. Their own satisfaction would be derived from fulfilling those goals, not from getting rich or using the latest trendy frameworks. (I have nothing against people who want to advance their careers or build billion-dollar companies, but that's not what Jiro is about. After all these years, he still has just his one hole-in-the-wall sushi bar.)

If Jiro was a programmer, he certainly wouldn't limit himself to one programming language or editor, just like the sushi chef doesn't use just one tool.

He would use all the tools that make it possible or easier to write good software (version control, tests, continuous integration, possibly code quality metric tools) without being married to one in particular. He'd switch to better languages and tools as he becomes aware of them, as far as the switches are practical.

He would have a broad overview of the underlying theories (algorithms, computability, complexity, various fields of math), and dive deep into those that matter for the problem at hand.

He'd write clear documentation that the end user can understand.

He'd continue to evolve his tools and skills, and where he finds the current tools lacking, he'd improve on them, or even write his own - but only so far as it doesn't distract him too much from actually producing the software that is his focus.

He'd be aware of his customer's requirements, and equally important, of the goals behind those requirements.

He would be aware of security and moral implications of his software, and refuse to compromise on them.

He wouldn't rant on hackernews, but be available for mentoring to those who strive to imitate him.

I used to tell the students I TA'ed that their first task -- assuming they were physically able to do so -- was to be able to type at 60wpm with high accuracy, without looking at the keys. Many students, and indeed many professional programmers can't, and I'm increasingly convinced it holds them back [1].

Surely at least until you can type quickly and accurately, you're not going to get much out of learning to use a complex editor like emacs or vim, and indeed most command-line tools are going to be a chore to use.

As Jeff Atwood says, "When was the last time you saw a hunt-and-peck pianist?" [2]

Aside from the obvious factors like desire and technical ability, the single greatest motivator to being an excellent programmer is the pursuit of perfection while simultaneously understanding that it is impossible. Building something that is never complete and ever-changing really boils down to how many bad ways you've done it before and knowing which ones to avoid in situations.

The only excellent programmers are the ones who've written a million lines of terrible code and understand which methods have the best probability of achieving a decent deal of success before the inevitable refactor (anyone can pick up a book and turn everything into a Factory).

Write shitty code - each session is a brick in the foundation of an endless skyscraper which gets more complex the higher you go. At some point you'll start to program with the foresight to make your code easier to change down the road without breaking everything and causing headaches. That's really all that anyone needs in a programmer - making the future easier while allowing the present to function as it needs to with as little issues as possible.

At some point you'll work on code made by inexperienced programmers that's been built upon for years. If you are experienced enough, that code is actually the most interesting thing in the world to transform and simplify.

tl;dr: Languages, tools, ides, setups are all insignificant if you've implementing patterns in every wrong way as possible. Knowing what not to do is more valuable than knowing one way to do it.

Personally I don't think that programming can be compared to sushi making or any other craft. I know this goes against majority thought in HN, but I think intelligence is the most important thing for a programmer, followed by domain/language specific knowledge, followed by appropriate choice of tools.

I think the market reflects my assessment, where young smart developers can get paid a lot more than much more experienced developers. My view is also consistent with the common advice I see on HN, which is to develop deep expertise in a popular language/technology, and ensure this knowledge is always up to date (as opposed to mastering the art of programming in general).

Having your tools where you expect them to be and mastering them (shortcuts, how to save keystrokes, how to type efficiently, how to perform daily/repetitive tasks with low friction) is key factor. Personally this is the reason why I use VIM over some modern IDE, i value more being fast and keep improving over the years than having the latest feature which is likely going to slow you down due to lack of consistency.

The beginner's mind - http://en.wikipedia.org/wiki/ShoshinAvoid at all costs to close yourself inside your craft and job. Avoid strong opinions and realize that you will never know enough, you'll likely keep learning from others and improve, this is why you should keep over the years the beginner's mind.

I had an interesting debate with a coworker the other day. We were talking about HS level students and how to get them interested in programming and what skills they might find useful along the way.

I used to be in the "math all day every day" camp. My perspective has shifted quite a bit. For non-English speaking countries my recommendation would be...English. It's pretty shocking how many HS students are taught and/or write code in German here.

Learn to think/communicate in English as quickly as possible and learn good search/selflearning skills would be my #1 recommendation. Followed by "work with other people as much as possible, especially if what they do is kind of strange for you (artists etc.)"

It's not really mastering your craft and more base level but you have to start somewhere.

An absolute prerequisite for learning to program is the capability to reason about causes and effects -- both forwards (determining what the effect of a particular statement would be) and backwards (creating a list of candidates for what may have caused a particular observed effect). All else -- design, architecture, algorithm complexity, debugging -- follows from this. And it is a rare skill. Cultivate it in yourself and you will go far.

You don't get it. It is not about if there are some tools that are better for his vision or not. Each artist is different. It is what facilitates the vision, your vision. What tools best allow you to express it, those are the ones to focus on.

A bit dull, but the ability to take a vaguely described problem, turn this vague description into a clear definition, split it into smaller problems, prioritize, and stay on the task until it is done. Don't have your head in the clouds, don't leave a trail of unfinished projects behind you, write code that you're proud of, practice the art daily.

Is it even comparable? As a developer I can create my own languages and tools. As a sushi chef you cannot genetically engineer new kinds of fish - only new combinations of existing stuff. Don't forget that programming is not a craft, art, or science. It's a combination of all. Sushi making is lacking the science component.

Clearly, everyone commenting here must be doing so from the position of believing themselves to be good programmers with pure skill sets already in place. I have to include myself in that assessment, of course. But, note how we are all a little different. Or a lot. So I agree with those who emphasize attitude, although even in that there is a lot of wiggle room. What we have are anecdotes, not prescriptions - we can tell our stories but you know, really, everyone's path to mastery will be different. Different drives, different talents, different happy accidents. But, much time, much dedication, much passion, and not only freedom from the fear of making mistakes but rejoicing in them - opportunities for learning, and the shorter term the joys of debugging and problem solving.

For, if one does not love the journey for itself, one will never stay the course.

For myself, I fell into computers as a career entirely by accident, aided by a perceptive girlfriend's advice when I was down and out as a 2nd year Physics undergrad in 1967, forced to drop out by family issues. No degree, 19 years young, and basically a C student. She suggested I seek a job as a programmer.

Not surprisingly, none of the big 5 were particularly interested despite my perfect scores on their aptitude tests. (? what ?). But one passed me on to a different track at a sister company, and to my great surprise they hired me on the spot to debug their computers as they came out of manufacturing. I have no idea what they saw in me, but it was a revelation. I could do it. From day one. Room sized hand built discrete component monsters. Elliott 4100 series.

And ever since, that job included, I have always been surprised that people want to actually pay me to do what I love, and to ride out those unpredictable deep thought intermissions when nothing apparent is happening with me. That I am still fully employed, at senior technical levels, is I think a token of how I am perceived, and I take it t be my qualification for commenting here.

So. Passion. Joy of challenges. Endurance, persistence, and open to the luck of the draw wrt career path (mine looks like a classical Drunkards Walk - transistors to pixels, ALU to 4G graphical language design). Always learning, always doing new stuff, always going where no-one has gone before - and short of an academic career this pressing out on the boundaries has to be pretty special to computers.

And the tools. The original question. There is no prescriptive answer to that one. For every project, often even every phase, there are new things to learn and invent, and the invention part usually has to include custom tools. And, personally, I gave up learning the current technological SOA in tools just for the learning, because typically by the time they became the right one for a new task they were already outmoded and something else was in vogue. So my tool focus is whatever helps me do the work right now. Picking new tools and technology up quickly are the key. And I don't think that can be taught. It is one's mental toolkit that is the key, one's habits and tricks of thought and problem solving in their most abstract meanings. And I believe only love of the work brings those forth. Because we are all wired differently, some more differently than others, and we all have different satori moments which result in the laying down of the memes of Mind that shape those tools.

In short, stay awake, and pay attention, and love what you do. The rest will take care of itself.

Oh, yes, one more thing. Think of the poor folks who have to maintain what you did after you have moved on. Or, as was my painful jab for this, even if it is yourself six months later. Style is a tool unto itself.

Like others have said -- ability to type without waiting any mental effort in the process and reading a lot of code helps.

However, I'd like to stree the one thing that most programmers ignore or worse still are unawre of -- Programming is NOT like making sushi simply because it is NOT a singular, individual effort. Programming is a social activity, even if you never ever meet another developer in person -- coding is communication -- it is communicating the the authors of libraries and tools using the APIs and interfaces that they have created ...while also creating your own 'story/conversation/...can't find the word for it'

To repeat the Hal Abelson quote in the context of what I am saying:

> Programs must be written for people to read, and only incidentally for machines to execute.

Unlike sushi making, programmers collaborate. They build on top of each others work. So in this context, another skill that's extermely important to cultivate as a programmer is the ability to communicate intent both via code (ie: modularity, good stucture, good variable names ...etC) and otherwise (documentation, following standards so that you don't surprise your 'users' -- who could also mean other developers, ..etc) are important as well.

So, on a higher level than specific skill, I'd urge you to stop thinking of programming as a sole activity that you indulge in. A lot of good programming advice (like the quote above or the robustness principle[1] or 'There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.') when seen in the light of a 'more-than-one-person' activity suddenlly make a whole lot of more good sense.

The first step is defining the goals/requirements of being a programmer. The generality of such a question makes any answer hard, and likely cause one to stray from the core. I will try to keep what follows pure as possible, and disregard specific skills required for web development vs. low-level systems vs application development, etc.

Having watched Jiro Dreams Of Sushi, his task is to provide excellence in food, in service, and overall experience. And at the root he needs to understand each component of the food and the service intimately, so that he can put them together in a way that is both pleasurable and fitting to the customer. He uses what he knows and the resources he has to create the best dishes he can.

For a programmer, the core of our trade is algorithms, and their combinations. You may not need to know them at the smallest details, or even that they are called algorithms, but to accomplish anything you will use them. Combining larger programs together in a specific way to perform something novel is an algorithm, though we may not call it that.

Next, data structures, understanding how to store information in a way that your algorithms can use and alter. This underlying knowledge is key to creating larger things from many small things.

Next, simplicity, combining logic and code together to accomplish the goals alone is not enough. While it may be simple to combine large things together, the question should exist of whether it could be done more simply. Simplicity can be hard to accomplish, but is easy to appreciate. Simplicity means avoiding cleverness, if possible, as it can make the program hard to be changed or maintained. Simplicity is elegant refinement, which leads to doing small things very well.

Those three things, in my mind, are the only pure things necessary to being a programmer. Algorithms, data structures, and simplicity.

The reasons none of the other things apply in my mind to the overly-general title of just programmer is that they are not required by every programmer.

Text Editor - Cannot pen and paper be used just as well in the task of constructing a program as a text edit?

Programming Language - Maybe I could have leniency here, you do need language to describe yourself, but not necessarily a programming language.

Databases - This is much higher-level than a regular data-structure, and as such isn't a necessity. Applies more to specific fields.

Algorithms - Yes, even if not known by name.

Math - This isn't a requirement, though it is a nicety. Some get by without knowing much more than the very basics of Arithmetic and maybe a little basic Algebra. It applies more to specific fields.

Debugging & Testing - These aren't necessary, but they help ensure quality or finding issues.

Documentation/Comments - If the code is simple enough, it should describe itself. That isn't to say documentation and comments aren't important, but they aren't necessities either. You should describe as much in comments and documentation as necessary, to provide clarity and usable instruction, and is a great skill to have.

I hope I've explained things clearly enough. Knowing one's craft is understanding the fundamentals, and that comes much further ahead of the tools one uses, within reason. In my opinion the single best thing for describing the craft of programming is the Unix Philosophy[1].

For sure, for sure? A year ago, sailing in French Polynesia (aka "Tahiti").

If we were in a largish town on a more populous island, we might get WiFi, but never for anything better than a quick email and FB check, and posting one and most two pictures, but more generally we had 2-3-4 day stretches with no Internet access over the course of two weeks. During some stretches, our world was quite literally the 9 people on the cat.

(But I still had tech: Took pictures and read books on my mobile. Once back on land, streamed a Senators-Canadien game, that felt like paradise, 'cept the Sens lost....)

Last fall, on a weekend retreat. Hardly any cell signal, let alone data, and dialup, had there been any, would have been 56K at the most. Full 36ish hours with no contact at all with the outside world, just my wife, the three other couples, and the retreat leader.

And the occasional weekend here or there when I just unplug. Read an actual made-of-pulp book. Draw, snowshoe, go wheeling, play music, cards, or Carcassonne.

Losing my job last year made me re-evaluate a lot of aspects of my life, since April, I spent time off the internet; though to be fair, until September, a good chunk of my 'offline' time was burying my head in a bottle. (Just FYI, terrible idea - you torch a lot of long term memory that way from the drinking period).

Weekends, after starting to overwork again, have stopped being for the internet and more for phone calls, or outside, or cooking epic food. Anything analog. Digital will still be there if I grab my phone, but, I'm trying to remember and learn how to live life in 3d.

This summer I went on a 3 week road trip around the Southwest US. Went to 7 or 8 national parks, camping mostly with some random hotels. I had access to mobile Internet but I wanted to experiment with a full 3 week news hiatus. In that time I didn't use the internet on my phone (except navigation when lost), read any newspaper, listen to non-music radio, or watch TV.

The strangest thing was that when I got home, I really hadn't missed anything. In a normal day I read dozens of articles and consume news from so many sources that when I got home I expected to have to catch up. But I really didn't. I think we consume a lot of information just because its there, but so little remains relevant a few days or weeks later.

A couple of years back I went on a week-long hike deep enough into the country that I had no internet, no AC power, etc. While I was away from the internet, I realized was how often I was interrupted by useless emails, so when I returned, I unsubscribed from dozens of email lists I had ended up on over the years. I didn't realize the sheer volume of lists I was on, because it happened gradually, but some time away helped me realized how uninterrupted my life could be and how useless the information I was receiving was.

I still find myself clicking "unsubscribe" quite often, or opting out of email lists when I sign up. I don't miss the additional interruptions to my day.

I did a week-long hike in the Los Padres national forest about a year ago. It definitely took a few days to get used to having no communication. (I still reached in my pocket to check my non-existent phone once every half-hour like clockwork). The first 24 hours were nerve-wracking, all I could think about was "what if something crazy happens and nobody can reach me?". But after a few days I just forgot about it, the internet just wasn't something that crossed my mind.

I spent a month cycling Corsica and Sardinia late season in 2013, just sleeping on the beaches and in the forests. I brought a smartphone but never really used it, there's not much in the way of internet deep in rural Europe but when you see stars everynight, who cares? After all that time without any news I remember reading the Guardian when I reached Calgari, there was a massacre sadly much like any other but unlike anytime before it moved me to tears.

This is timely. I am planning to spend the next few nights free of my laptop. I usually browse the web and plan massive things in my head, but I haven't written a line of code in my spare time in a week or so. I think I am burned out and could use the break, even if it's just for a few hours.

The last time I went without internet connectivity was 3 years ago, celebrating my two year wedding anniversary with my wife in Dominican Republic. The hotel has wifi in the lobby area, but I learned from a previous trip that it was an exercise in frustration trying to get anything other than pure text.

Before that? Every other weekend or so. I don't own a smartphone, and I make a point of staying offline most weekends unless I have a major email backlog to deal with, or something specific to look up.

Even when working on personal coding projects I prefer to stay offline during weekends whenever possible. Very, very useful strategy for maintaining sanity generally, I find, and for making time available for more useful + deserving sources of interaction and stimulation -- like books, music, movies, paintings, architecture, natural scenery, animals, and people.

3 years ago is the last time I remember. It was on a 2.5 day camping trip. At the site we went to, there was no cell coverage without going down the mountain, so the cell phone was turned off, and I didn't bother bringing any other devices. It was nice.

It's hard to have that type of disconnected experience any other time than vacation since my job relies on using computers all day. Maybe one of these weekends I should switch off the phone...

The week before Christmas so about 5 weeks ago. I booked a very nice hotel in Nha Trang for a 3 day trip and not taking my computer was a very deliberate choice.

I didn't suffer from any withdrawal symptoms, although I napped a lot (which I normally never do) but that had more to do with 1) not sleeping well the night before on the way there and 2) my employer knowing I was unreachable.

To gain access to the internet you were required to goto the business center at one of the government hotels. The business center sold 60 minute time cards issued by the government for ~$15. These cards would have a unique code that would grant you limited access to the network.

Unfortunately for 7 out of the 8 days every hotel I went to had ran out of these cards meaning no connection to the internet whatsoever.

2007: I took Amtrak on a round trip from the Seattle area to Beaumont, Texas and back [1]. Part of that involves taking the Sunset Limited between Los Angeles and Beaumont. That's a scheduled [2] 40 hour trip from Los Angeles to Beaumont, and 36 hours from Beaumont to Los Angeles.

There was no wifi on the train then (or now, I believe), and I did not have a phone with cellular internet.

The Legend of Zelda: Phantom Hourglass for the Nintendo DS came out in North America just 3 weeks before my trip started, so I saved that for the train trip. I also brought Mario Kart and some other Mario game that I had not finished. Oh, and Brain Age was very helpful--it includes a bunch of Sudoku puzzles. I also had a bunch of podcasts and some audiobooks on my iPod.

I did not bring, if I recall correctly, any physical books on the train. I wanted to travel light, and the books I was currently reading or wanting to read were all heavy hardbacks. (Kindle was not out yet...it was released while I was I was in Texas, a few days before the trip home started).

All I brought on the train was my PowerBook, the entertainment stuff listed above, my phone, a TomTom GPS, a couple charges to keep the aforementioned stuff running, toothbrush and toothpaste, a comb, a swiss army knife, and enough clothes to cover the time on the train.

Everything else I'd need or want for the 3+ weeks I'd actually be in Texas, including several hardback books, I shipped via UPS or FedEx ahead to the hotel.

I don't understand why more people don't do that, at least for stays where they are bringing a lot of stuff. You've already got enough to deal with on boarding day...why add wrangling two or three big pieces of checked luggage to that? And FedEx and UPS lose luggage at a lower rate than airlines (I could not find data on Amtrak lost luggage rates). [3]

[1] for the usual reason one would go to Beaumont, Texas if one has no relatives there. A patent I was involved in ended up owned by someone who sued someone else, and I had to go be a witness.

[2] Most of the route is over track owner by freight rail companies, and their trains have priority. That means AmTrak spends a lot of time sitting on passing sidings waiting for a freight train to pass. Add several hours to scheduled times for any long trip.

[3] I suppose it might depend on how things are getting paid for. Since I was going in order to be a witness in civil litigation, someone else was paying for my travel expenses, and they had a pretty loose wallet. If you are paying for your own trip and your fare includes a certain amount of luggage it might be hard to justify letting that freebie go to waste and paying for FedEx.

The last time was probably 8 years ago, before I had a smart phone. I went winter camping in a relatively remote area with some friends.

Edit: I should probably add, I don't see constant internet access as any more of a problem than books. If anything my kindle (which is always in airplane mode) is a worse impact on my productivity than the internet.

While I understand lifestyles differ, I can't help but think that's a shame. Many of the world's most beautiful and inspiring places are remote. Do you not have a second-in-command you can put in charge while you're on vacation?

It was a pain. I got less writing done than I'd hoped, partly because I couldn't look things up. I enjoyed holidays more when I had a working Kindle Keyboard and could get internet anywhere. Next time I'm taking a laptop; there's too much value out there to be a luddite about it.

Couple days ago. During the summer, it's usually every weekend I stay at the dropzone without any laptops and I don't carry my phone around. I'm also outside for the whole weekend and I empty all my pockets to jump. There's planes to jump out of, people to talk, things to do, a breath of fresh air!

Last week I actually went almost two whole days without internet access. It wasn't intentional (I forgot my iPhone at home when I left for two days), and where I went there was no computer or other internet accessible devices. I survived fine, but yeah.. a certain degree of separation angst.

Canoed down the Wisconsin River for 3 days last summer. Spending time alone with nature was a great slowdown and reboot. It really helps put in perspective the hectic rush of American life and how little benefit worrying about small things at work brings me.

12 Hours of Sebring 2013 - four days off. The coverage in the area was better last year, but before that it was almost non-existent. Unless, of course, you pay the ridiculous fee for spotty track wi-fi that barely worked even when you were connected.

About 2 years ago, took a 4 day bus tour of Ireland, where free WiFi was mostly non-existent outside of Dublin. Whenever I travel in Europe, I purposely don't buy a SIM card or get the AT&T Passport. It forces me to be disconnected.

I think TeamCity can achieve your needs: it has the ability to create a "build chain", where dependent builds can specify "Build on same host as <docker build>" and "Re-use existing (successful) build".

I do something similar by provisioning Joyent VM's as a dependency of a build chain that requires a build to be run on those VM's.

The most recent TC release can persist your build configuration to VCS (say, a private github proj.), so you do get some level of vcs-managed build configuration.

Drone [0] seems what you would like to use. Define all your containers as service containers and create/define steps to test how those service containers co-operate.Of course, you must test each service container individually in separate drone builds.