As a result, I began watching a bunch of "pickup artist" videos on YouTube. While I completely disagree with their goals, I admire the confidence of many of the people who do that. I think my favorite was this video on YouTube: http://youtu.be/1mRM1VwUiYA It got me thinking, and so I made the goal that I would get a girl's number every day for a week last March.
That week I really worked to make the goal happen. Walking around my college campus, I went out of my way to walk next to girls I thought were attractive, and sat next to them in our food court for lunch, and in the library. Originally I had thought that they would all turn me down or at least seem a bit annoyed about it, but by the end of the week one had told me she was married, one said she had a boyfriend, and none of them seemed the least bit annoyed about it.
At the end of the week, I had set up dates with seven different girls, and had 12 different phone numbers. To be honest, it was a bit overwhelming. I kept forgetting which of them said what, and confused their names and other bits of information. I asked three on second dates, two of those on a third date, and only one on another date after that. In the end, I didn't end up dating any of them, but the experience was extremely valuable.
I seriously stand up straighter than I used to now, and I'm not as afraid to talk to anyone. A friend and I looked to launch a startup that would help students on campus, so I spent a day on campus surveying random students walking around between buildings. I now average about a date a week with girls I'm actually attracted to. And I really have no problem talking to anyone.
The goal I set probably isn't right for everyone, but set a goal that is right for you. Speak to one random person a day and get their contact info. Your network would grow by thousands by the end of the year (including second- and third-degree connections).
The fact that you have recognized an area of your life that you want to improve and even specific situations where you know you can/want to work on it is half the battle. The other half is making a conscious effort to be more confident and less shy when these situations arise. Part of this is fake-it-til-you-make-it, and part of it is re-wiring your brain to be open, communicative and confident in these situations instead of shy and/or anxious.
As far as a book recommendation goes, I read a neuroscience book (written for the layman) that while not dealing with this topic directly, will definitely provide you the knowledge and understanding of how to improve. It's called "The Brain That Changes Itself" by Norman Doidge. It's about neuroplasticity, how it works and how you can use it to change your habits, behaviours & skills.
This has been one of the most impacting books I've read in my life. I have purchased more than 10 copies for family and friends and everyone who has read it has come away amazed and able to make almost any positive change in their life.
Cheers & good luck!
If you want to be confident with a wider group of people, you need to understand what part of you are you not comfortable showing to other people. For some people, it is physical. They do not believe they are attractive enough and so it holds them back. For some, it is intellectual, "what if I say something dumb or unimpressive". There are a myriad of possibilities and it is probably a good use of your time to understand what your issues are (and why you have those hangups).
There are a number ways to deal with your hang ups. One way that works is to apply brute force. Just act inspite of your anxiety. I suspect that a majority of people that appear really confident just take this approach. They're scared but just do it anyway.
Another approach is to try and remove the root of the fear altogether. Some people do that by actually courting failure. You think people are judging your intellect, then say the dumbest thing you can think of and see what happens. Scared people don't think you're good looking, approach people completely out of your league. The idea is to actively cause the situation you are afraid of so that you can experience it (instead of imagining it) and realize it isn't so bad.
Whichever approach you decide to take, I would suggest you ensure you do take action to deal with it. Anxiety has a way of making you feel like crap, which leads to further inaction, leading to more anxiety and then a spiral of regret and wasted time. The truth is there is not much that can happen to you that will crush you completely. Time and the love of a few heals all wounds.
If you are like me you are rational and skeptical, willing to be proven wrong, but stubborn in holding opinions you believe in. If you are slow to form opinions, you may not seem very confident, at least until you are sure about something. And even then sometimes you may be confident about an opinion but you're uncertain what will happen if you express it, so you keep quiet.
If you're like this, then I think a lot of the advice in this thread is good. Your confidence will improve with practice and familiarity. Try politely disagreeing with your boss. Try inviting some women for coffee. Choose low-risk circumstances until you get used to it and prove that nothing terrible will happen and you'll survive. The good news is that as you get older it gets easier, sort of automatically. I'm 37 and there is a lot more I'm confident doing now than when I was 25.
I still have a hard time looking people in the eyes. Maybe it's confidence, but mostly I think it's just too hard to think about doing that and think about what I'm saying at the same time. I don't know how others do it! I look at people while they're talking, but as soon as it's my turn I forget.
What I'm trying to say is that most likely there is nothing wrong with you. Probably you are just fine as you are. Thank goodness for self-doubting, open-minded, thoughtful people! So instead of trying to change your personality, try changing your basis for being confident or not. Be patient and don't feel bad at it. It gets easier.
* Do things, gain experiences. Build robots, take a rock climbing class, go on random hikes, take a dancing class and own your lack of dancing skills. Experiences build a more interesting you, which in turn provides for more interesting things to talk about.
* Read more books on a diverse set of topics that interest you. Watch much less TV (some TV is important from a conversational stance), play far less video games.
* Talk to random people regularly. People next to you in line, the homeless guy that asks you for spare change, maybe even a woman that you do or don't find attractive (this was an excellent crutch in my youth for gaining confidence and it made me realize how deep women were).
* Fake it til you make it.
* Study Buddhism. Learn how materialism and attachment affect you and work to fix it. When you do, external variables will have less of a power to drag you down should something go wrong.
* Realize that everyone else has their own inadequacies and issues behind the facade they present, even people like Obama. And that's OK, it's what makes humans beautiful and interesting.
For me, what really really helped and now I can't get past 2 or 3 days without doing it is exercise..
I'm not sure if you include exercise in your weekly routine but seriously man.. it saved me. I started with cardio circuits purely for a mental boost, and energy spark and it sorted me right out. After a while I became more confident in myself and then moved on to weights an it really helps!!
Maybe working out and getting physically strong would help you as it helped these guys?
First off, you can get a pro vimeo account and with access to the api you can upload and maintain the videos in the ways you want, but you will probably need to create a custom application to access that api and handle things appropriately for your business. All in all this may be a good solution, it depends on how you want to display these videos to your users.
Alternatively, it's gotten to a point where you can actually host and maintain these yourself without a video storage service. Storage has become exceptional inexpensive. There are fantastic tools for displaying the videos. Then it's just up to your organization to make the interface for management how you'd like.
I did get hired in the end. When that was done, I also helped a few friends tweak the interview process at their startups/companies.
Over time, during my job hunt, I had to tweak stuff in order to get results. Basically try and observe what worked. Here's what worked.
* Find places that use your work (apps/libraries/articles)
If you have been writing software for a few years, there's a probability that you've written a few libraries or handy apps or really good blog posts. You can find people who are sharing links to these on Twitter. Checkout their workplace. If they seem interesting, apply. The tech interview will matter less to them because they've seen the value you provide.
* Write good cover letters/mails
Your application is your first point of contact. It has to be short, crisp and make them want to know more about you. My application email is usually just one or two sentences and then 4 links (github, resume, and a couple interesting projects). If you have interesting projects in multiple languages, change them to suit the company you apply to.
* Try to avoid any automated forms to apply to a job
They most likely end up in a blackhole at popular or larger companies. Find a person who works there and send him/her an email.
* Don't panic and take it slow
It took me a couple months to find a place I'll be comfortable at. Offers will come and go. Pick the one you'll be comfortable with.
All the best. There are jobs waiting for you to find them :)
The most important part of any interview is confidence. The dating analogy is appropriate. Realistically, no one ever has to write code under the gun like in the interview. If you draw a blank, at least get some ideas out in pseudocode, or describe your thought process.
I have drawn a blank in an interview, and what I've done is email the interviewer later with the solution. In each time, I got the job.
It would might put you at a disadvantage to a similar candidate, people might worry that you might "lock up" during a stressful situation at work, but it's certainly putting you in a better position than freezing during the interview.
Also -- have some portfolio project, and public github projects with your past work, if you can. I've had interviews with folks that I was on the fence about, and then went and looked through some of their code and that helped make up my mind.
The same thing happens when I'm asked to write code in front of the interviewer - I panic and lock up.
I've started to lose confidence in myself even though I know I'm good at what I do. Often times I feel that I'm being judged a bit harsher because I don't have a CS degree - though that could be me projecting my own insecurities.
It's like dating. If you think you suck, they will too. Here's a nugget: I'm mostly self taught. While I do have a CS degree, I didn't learn anything "new" until more than halfway through the program. Others that went through the same program and didn't learn shit got CS jobs, not because they were good programmers (they were not), but they behaved like good programmers.
Don't sell yourself short. As a hiring manager myself I can comfortably say you are more qualified than half of the people that get hired in technical positions.
Ignore your "lack" of education, and just concentrate on showcasing what makes you awesome.
The rest will come.
I'm in Germany and this is while logged in. I can't reproduce what you claim. But Google is known to fragment their search results depending on previous usage patterns, I have never expressed interest in a particle accelerator though.
If you don't need the scale, don't build for it. It is like part of the last 10% of the 20% incremental changes you need. Focus on the 80% for now.
Buy yourself like 5 DO (or some VPS) servers, spin up your Docker (other easy-devops tool) containers and push your code.
Then focus on the really hard part, marketing/sales.
Note. I've also heard that AWS is quite expensive (comparatively speaking).
If you're already committed to a specific technology, it may be best to continue down that path. As an example, if you're building .Net Applications it may be advantageous to move to Azure.
However, it you're looking to move fast and pivot when necessary you may want to look at AWS or Rackspace. I think those providers are pretty reliable and offer a lot of options.
Now, between Digital Ocean, Linode, Softlayer etc. (which are doing more of the same things), things got a bit muddier.
Meanwhile Linode, RamNode, etc.
Its been an exciting ride. We learned A LOT and now were hard at work building the future of Glass.You gave Glass a chance-even if it wasnt right for you right now, you were still part of the story. That means a lot to us, so we wanted to share this collection of photos and stories from the early days of Glass.
Download Vol 001
Shots from the Glass yearbook
Youll start to see new versions of Glass when theyre ready, and theyre built on what we heard from Explorers like you. Well be eager to hear what you think.
Best wishes,The Glass Team
and the MIT Technology Review, which even has a "You may have missed" section of important tech news http://www.technologyreview.com/
I use Mini as my daily keyboard (http://matias.ca/minitactilepro/mac/)
The upcoming Ergo Pro looks great (if pricy) http://matias.ca/ergopro/pc/
Like many Microsoft products, this is something that comes out of the fact that employees spend a lot of time typing at the computer. It's the kind of product that comes from dogfooding.
It's the AK-47 of keyboards.
But most important than anything is the switches. I have cherry MX greens, and I think they're great for typists.
PS: One think you might not like about the Das Keyboard is that their USB models use multiple USB ports for n-key rollover and a USB hub and backlight and stuff like that, or at least the model a friend had did.
These channels gave me some really nice ideas, I recommend to have a look at them!
There are some channels [0,1], which post them. Tech companies often have developer channels, too. I find Google's to market their own products to much. Facebook tells quite interesting war stories.
Finding videos is not really the problem, because they are generally 30 to 60 minutes long. When you bookmark them or add them to your watch-later list, they quickly add up. I have about 200 of them waiting to be watched.
This seems like a good compilation: http://devblog.avdi.org/2013/06/21/a-list-of-programming-scr...
The Notepad++ official site was hacked on 12th January 2015, due to its controversial new version 6.7.4 "Je suis Charlie" edition, released on 10th January 2015. The site was restored on the same day. The binaries of this edition are on another server and they are not compromised (the SHA1 published on 11th January 2015 is always available on SF). The automatic typing in Notepad++ "Je suis Charlie" edition after installation is a feature. The message of the defacement accused Notepad++ of inciting hatred towards Islam and accusing Islam of supporting terrorism. The statements of Notepad++ "Je suis Charlie" edition support nothing but the freedom of expression and only that. The fact of Notepad++ supporting the "Je suis Charlie" movement has nothing to do with any accusation towards a specific community. In fact the "Je suis Charlie" movement in France, as far as I can tell, deserves no label of racism or of Islamophobia. I have many Muslim friends who are for "Je suis Charlie". And sincerely, I don't think that two extremist fools can stand for all Muslims or Islam itself. If you don't like "Je suis Charlie" edition, that's fine. You can still use Notepad++ v6.7.3 - they are the same in terms of features and bug fixes. notepad-plus-plus.org could be hacked over and over again, but I will always find a way to distribute Notepad++ "Je suis Charlie" edition - that's my freedom of expression which I claim as my right.
The only way that can evolve is through tools and social cohesion. For a small mammal to evolve to tackle on bigger game and thus more efficient protein sources, it either needs these things or adapt its body. Unfortunately, adapting your body is expensive as well. The only positive feedback loop is through tools and social behavior.
Wolves are intelligent animals as well. Probably as smart as toddlers. They are very social creatures that take on much bigger game. But they don't have hands.
From using tools, primates were able to streamline their body mass and reduce apparatus needed to digest vegetation. Thus, from the point of view of efficiency, I think the human body is very optimized for an intelligent brain.
It's not the only way it can happen, but it's very probable (at least to evolve from existing animals).
We can turn the ontological argument on its head. I can conceive of an omniscient and omnipotent intelligence, therefore human intelligence is very low on the absolute scale of intelligence and calling it intelligent may be misleading.
Going further, the question "How is a human with a different sort of body still a human?" hints at an assumption of mind-body dualism. Radical Skepticism aside, is a disembodied brain still a human?
I guess Aesthetics with a capital \#a were thrown into the mix to make the question less trivial?
- Things That Have Caught My Attention by Dan Hon - http://tinyletter.com/danhon He's the content director for Code for America and writes beautiful, thoughtful and personal commentary. Very smart.)
- Taylor Davidson's Newsletter - http://taylordavidson.com/letters Writings at the intersection of tech and photography. Similar to Benedict Evans' format.)
- Deb Chachra's Metafoundry - http://tinyletter.com/metafoundry (An engineering professor who writes a combination of personal notes and smart commentary about tech/science.)
- Weekly Gold by David Sherry - http://davidjsherry.com/ (A nice reminder to step away from your computer and take the world in + a cool startup recommendation every week.)
As a hardware startup, my favourites are the HAXLR8R newsletter and the Bolt/Dragon Innovation blogs.
I also like blogs by VCs Gil Dibner http://yankeesabralimey.tumblr.com and Charlie O'Donnell http://www.thisisgoingtobebig.com
I say this as someone who has written many thousands of lines of Swift over the last few months. In an effort to learn the language and explore some user experience ideas I decided to write as much of my app as I could in Swift (it stands at about 95%). Since starting in September of last year I've alternately loved and regretted choosing Swift. For reference, I'll list the pros and cons.
- Greater productivity through new "safety" features (lots of caveats here, see the Cons section for why).
- The expressiveness of Swift often means less code to read than with Objective-C. Hopefully that also means less bugs.
- Swift code is (to me) much easier to reason about than equivalent Objective-C.
- The language is just plain nice. This is subjective, and not relevant to your particular case.
- The tooling is very immature. I have encountered multiple situations where the compiler itself crashes during a build.
- The static analyzer for Swift code reports erroneous problems. Until you learn the situations it doesn't understand it can lead you down the wrong path to resolution.
- Certain build problems are very difficult to diagnose. I have lost multiple days just searching for code changes that caused the compiler to crash.
- Xcode error reporting for Swift build problems can be vague, ambiguous, or non-existent.
- Xcode crashes, a lot. Technically this is nothing new, but since Xcode 6 I'd argue it has gotten measurably worse.
Swift is clearly going to be great, and it is clearly the future. Unfortunately the future isn't here yet.
However, I do not do billable consulting work in Swift. I am twice as slow writing Swift than I am writing Objective-C. The toolchain is very brittle. The debugger is near unusable. The instruction pointer bounces all over the source file while debugging. SourceKit crashes all of the time. Multiple times an hour. And build times are about twice as slow as Objective-C builds.
Swift is fine for personal projects or small libraries. I'm not going to bill hours in Swift until another major release.
Btw, I send a weekly Swift newsletter: http://www.swiftnews.co
To echo much of the sentiment here: the language is definitely usable in production now. The tooling is not ready yet. We have wasted untold hours dealing with XCode crashing. If you're contracting this out keep in mind those hours.
There are also some issues with the bridging to Objective-C for Cocoa APIs. As an example: we've had a few cases where for performance reasons we've needed to replace Swift arrays with NSArray objects.
That said: there's a lot to like about the language and there are parts of our codebase that are really nice by virtue of being Swift.
EDIT: I want to agree with a number of people here about using the language your contractor is comfortable with. If you don't have a strong in-house reason to use Swift, Objective-C is going to be around for a long time, so I wouldn't worry about that.
Even if your project is written in Swift, you can still use CocoaPods through bridging header, and you can use embedded frameworks for pure swift libraries (caveat: if you are targeting iOS 7, you need to copy and possibly modify the source of the frameworks you use because embedded frameworks are not supported in iOS7). Although Apple APIs are available with Swift, the documentation for some of the libraries still only provides examples in Obj-C.
My main issue right now is with the stability of XCode. SourceKit keeps crashing on me (every 30 minutes). It has become more stable with 6.1, but it used to crash when I had too many parameters in a function or when I was trying to mix Obj-C and Swift. Sometimes I get build errors and after a few calls to clean, I can build my app (go figure!). This makes developing in swift not as enjoyable as it could be.
- Swift is a far better language than Objective-C. It's much safer, the type system is great, and the functional features are a joy to use.
- Everything largely works as advertised; even for a super new language, the amount of total brokenness is minimal.
- The current compiler's error messages are frequently bad to the point of being useless. Try to mutate an immutable dictionary? You get a type mismatch when you could get an error about immutability.
- The compiler is a lot slower than I think they mean for it to be.
- The debugger takes several seconds to evaluate an expression compared to almost instantaneous evaluation in Objective-C.
- 8 MB of standard library in your app binary.
- "SourceKitService crashed" messages in Xcode flashing on the screen at 30 hertz.
But at the end of the day, if you're hiring an outside company to do this, why does it matter to you what language it's written in? Shouldn't they be able to use their best tools?
You'd likely pay more for them to learn Swift on the job.
However, if this is longer term bet like an app that's going to be in use after 3-5 years, you should have a honest discussion with the client about considering Swift. While Objective C is more well understood and supported right now, that might not be the case in 3-5 years. Most Apple developers would rather be writing Swift code in that timeframe, and any ObjC code will be perceived as "legacy", difficult to debug, and abandoned code that no one likes to touch.
I've worked on many iOS projects like this, which contain pre-ARC code, which no one likes to go near. Bugs in that code tend to be ignored and entire features are left to rust because the source code is so dated that it's better to leave it alone than risk breaking anything by modifying it. If this project could end up in that state, it's better to be future-proof and start with Swift. However, if it's a short term app, choose the path of least resistance, which seems to be Objective C at the moment.
Over the lifetime of the software, anything you can do to reduce bugs is a win.
By the way, I maintain a list of Swift resources. I have almost 500 urls from the past 9 months, so you can see that Swift is gaining some adoption: http://www.h4labs.com/dev/ios/swift.html
In particular, dealing with Core Data can be a holy mess with Swift because every single property on a Core Data object is dynamic and implicit optionals. Unlike Objective-C, which will happily pretend like nothing has happened (in many cases), Swift will explode quite spectacularly if you try to operate on nil values, and implicit optionals lets that happen without throwing type errors. Either be very careful with marshalling accesses to Core Data objects, or test thoroughly with different data patterns. Last thing you want is your app crashing because someone filled in data in your app that leaves a property set to nil.
I'd expect some resistance (on top of the "I need to learn a new language" part), and some swearing about all these "if let"'s or "I thought Swift meant no more null pointer exceptions!", but it's perfectly doable.
For me at least, the biggest problem I've found is that I have no intuition for best practices in Swift (when to use certain language features etc.), and that makes me wary that I'm writing bad Swift code, even if it's technically correct. I imagine it'll take time for the community to standardise on what makes for good Swift code, and for more extensive learning resources to be developed etc. Sticking to Objective-C for now certainly doesn't seem to be a bad thing.
If you can leverage other patterns, such as FP, you might be able to achieve a big speedup in writing Swift.
It also really depends on when you want to ship: if it's a bit more long-term, Swift might be a better bet (I'm assuming that in a few years from now, almost all iOS apps will be written in Swift). If it's more important that it's ready next month, ObjC might be better, because the devs will know exactly what it takes to ship it, and will almost certainly not run into unexpected issues with the language or compiler.
That said, I'm writing my next product 100% in Swift, and we're on schedule to ship in 2 weeks. I wouldn't have done it any other way, and have seen a big increase in productivity and fun.
Initially, I admit that I did have some rough times as I worked through all of the Xcode 6 betas, and that was quite challenging. However, things have definitely gotten better with production releases of Xcode.
I know that it's a game and not a traditional app like you are developing, but I think my game shows that you can achieve a quality result with Swift.
 Show HN: Rocket Renegade, a Space Shooter for iOS in Swift
As jefflinwood mentioned, most likely they don't have the developers proficient in Swift and just want to downplay it. For me this is a red flag for the company.
Xcode crashes often (even more frequently than with Objective-C), the compiler will probably also crash at some point during development. Compiling Swift code is also considerably slower than compiling Objective-C code. Error messages are often cryptic and debugging compiler bugs is very time consuming.
There's also a few places in Swift where things still need some more time to settle, framework support is tricky and some very basic tasks are harder than they should be (for example, getting a substring).
But, 'ready for production' is a relative term that must be considered in context. Apple is encouraging developers to submit apps with Swift, so clearly they think it's 'ready for production' in some contexts.
If you're building an app for which an obscure, swift-specific bug may cause a critical security or safety issue for your customers then perhaps go with objective-c to sleep better at night. Although my impression is that Swift is stable enough even for this category of apps.
But, I'd wager that vast majority of apps out there do not fall under that category.
Shameless promotion: https://itunes.apple.com/us/app/mappa/id931699397?mt=8
I think is more the contractor doesn't have the experience or don't feel confortable enough deploying a Swift App. There are some issues with XCode and Swift, but nothing too critical.
The language is ready, but most of the developers aren't.
As BSousa mentions, xcode can be a bit flakey sometimes (syntax parser/autocomplete crashes sometimes) however it automatically restarts so it isn't really an issue.
I agree with BSousa that this FUD seems like a cultural red flag with the company.
Unfortunately, many of us iOS developers work for clients. These projects are usually on timelines, and if writing the app entirely in Swift slows us down substantially, we will likely go with Obj-C.
Also, Obj-C isn't likely going anywhere.
You need to get past the "been told", and start communicating what you want to achieve. It might be too late at this company, but I would bet not, just because these roles are already filled doesn't mean they will stay filled, or that tasks won't outgrow the current holder. Think ahead, and aim for a goal, communicate with every means you have that your ready for that goal.
"Fortune favors the prepared mind." - Louis Pasteur
1. You shouldn't be afraid to ask for what you want. As a founder, it's tough to always know what goes on in everyone's mind. I try as much as I can but when I'm a part of the conversation I will be able to help much more than just being looped in after a conclusion is reached.
Every good developer wants to be challenged. Some want to stay on the technical side, others grow into managers, and some like to blend the two.Talk to the ceo/founders and let them know how you feel. I'm sure they appreciate what you've done so far and will be happy to figure out the future.
2. You're at a very unique position where not only do you know how the entire system works but you also know how it's supposed to work. This gives you the ability to contribute to any of the different roles you mentioned in a really meaningful capacity.
One of the comments said something about not being good at those. I mostly disagree with that on principle. Just because you don't have the training doesn't mean you won't be an awesome manager. Some companies actually don't hire managers but rather promote. I believe LinkedIn is one of those companies, and they do it because they want those the manager will oversee to really trust the manager. That's something that, as a developer, you can do when you've seen the person's work.
3. The skills needed to get something off the ground are somewhat different from those needed to take it to "the next level". It doesn't mean you can't have both, but it is a question you should ask yourself. Do you like the rush and the excitement of creating something new? Or do you like the joy of seeing a large system run smoothly at super scale with time to sleep? Or both.
But you should stick by the VP of Engineering and learn whatever you can from them. Be their right-hand person, and try to become someone that the entire company goes to for technical issues. It's not hard to be the de facto CTO, just make sure you are a part of all the technical decisions, and a positive guiding force for the company. As you become more and more the face of technical decisions, eventually you'll be recognized for it, or you can go to another company in that higher role.
Those skills you've developed don't have much value at your current company any longer. They are most likely keeping you around for historical value and once the systems you built get replaced its over pretty quick. Take those skills elsewhere and brand yourself as someone who takes a company from 2 to n employees.
Not everyone has your skill set so learn how to market them. I'm on my second company where I was an early hire. I learned that you're way more valuable in the beginning then you are at the end. Eventually I got pushed out by management types because I held on to the notion that I helped build this company and deserved something for it. Don't wait too long to realize it.
When companies are small the jobs are all blends because they have to be, you just don't have the resources to do more. But as the company gets bigger (presumably through growth and not just a funding bump :-) you can allow folks to focus full time on specific roles which, in theory, gets you better execution of those roles.
A friend of mine once said you often could figure out what role you liked "best" by the first thing you did when you got in, did you check the build? (developer) did you check email? (manager) did you check the web? (marketer) A bit simplistic but it does make for interesting introspection.
As employee #2 you're well connected with the CEO and the other founders, and you can talk about what you want in your future. You should sit down and have that talk with them.
From what you've written, it seems like you really don't have a lot of experience developing careers either, which is one reason to bring in an experienced engineering manager. It's not a knock on your skillset managing a 10 person team and delivering. Just a realization that management isn't something you can just quickly learn on the job.
My advice: have a discussion with whomever the new engineering manager is, and explain your career aspirations and the current dilemma you have.
If you want to wear a lot of hats, go join another early stage company (the items you mention make an awesome resume). If you want to grow at the current company, pick an area or two (development+strategy or management) and let the ceo know what you are interested in.
Be pragmatic: there will be other opportunities which are equally interesting and staying isn't helping. You could be CTO at a different startup. Further, you should be approximately at your zenith at the company and they should be able to provide a strong reference, if you stay dissatisfied your performance and appearance will suffer - along with your potential for future employment.
Also happiness is about the journey (career, parenting, etc). If you're not on a journey you won't be happy!
1. Your immediate job won't be as gratifying.
2. (And this is a bigger deal) You won't be in the room during the exit when the money is being handed out.
Re 1, as I saw it, given my equity stake, I should just put my head down and wait for the liquidity event. This worked well, though was a large blow to the ego. Given personalities and priorities of the founder, agitating would have put my equity stake at risk.
Re 2, despite the fact that you may have an iron clad equity stake, there is often money that is handed out in an exit which goes beyond equity. In my case it was about $90mil in retention money. If you're seen as one of the "important people", you'll be in the room when that is being divvied up and can get your hands in the cookie jar (at that point it's just a land grab.) If not, you're shit out of luck, since no one at that point will be looking out for your interests.
So, I would say I would take the long view and not worry too much about the ego/job satisfaction. If you end up set for life, the resentment will fade. (I'm 3 years post liquidity event and the resentment is for the most part gone. Both for the name on letterhead issue and being left out during retention.) I would, however, do all I could at this point to re-establish myself as one of the 'important people' so you can be in the room when the cookie jar is open. In my case, it was impossible since in my obviously biased view the founder was an ass and an idiot, but perhaps your situation is still salvageable.
You could be a repository-of-lore brilliant coder / guru. Sounds like this is roughly what the CEO has carved out for you right now.
You could be CTO/Head of Engineering. You may or may not want this job or be suited to it, based on what you've said so far.
You could sink down into the organization as a (hopefully) really rich mid-level engineer and enjoy the ride.
You could do it again as a founder rather than early employee somewhere else.
I think you should figure out what would be best for you, what you want, and then see if the CEO agrees and will make it happen. At some level, if you're a few years into vesting, and the company is successful, it may not significantly change your financial outcome to stay -- you have early stage stock in a successful startup. More could be nice, but it won't change your outcome 10 or 100x, like moving to a founder role would.
Lots of good options; just don't do the west coast thing and stew on it while you write increasingly bitter tweets and blog posts. :) Today is a great day to get some clarity!
You don't give us a clue to answer this. Your whole story is about things that happened. You haven't told us about what you wanted. You haven't told us anything that you did to get what you want. Did you know what you wanted? Did you do anything to try to get it for yourself?
> I should just "be happy."
I call bullshit. If you were happy to passively accept what's being handed you (money, responsibility, acclaim), you wouldn't have made this post. Honest mindful gratitude makes a person happier, but cloaking bitterness with false gratitude, which this sounds like to me, will make a person ever more bitter.
You have to start with what you want.
If you want to keep doing everything like you did before, then you should make a career as early stage CTO. If you want reward and acclaim for that, then you have to negotiate it up front, usually as a nice slice of equity. Be advised, there's risk in that.
If you want to grow with a company, then you won't be able to do everything you were doing before. You will have to focus. And you have to assert your case that you want the role and can be successful in it. To grow with the company in one of these roles, you'll need to cede the other roles to new teammates. You will probably have to mostly stop coding. You will have to embrace the thousand headaches that come with the new role as the company grows.
These are two possible career strategies. There are others. All start with knowing yourself. All depend on asserting yourself.
I would guess most people there don't even know who you are, right? They might even know, but they probably don't get it because what you did in the past doesn't matter. Your company is becoming more corporatized and in that environment all that matters is your title. Since now it's likely just "developer" or "senior dev" or something, you're just another scrub with a good backstory.
If I were you I'd update my CV to reflect the contributions you made then start working your network to find the next thing.
Early employees are basically jack-of-all-trade doing essentially the same job as the founders (minus the fund raising) in building up the company but with much less of the upside. If you could, be the founder. Don't be the early employee.
Seems like it is not too late; just talk to the CEO and VP of Engineering and say you want a new role created called Chief Architect or Principal Engineer. As employee #2, it seems perfectly fair that you should get some additional recognition above and beyond simply "developer". If they like you and want to keep you, then I think definitely they would not object.
Early on I was promised equity in the company, but never got anything in writing (I knew nothing about startups when taking this job).
I was actually treated pretty well as an employee, given good raises, position upgraded to Director level.. but that equity thing was always out of reach, and they kept pushing it off with various excuses. I trusted the CTO, but the CEO was a greedy type.
By the time I put my foot down, it was too late, and they had no problem letting me go. If I had made demands about 6 months earlier they would have been forced to do something or end up REALLY hurting. But I had knew that I had waited too long, so I secured a job before I tried anything. I learned a lot at the company, so I'm grateful for that, and I'm working at a much better and more interesting place now :)
One problem I had in my youth was that I really wanted to be recognized for what I did without a lot of blowing my own horn. If I self-promoted, my victories felt hollow: was I getting kudos for my work, or for my self promotion? So I energetically avoided calling attention to my accomplishments.
Eventually I came to realize that this was a little crazy. I can't expect managers and clients and investors to automatically appreciate all the stuff that it has taken me years to learn to do well. I've discovered that there is a reasonable level of taking credit that is neither sleazy nor slighting of my colleagues. Being modest and self-effacing is good, but it can be taken too far.
So let me answer your question with some more questions: Do the executives know that you did these things well? Have you told them you wanted a position other than as a line developer? Do they know that you're unhappy? Are you regularly discussing your career plans with them?
If you, like I once did, find that stuff revolting, then I'd encourage you to find someone to help you practice those conversations. You shouldn't let your ego speak all the time, but it is ok to let it out of the cage once in a while.
If a company refuses to give you equity, you shouldn't join that company - People don't change like that; if the employer has an exploitative attitude at the start, it's not going to change.
Also, you have to be assertive when you talk to them or they won't respect you and will just use you and put someone less qualified (but more assertive) in your place.
It really sucks, but this is life. You have to lock-in the value of everything you produce before you even start! You can't give other people options because they will screw you.
Not all managers are like this, but most of them (by far) are! I think Silicon Valley might be an exception - Mostly because CEOs there are younger and more optimistic.
I was in your position in 1996 when I worked at WebLogic I was the first server engineer after the founders. To give you an idea of what a crazy career path that can lead to, see my LinkedIn:
I'm still an engineer and code everyday. Just have a lot of other jobs :)
if you believe in the company, and the founders, go to them and fight for what you've created and your position. If they don't listen and help come up with a solution to retain you, it's probably time to move on.
Your career path is your responsibility. Don't expect anyone else to care about it, though occasionally someone might.
I would vest in peace, learn from senior management (seems like your company hired good senior folks) cultivate relationships both in and out of the company (VC + advisors)... then start tinkering in your free time. Once your options vest you should be ready with an MVP and solid contacts to hit the ground running.
One thing that might have been better if you cared about not being hired over: ask for the title of CTO or VP of Engineering when you were hired. If they give it to you, you know you're on the same page. And if they won't give it out to you when they're least proven, you can bet that it's unlikely they'll consider giving it to you later when they have more options (and can bring in a new shiny person whose only limitations are those they can discover before hiring).
That's in the past, though. The good news is that you've got a good story here that counters any claim that what you do best is "just writing code." Sit down with the management that's trying to define you that way. Remind them everything you've delivered, just like you told us. After that recap, tell them something like "I've enjoyed contributing to the company's success in all these ways that go beyond writing code, I see continuing to contribute and grow in this way as an important part of my career development." Don't make this about competition with the new VP and ops guy -- let management know you intend to do everything you can to help the new hires make their big contributions too. Just let them know you need a continued technical vision/management role, a title that reflects it (though it's probably not going to be VP), and a path for the future. If possible, come up with some new ideas/initiatives of your own before this conversation, and maybe even a title to suggest. Sell them on a vision of how letting you contribute in this way is going to make everybody more successful, just as it's gotten them to the point where they're at.
And if they don't respond to that... if everything you've written here is true, I suspect there's no shortage of other startups/businesses that might be pretty interested in having you help them succeed.
So for me the important thing was trying to understand what parts of the job I really want to prioritize (in my case active coding and product definition) and regardless of title making sure I inject myself appropriately. So that means if theres a conversation about a new product were thinking about building I make sure Im in those conversations from the beginning.
If youve been with the company from essentially day 1 you likely have a decent amount of political sway, even if you dont know it. Id start by figuring out which parts of the things that you listed you actually want to stay involved in. As another commenter mentioned, if you really want to wear all those hats then maybe finding another brand new startup is the only real choice. But if theres one or two areas that are dearer to your heart then Id try to figure out how to make that your day to day activity. And Id hope given your history with the team that you can have a dialogue with the founder(s) about how to make that happen. At the end of the day the title doesnt really mean shit, but if youre not loving the work then you owe it to yourself (and they owe it to you) to figure out how to make that right.
You might need to adopt the "owner's" mentality - which is that as long as these people are growing the value of the company, you are free to focus on what you enjoy the most, while they work to make your equity more valuable.
That said - if your contributions in all these areas are truly valuable, at a small company, there's always a case to be made for someone to be spanning functional areas, if they have the expertise and chops to add value. Probably worth a conversation internally. As others have said, assert yourself a bit.
You should think about what's best for you next. If you think you are not going anywhere, you should cash out and leave.
I have always felt that working in startup is like giving a kid 10 toys to play with and taking one toy away every year. It's very normal not liking and feeling of giving up something you own but it is as important for a company to get away from generalized to specialized resources with the growth.
a senior management leader once told, his goal every year is to find, train and pass on the baton of some of his existing responsibilities to next person until he has nothing else left...
When I started, there were already a few people working on it, but because of an office move, nobody stayed. In a way, I am engineer #1, just with some code to maintain already. I had experience as a lead engineer already, but my job here was much tougher, I had to change my role every 6 months, from only coding to only devops, hiring, managing, doing all tech strategy choices, doing resource allocation, doing management meetings, etc...
I was eager to improve as a manager, but I still loved coding. It was very hard to hear that the company was hiring a CTO and leave me no authority. Now that person is full-time.
I tried to be very clear about it, I am aware of my strengths and weaknesses. I also fully understand that a founder needs to think about what's best for the business and not just people's carreers. I also made it clear I was there to learn, but the reality is that I never felt I was given a chance.
I stayed there a few months to get some learning from the new CTO, vest some more options and then I left. I left because the situation was toxic for me, with a mixture of resentment and miscommunication from their side. I personally think there's not much you can do in those cases... just start again.
Now onto the next adventure...
I've seen this transition happen myself, where the company grew, got cut up into a bunch of departments, all of which got a manager, mostly external hires. I feel like this way of organizing companies (departments, hierarchical, middle management, etc) is an anti-pattern. Everybody does it because everybody does it, but every dividing line you add reduces efficiency, and I've seen firsthand how damaging middle management is to the agility at the individual level. I don't know what the antidote to this anti-pattern is, but i feel like company structure is a territory ripe for innovation.
I think this is a very powerful statement you made: "all the tasks I did were less challenging than some critical parts of the code base I wrote from scratch". This tells me that the problems that interest you the most are coding and architecture problems, and that you are happiest when solving those problems. Employees will have the greatest positive impact when they are focused on tasks that they enjoy. But it seems that you desire something more. What is dissatisfying about the current situation? Are you bored with the coding? Are you jealous of others getting recognition? Are you frustrated with the direction of the organization? Are you frustrated that you are no longer "that guy" whom everyone depends on? All of these circle around the same question: where do you want to be?
Leadership comes in many shapes and sizes. It's not just about how many direct reports you have. Fundamentally, great leaders shape the direction of an organization. Employees look to that person for advice, encouragement, and approval. It sounds like the company decided to hire others for formal leadership roles. A very difficult and powerful question is to ask yourself "what is the VP doing that I wasn't able to do?" There is a tactical reason that the CEO hired the VP, and it isn't because of credentials. Perhaps it's his/her ability to communicate across teams, or gain the confidence of management? Don't let your ego tell you "nothing, I'm better than them"; there is a reason they are VP. Different jobs require different skill sets, and understanding where you are strong and weak is critical your success. Being an engineer who kicks out mission critical code is fundamental to the success of the business, but it is extremely different than developing and managing a team. With a humble attitude that is always looking to improve, there is no stopping your career growth.
You have learned why every good developer has side projects, gotta keep the dream alive. Two of my engineering heroes did just that, Scott Adams and Mike Judge. They can also be technical related in games, apps, etc on your own. It is much better that way in the end if you like products to launch with any amount of control.
> Scott Adams has always had several side projects because they gave him energy to endure his boring job. One of these projects became the sketches for Dilbert.
Harness the energy of that boring job into something great, it is the American Dream of Engineers across the land subjugated to the power structures of now.
When you have your own things on the side you are also a little less ego driven at work as you have controllable areas on your own products and it lends to smoother teams somehow. Encourage others at work to have side projects, watch how it makes them relax and work better at work.
Most of all, always do quality work, even if it isn't fun make it fun or gamify it. If you are in a situation that prevents you from doing quality work, then you should move on.
As employee #2, you are a technical co-founder, period. The problems you have outlined will not be solved be staying at the current company. It's apparent that the owner has chosen to keep you as 'just a dev', even though your contributions are outmatched and significant. It seems opportunity to seize more than what you could have has unfortunately passed you by.
From what you're describing in your post, it seems you're showing regret. Other people have been hired for these positions, even though you built it.
The thing is about being an early employee is that it's a blessing and a curse. Most people don't realize this but the thing is the feeling you get for being the guy that put this company where it's at today is unmatched.
The problem is that once it's built, you go into maintenance mode and it turns into a corporate machine. Everything you enjoyed and discovered during the process is now going through "procedures" and "process". The freedoms gone, other people are here now and they start getting the ears of the owner instead of you.
You feel like you own this company, you should, you built it and partied with the owner for years (guessing here). The biggest regret at this point is that you probably don't own enough (equity) or you were never made co-owner.
You have a choice, stay and give your last effort to be in the position you earned. Or leave, full well knowing that you will likely not be #2 at a successful startup again. We all know that startups getting successful is about the same as winning in the lotto. However, you could be the guy you are describing in your post, the VP of Engineering that gets hired for a startup that is starting to grow...
In either case I wish you the best of luck and as another dev can appreciate the weight of your decision.
I would expect the first engineering employees to know the most about the stack and thus naturally become the engineering leadership as the team grows, which it sounds like you were. If they felt the need to hire above you, it sounds like you were lacking some cross-section of experience that the founders/board want. You should ask them.
Also bare in mind that this is a normal process for SOME companies as the more they grow the more people are hired so as to try and achieve more (this is debatable) work thus higher revenues.
Personally, I would see what you really want from life and if you are seeking credit/appreciation for your own work then
start a new business or co-found a product or join a startup that is prepared to give out equity
On a related tangent, I would love to know how someone in his shoes could get crowdfunded to start a new business. What do you advise? (Maybe I should start a new thread and ask.)
Second, let me focus on the management point. You wrote: "I managed an entire team of 10 people without ever missing a deadline of the whole team, and now they brought in an engineering manager"
a) Do you think the (now-bigger) team needs a full-time manager?b) If yes, did you want to become that full-time manager? c) If yes, did you make your desire known?
If the answer Yes, Yes, No, that's ok- lots of people want to continue being individual contributors. It's still on you to work with management to define the right structure that works for you and the company. Maybe you become some sort of Chief Architect. Maybe you help hire the manager.
Either way, if you were as pivotal as you say you were, you should certainly have the CEO's ear to bring this up in a constructive way.
Really, if you want more responsibility, you have to sell someone else that you're the best person to have that responsibility. No one should give it to you out of loyalty because that is a disservice to all the other people in your organization that are relying on you to fulfill that responsibility.
It doesn't sound to me like you know what you want to do--mostly because you have not explored your options. I will hope you have a good relationship with the founders. In that case you should have an open and honest conversation with them reflecting about your experience so far, that you're proud of the range of experiences you've had, and hence why you think you're ready to do something more--but you're not sure what.
If they are friends, they'll help you. You can ask them to give you feedback on what they felt you did well and what they felt others could do better, so they hired externally. This will give you something tangible you can work on.
If they are really loyal back to you, they'll create an opportunity for you to develop skills that will lead to advancement.
Of course, this conversation is very shocking and anxiety inducing for the founders so how you frame it is important. If you are not accusing them of passing you over, but really genuine about learning and developing yourself, most people will want to help you.
If not, you may find a better opportunity elsewhere. Again, it's just business. Keep in mind, sometimes you have to sell yourself into a role that you're not quite sure you can do--and then do it.
p.s. If you asked me, it sounds like you're interested in a engineering management role, which is not the same as a CTO role. If you have a conversation with the founders, you could focus on that.
It's best not to assume that the people you work with know what the best role is for you. I started around the same time as another engineer, but our roles diverged. This was, in part, due to both of us being open about where we expect our career to go as the company grew.
So, if you want to be something different, have the discussion with the people who hired you. They clearly have seen your talents and shortcomings. If it doesn't go where you want it to go, then it's probably time to find a new job.
Maybe it's a psychological thing, but really good engineers are never employee #1-5 at a startup. They just aren't.
Never been in your situation so my suggestions may not be appropriate. From the order you specified the tasks I think for you Technical Strategy aspect ranks highly. I think it gave you great challenges and satisfaction. If that's true then I suppose a role would be that of a CTO given that one of the founder is not playing that role.
Here is Fred Wilson's take on CTO vs VP of Engineering.http://avc.com/2011/10/vp-engineering-vs-cto/
I think ChuckMcM's advice of chatting with the founders a bit sounds good. You could try and spin it in a positive way... "I was doing all this stuff, and even if it was really crazy at times, I felt like I was growing a lot and contributing a lot, and I feel like I'd like to continue that somehow. What do you think?"
1- Time to create company product #2. Ask for a tiger tea, break out of the hierarchy, and have fun building something from scratch.
2- Move on. Find a great idea or another co-founder, and repeat the startup experience in another startup.
I've done both of these paths. Both can work. Both play on the strength of a generalist who can get a company off the ground, but then who doesn't fit into the subsequent culture of a growth-stage company.
A company I was at started growing so fast (factor of 10) that it lost it's identity and with it a lot of the things that made it enjoyable/interesting. We opened new offices downtown and in other cities and from then on it was time to pass on the torch.
Clearly, it wasnt about keeping the old guard, but about growth. I did learn a lot and am respected for what I was able to accomplish.
It was a great experience, but sometimes it's good to realize when you're just the launching pad.
Bowing out gracefully was the key for me.
I suggest you leave and take this experience with you and be more aware during your next professional engagement. At this point, being in the company is holding you back.
They may well consider you as "an engineer with little prior experience, and we only gave him that role because we couldn't afford someone experienced yet". To the next firm, you are an engineer with experience building a company's central product from the ground up and leading a team of 40+ people in a high risk start-up environment.
Only do this if you think you've set the company up for long-term success and it will still be successful even without you there.
Also only do this if you think you can make out better in the long-term (more money, more equity, equally sure thing elsewhere), otherwise just buckle down and ride out the remaining 2 years.
Unless you think your current company is trash, then just bounce.
You can learn to be happy with what you have, or you can determine what you lack, and work towards getting it.
Almost no one chooses the first option. When we don't actively work on the second, we often embrace our dissatisfaction without mindfully working to change it.
In the meantime I work on building my own sellable tech.
Hope that helps, I'm working on a sweet e-commerce platform right now and building just little sellable tools
I am currently in a similar boat as you.
1) If you do not have much experience scaling a team, then it is sensible for the founders to bring in someone with more experience. Scaling team requires more than just hitting deadlines. It is about recruiting, retention, recruiting, managing personalities, career growth, recruiting, managing up, communicating across teams, etc.
2) Everyone's role changes as you grow, for better and worse. For instance, early on the VP gets to have fun setting direction and designing the overall product and strategy. Later on the VP might be spending 90% of their time dealing with conflicts, recruiting, firing, managing up, etc. They may long for the day when they got to play a big role in product development. Early on as engineer, I had the benefit of being able to build an entire product by myself. Later on, the advantage was that I could take vacations and did not have to deal with bugs and outages 24/7.
3) You will have to specialize to some extent. You cannot be the jack-of-all trades role forever, no one can. If you want to eventually have a VP/CTO role, then you will need work with your VP to develop your management abilities. For instance: ask for mentoring, start reading books and articles on management, ask to have a junior engineer put in you, help out with interviews and recruiting. (Note to actually get a VP role, you will probably have to switch to a smaller startup in a few years, using your cred from this gig to get you the job.) If you want to do greenfield development, work with your VP or founder to carve out a role building out innovative/experimental/skunkworks features. If you want to do scaling and architecture do that. There are lots of ways to interesting work and build valuable skills, but you are going to have to choose a course. (In my situation, I alternated between doing experimental/greenfield features and doing scaling/rewrite work on existing tools.)
4) With regards to customer facing roles, I highly advise that your company have a policy that every engineer spend a half-day in support at least once a month. It is essential that developers stay connected to the customer, both so that you can intuitively understand how to solve their problems, and to increase your empathy and motivation.
5) Try to figure out a way to get looped-in informally to the strategic aspects of the business. Make some sort of effort to have lunch or beers with a founder once a quarter. If you have 1:1's or have a wiki where decisions are discussed, then that can be a good thing. The execs understandably want to keep management and strategy meetings to a small number of people, otherwise the meetings suck. But finding a way for you to informally connect and give your two cents can be valuable both for you and the execs.
6) If you want to raise your profile and get your name known, use whatever leverage you have to get some favors. Ask to have yourself put on the web site as "Founding Engineer." Figure out a way to have the founders to introduce you to useful people, and to help you get into some of the more prestigious invite only events, whatever they are in your area. You have to use judgement and be diplomatic, because you might also lose out on advancement if you are seen as angling for a quick exit.
7) Generally, I would recommend sticking with the company as long as it is on an upward trajectory (unless you have a compelling alternative). You will learn a lot as you go, and your reputation will increase with growth.
Eventually I realized that I had the best of all worlds. Why does one want to be a VP? Usually money and status. What sucks most about being a line-level employee? Lack of agency/control. But in many ways it is less fun to be a VP, than to be a high-status engineer, who has enough sway to avoid micromanagement, enough credibility to control his or her own destiny, who can spend their time working the craft that they love. As engineer #2, you get status by virtue of your early employee number, and hopefully and you will get good money from equity stake (if not, then that is truly unfortunate). So hopefully you get the money/status benefits of being an executive, while still getting to work your craft, and still getting to stay in a peer relationship with your fellow engineers.
2) If you want their job: assert dominance.
3) Otherwise: flip finger, leave, start your own startup.
if you get a bite, go back to your startup, say you have another opportunity, see how much they want you
BTW, where are you located?
you need to figure that out, ask for it, and if you don't get it, leave.
Did you want to be a manager ? VP of Engineering ?
The way I see it, being developer seemed a natural thing for you. I also assume you must have got significant stock options and you must be drawing lot more salary as well.
Don't take it personally. Even if it is personal, it's not worth getting bitter about it. The pro-young ageism only works for Stanford kids; if you're an average 24-year-old, this game still treats you like shit in most cases. The "social climbing" dynamic in startups isn't uncommon. It sounds like they don't have a culture of internal promotion. This will burn them, later on, because people will catch on to the social-climbing/no-internal-promotion culture and everyone will start doing bare-minimum work... but you probably won't be there when it does.
Ask for a VP-level title, even if it doesn't involve you managing anyone. If you don't have the experience to be the VP of Engineering, then you can't expect them to give you that title, but you should get something at the same level, so that you have political equality with these new guys. Even if it's a meaningless VP title ("VP of Technical Culture") it at least shows that they're committed to giving you the credibility that you need to continue contributing meaningfully to the company. No one's going to take you seriously if you're Employee #2 and don't have a title, and you can make this argument in the negotiation. And saying "no one's going to take me seriously if I don't get <X>, and I won't be able to do my job" is a great way of saying "I'll leave if I don't get <X>" without actually saying it; it has the added benefit of speaking from a perspective of their needs (your ability to do your job) rather than yours.
If you want to be a founder or CTO in your next gig, demand investor contact. If they won't give it, the words you want are, "If you're not willing to give me this, the right thing to do is to accelerate my equity vesting, so we can separate cleanly." You're not actually threatening to quit, but you're strongly implying it in a way that (a) makes it clear that your needs aren't going to go away, because you've started to think seriously about the future, but (b) doesn't commit just yet to one course of action. (They could re-up your equity, or give you the investor contact, in which case you'd stay.)
If your founders are good and this just happened "accidentally" or because you had your head down and didn't fight for yourself, you can improve your position significantly. You may not get everything you want (you might have to settle for a Director title and investor contact only to the more junior partners) but you'll make progress and be ahead of most people your age. On the other hand, if they're deliberately fucking you up the ass, then expect them to denigrate your work. Again, don't take that personally either; they're taking a political decision (to grow above and demote you, because they're social climbers) and back-rationalizing it. So don't let that, should that happen, embitter you either; just move on.
I'm guessing people waste time copying and versioning files, and emailing updates back and forth, losing old changes, etc.
Like I have gone through voter mailing data for a political candidate and filtered it, removed individuals who's addresses were outside the area or who hadn't voted in the last election, combined individuals with the same last name and the same address, then transformed it into a format suitable for address printing.
All that is pretty easy to do with code. If you wanted to go through several thousand by hand though in an unsorted list, that would be a pain. Businesses will have similar requirements... like taking sales data that is already entered and formatting it for a report.
Where non developers waste money is doing a repetitive time consuming rules based task on a computer without automating it.
Ancedotally, non developers also tend to undervalue their and their employee's time. If you are paying an employee to do a task, if it's not absolutely essential or doesn't have a ROI that's higher then money you are paying the employee per hour to handle it, it's time to consider how important that task is.
Finally, again ancedotally, non developers often won't invest in maintenance costs, and instead end up paying for time sensitive repairs or fixes, because they are easier to reason about. A coder is more likely to expect things to break, code to rot, etc. This can be in objects, services or in underpaying trained individuals so that their is a high turn over rate, where better pay might reduce that. Costco for example makes money despite it's higher pay because they have to train employees less. I think high pay also tends to reduce employee pilferage.
I'm guessing a lot of business owners might dismiss good ideas as being too difficult/expensive when they're actually easy to program.
Odd list, perhaps. Still ploughing away with the N900, overclocking it on every reboot. Notes with Vim are synced to laptop and raspberry pi via Syncthing.
Websites for everything else. Trying to move off Gmail (already have for work, self-hosting now, was sending as my personal domain for years via Gmail/Apps) and the Google ecosystem. Already out of Facebook for a good while now. Still tweeting, but only work-related. Would like to play with Slack, but an N900 client is probably not in the works :)
Side-note, while explaining, I'm holding out for a decent (open, free) alternative to Maemo. That looks to me like Ubuntu Touch/Phone, especially with their convergence plans, but the dust might need to settle on that first. None of the Jolla/Sailfish/Firefox offers look quite like what I'm after yet, for various reasons. A nice polished Ubuntu phone would bring me up to date and out of the 5 years-ago past.
If that all comes to pass then the top-5 apps list might look something like:
Firefox/Iceweasel, email client, translation tools, Vim, SSH
Gmail, Hangouts (Android L SMS integration), Chrome, Sleep Better, reddit is fun.
1. They never launch
2. They never make any money
If you can avoid these two pitfalls, you will likely achieve one or more of a) earning; b) learning; c) increasing your 'luck surface area'. So, it's a good opportunity if you can do it. There are plenty of reasons why you wouldn't have launched including:
- you kept your idea secret
- you tried to do too much
- you underestimated the areas that you're not skilled at
- you assumed that if you built it they would come
- More here: http://www.startupclarity.com/blog/launch-first-product-what...
The reasons for not making any money, or rather not making enough money that you wish to pursue it are multitudinous but include:
- you didn't choose a profitable product idea
- you underestimated the slow ramp of death: http://businessofsoftware.org/2013/02/gail-goodman-constant-...
- you charged too little
- you didn't solve a problem for people who were willing to pay you
- More here: http://www.startupclarity.com/blog/find-profitable-product-i...
I hope that helps and Good Luck!
The first two are kinda easy, but if it's "money", work from the money back to the idea rather than figuring out how to make money from a certain idea. Who's spending money, where, and on what? What sort of people do you have exposure to (on Twitter, HN, wherever)? How could you improve on something people already spend money on? Etc.
You can do this as a side project because there are lots of things that can make a great side project, bring in a few 1000 dollars a month or more, but wouldn't be interesting to someone trying to launch a business they want to scale.
Look at tools and plugins for software people use already, especially software that has a reasonable pricetag and that people us in their businesses. Anything you can sell to people for whom time is money is a really good start!
I launched a side project 5 and a half years ago which went on to become our entire business. I wrote about that, in a way that I hope will help other people do the same, in my book The Profitable Side Project: http://rachelandrew.co.uk/books/the-profitable-side-project
2 - go on elance/odesk to find some paying clients (pay is low, but easy to find). You can also use this to try different things and discover what kind of work you enjoy best. you can also call some technology consulting firms - they are always looking for talent.
3 - specialize in that area. tailor your website/blog to talk exclusively about that technology. between the inbound from your site and client base from consultant you'll easily be able to build an overwhelming referral stream.
For me, I wasn't sure if I still wanted to program, so I went back to the things that got me excited when I started (math models of perception) and I fell in love with it all over again. Now my dilemma is turning that back around and actually working on what I'm most passionate about in a full-time setting. In the meantime, hobbying it is better than not doing it at all
Since this will be a side-project (and your time is limited), try automating as many aspects of the business from the beginning. I am not implying that you should BUILD automation into the onboarding process, but use services like Zapier to make your life a bit easier.
I fall into the category of starting too many things that I don't finish. I've recently realized that the size of the things I was working in was just way too big, especially since When working on a side project you are working around your life schedule.
After limiting the size of my projects I've found I am completing all of them
If you really pay attention, something will stick out at you.
You'll likely have many ideas. Research them all, come up with some kind of a plan for each. Sit on them for a while...one of them will jump out at you.
His advice exceeds anything I could offer you.
I build small web apps for companies on the side. Little data management things the office can share... something like you might make with Access but obviously a lot nicer, more customized and networked. I host them also and charge a monthly fee. I don't think this is a way to get stinking rich. But it keeps me busy after work.
These days RAM is cheap and SSD storage is also widely available. For a very long time, one of my side projects with 50K users was hosted in a EC2 small instance. With that out of the way, here are a few things you will need to take care of:
* Security (especially passwords) - Rails should take care of most of this for you, but you should ensure that you patch vulnerabilities when they are discovered. Also, stuff like having only key-based login to your servers etc.
* Backups - Take regular backups of all user data. It's also VERY important that you actually try restoring the data as well, as it's quite possible that backups are not occurring properly.
* One click deployment - Use Capistrano or Fabric to automate your deployments.
* A good feedback/support system - this could even be email to begin with (depending on the volume you expect), but it should be accessible.
* Unit tests - as your app grows in complexity, you will never be able to test all the features manually. I'm not a big fan of test driven development, but really, start writing unit tests as soon as you have validated your product idea.
* Alerts, monitoring and handling downtime - Downtimes are inevitable. Your host or DNS could go down, you might run out of disk space, etc. Use something like Pingdom to alert you of such failures.
* Logging, logging, logging - I can't stress on this enough. When things break, logging is crucial in piecing together what happened. Use log rotation to archive old logs so they don't hog the disk space.
10K user records is not the issue. It's dealing with the humans who use the app on a day to day basis.
Typically getting only a small fraction of your user base to be active in the app is pretty challenging - if you can acquire them in the first place.
That said, having even a few hundred active users can tip the scales in terms of what is manageable, depending on what the app does and whether they're paying money or not. Customer support can be a full-time job or worse. In the early days your users will discover every bug and problem imaginable.
Biggest mistake I ever made was scaling up an active user base on a free product without a revenue model. Twice I managed to hit a sweet spot in acquiring active users but because I couldn't leverage the scale to achieve anything other than more work for myself, I burned out and it collapsed very quickly. If you make more money as you grow, you can afford to invest in delegating responsibilities or at least justify it. Otherwise you've got a very stressful hobby on your hands..
Quick add-on edit:
If you're launching a web app for the first time, the biggest takeaway you should get from the comments on this thread is anticipate that customer support will be a major challenge.
One of the best ways to prevent a flood of CS inquiries is aggressive logging and alerts to squash bugs or outages before they inconvenience too many users. Lots of great comments in here cover that point, so take notes.
My service has a lot of moving parts, all of which are distributed among a couple dozen different servers. Keeping the technical infrastructure running smoothly requires a lot of data visualization of server stats, database stats, web request stats, worker stats, user stats, etc. I have everything piped into a nice dashboard so we can see if there is anything odd happening at a glance. When things break (and they will) you need to know where to look first.
Having 5k users also requires time to help them with support issues. Users generate a lot of bug reports, questions, and suggestions. To keep paying users happy, I offer a 1-day response time on support issues, which requires me to spend quite a bit of time sending emails.
Then, of course, if you want to grow the app, you need to spend time marketing it. We could talk for hours about this.
The list goes on and on. Feel free to shoot me an email (email in my profile) if you want to talk specifics about anything.
How's the distribution of traffic? Do people use it spread out over the month or mainly within the last or first days of the month? Do they use it on work days or throughout the week? Are they from different time zones?
What do they do? Is there a lot of write activity or is it mainly read? Is the read stuff cacheable between users or is it highly individualised. etc. etc. etc.
With reasonably "low level" tooling such as Java/Clojure/Haskell/whatever and a properly configured Postgres instance you should be able to go quite far. You're very unlikely to be CPU-challenged in the web app (again, no idea what your web app is going to be doing, so it's just a guess), most of the memory and CPU will be consumed by your database server caching and running queries. You should be able to handle a good 500-1000 db transactions / sec without much hassle.
IMHO most of the challenge will be making something that 10k people will want to use daily, not actually being able to scale to that many users.
That server runs happily as a single servo on http://modulus.io with absolutely no need for intervention on my part.
The rest of the application has similar requirements. I have one micro-equivalent server running the front-end, one the api and one the thumbnail generation. In general, this requires no hand-holding by me.
If your site is not processing or memory-intensive it should be feasible to scale to 10k users with a single $5/month instance on DigitalOcean or an equivalent level server on Heroku or Modulus or GCE.
Good luck attracting your first 5k users!
I have http://ficwad.com/ sitting around, with Google Analytics telling me it gets daily users in the upper end of that range. It runs on the cheapest plan webfaction offers (and I'm making it even cheaper with some affiliate credit...). The only place where it's running into issues is email, which I had to write a little queue system to throttle the sending to keep it under the plan's daily limits while still making sure that the important messages go out first.
I could make it fancier and put it on pricier hosting if I bothered to monetize it in any way.
And it took me nearly 4 years to get that many users. We cant all grow like facebook!
The second problem is motivation, after a certain amount of time, it becomes far less fun and much more of a burden, at which point you have to decide if you'll power through, give up, or quit totally.
The rest is just a software/hardware problem, and easily dealt with when needed.
As for the load, it's not that busy, but not that quiet for what it is, (http://stats.thisaintnews.com) and it runs on a cheap server from http://www.kimsufi.com/uk/, has a Xeon(R) CPU E3-1225 V2 @ 3.20GHz, 16Gb ram and 2x 1tb hdd, unlimited bandwidth and 1gbps link. It only costs about 25/month iirc.
- A reliable hosting environment. I currently have a Linode VPS (basic $20 package, with $5 monthly backups) that runs http://sleepyti.me, my personal web site, an IRC server, a Mumble server, and a bunch of other stuff -- it's not even close to being maxed out resource wise, even with all the constant traffic the site is getting. It's important to remember that consistent network connectivity is a really important aspect here: a 30-minute downtime during peak hours can easily lose a lot of users. I'd say Linode is great, and I'm very happy with their service, but I also host several Sinatra web applications on a Digital Ocean VPS that only costs $5 per month (although I do my own backups, rather than using their service). I've noticed zero load-related performance impacts. Clearly, though, there is a limit to how far that can scale.
- A production web server. This probably goes without saying, but a lot of webapp developers are used to just working on their own dev environment. For my apps, I use nginx (and thin, when necessary).
- Security. Make sure that you have the basics of application security covered in your app itself. OWASP produces some pretty great "cheat sheets" that can help out in this area. Furthermore, make sure that your server is updated frequently, using SSL correctly, etc. I work in information security -- please believe me when I say that getting hacked is not something you want to deal with when you're trying to grow.
Hope this helps, and good luck with launched your apps!
2. Do not invest time and/or money in learning another programming language or framework until you are sure that for a specific component of your product, programming language X will perform at least 2 times better with 2 times less HW resources.
3. Stressing again on the app stack (I saw some really pushy comments on changing the programming language), it is rarely the bottleneck of a web app. You'll scale your storage stack way earlier and more often than the app stack.
4. Know your data. That's how you decide if it's better to use a RDBMS, document store, k/v store, graph database etc. Like I said before, you're going to scale your data before any other layer becomes a problem so choosing the right data storage solution is crucial. Don't be afraid to test various storage solutions. They usually have good -> great documentation and ruby tends to be a good friend to every technology. There's a gem for everything. :)
5. Scale proportionate to your business/product growth. You will have to scale at some point. But be careful to scale proportionate to your growth. For example, if the number of users will double, get the hardware that suffices that growth. Less HW resources will lead to a slower user experience thus user dissatisfaction. More HW resources than needed will increase your costs and the resources that are not needed will stay unused. Why waste money?!
These are my 2c. As your business gets bigger - I hope it does - other problems will occur. But usually these things will last up to 100k users.
Disclaimer: this is for a generic web app as you didn't give us any details. Depending on the app, some of my points might be inaccurate or invalid.
Firstly, the load of a web app is going to be dictated by what the app actually does.
Also 5k-10k users should be clarified as to whether you mean total users or concurrent users. Testing capacity can be actually tricky figuring out how the number of users equates to actual hits to your servers.
As an example, we have nearly 50k accounts but on average only a few hundred are using the service at the exact same time. I would guess that our app is fairly complex compared to the average app. We run 3 app servers, 1 DB master, 1 DB slave, and 2 cache servers. Our monthly hosting bill is around $1,200.
If you back out the numbers, they go something like this: eight hour work day, worst hour has 25% of the user base actively logged in (we'll assume it is a very sticky app), 10 significant actions per hour implies 25k or so HTTP requests which actually hit Rails, which is less than 8 requests a second. You can, trivially, serve that off of a VPS with ~2 GB of RAM and still have enough capacity to tolerate spikes/growth.
Let's talk about the more interesting aspects of this question, which aren't mostly about capacity planning:
Monitoring: Depending on what you're doing, at some point between 0 users and 10k users, the app failing for long periods of time starts to seriously ruin peoples' days. Principally, yours. Depending on what you're doing, "long periods" can be anything from "hours" in the general case to "tens of minutes" for reasonably mission-critical B2B SaaS used in an office to "seconds" for something which could e.g. disable a customer's website if it is down (e.g. malfunctioning analytics software).
I run a business where 15 seconds of downtime means a suite of automated and semi-automated systems go into red alert mode and my phone starts blowing up. I don't do this because I love getting woken up at 4 AM in the morning, but because I hate checking my inbox at 9:30 AM in the morning and realizing that I've severely inconvenienced several hundred people.
You're going to want to build/borrow/buy sufficient reliability for whatever problem domain it is you're addressing. I wouldn't advise doing anything which requires Google-level ops skills for your first rodeo. (There is a lot to be said for making one's first business something like a WordPress plugin or ebook or whatnot where your site being down doesn't inconvenience existing customers. That way, unexpected technical issues or a SSL certificate expiring or hosting problems or what have you only cost you a fraction of a day's sales. Early on that is likely negligible. When an outage can both cost you new sales/signups and also be an emergency for 100% of your existing customer base, you have to seriously up your game with regards to reliability.)
Again, depending on exactly what you're doing, you will fail well in advance of your server failing on the road from 0 to 10k users. Immature apps tend to have worse support burdens than mature apps, for all the obvious reasons, and us geeks often make choices which pessimize for the ease of doing customer support.
My first business produced a tolerable rate of support requests, particularly as I got better about eliminating the things which were causing them, but I eventually burned out on it. I have a pretty good idea of what my second one would look like if it had 10k customers -- that would imply on the order of 500 tickets a day, 100+ of them requiring 20 minutes or more of remediation time. This would not be sustainable as a solo founder. (Then again, if that business had 10k customers, revenues would presumably be in the tens of millions, so I'd have some options at that point. There are many businesses which would not be able to support a dedicated CS team on only 10k customers, like e.g. many apps businesses, so you'd have to spend substantial brainsweat on making sure the per-customer support burden matched your unit economics.)
The biggest issue: selling 10,000 accounts of a SaaS app is really freaking hard.
As others have mentioned, multiple of those users can be hosted on an EC2 small instance. I suggest you start there. When moving to production, a bigger challenge is security, both in terms of intrusion and data protection. Making sure you have good rollback feature built into your rollout regime, because things can be fatal with real users. If you're using something that's basic like Heroku or EC2, you can scale way beyond that user strength with a click of a button. Scaling up would be least of your worries, at least for a few weeks.
If you're unsure, go with Heroku. Once you understand your system use, you can very easily switch to AWS and reduce costs.
What do you mean by this? Doesn't this depend on the usage patterns? Do you have 5-10k concurrent users or are these users spread over a day?
The operations side is a whole other profession that dovetails into the technical aspects of getting it running on a good architecture.
1. your architecture must allow for vertical scaling. this means upgrading your hardware to beefier, stronger, faster machines with more CPU power and more memory. vertical scaling is often a very cost effective of improving performance.
2. your architecture must allow for horizontal scaling. this means being able to provision and deploy new instances of your application servers very easily, using an automated process. more servers running in parallel is a very effective way of handling increased load.
3. you must be able to monitor and protect your systems. https everywhere. highly secure passwords everywhere, and you should rotate your passwords on a regular basis. log everything and set up services to monitor your logs and notify you when weird/bad shit happens.
Good database mechanics is key. That is the most important thing in my opinion. That is really the whole point in rails when you are deciding relationships. The abstraction in Rails when deciding what should be the best model structure is the same thing as deciding what should be the best and most efficient table structure in your database.
The rave about MongoDB is that it (maybe not quote me on this) "cures" the need for the desire multi-dimensional database. However, even with MontoDB's ability to expand due to it's not needing a pre-defined structure and the ability to expand out dimensionally to a certain extent, PostgreSQL (claims anyways) is still more efficient if you correctly index your tables (think about how you will be querying) and create the correct relationships. Build out models. Allow flexibility.
Also, don't forget caching. Redis and performing jobs is key in certain situations. However, don't get caught up in too much hype. Especially those coming from closed source technologies (Not just talking about caching technologies here but everything in general). They will sell and produce an atmosphere of necessity, but do some research first. Don't follow the heard. I am not going to call anyone out on this. Just do the research and think why is that necessary. I've mentioned Redis a few times and maybe that isn't even necessary either.
Most importantly, put your stuff out there. If it crashes, so what! At least you know you have something. And then you will have people who will give you advice in a coherent direction if necessary.
I salute you in your efforts. Now the most important part is put it out there and kick ass!
You may even want to look into Redis which is a cache system.
"Scaling problems rule . . . "
Sounds like you have the skills to grow this up to 500 to 1k paying customers on your own. Early on you can increase ram/cpu to handle any initial scaling issues.
Once you even have 1k customers you'll have revenue to hire experts to help you with scaling and security.
Good luck in 2015.
Heroku: $279 - 400 / month
Getting the users and keeping your head in the game is the hardest part.
However, the biggest piece to scaling your application is the automation of everything you possibly can so that you can scale when you need to. You're going to be in a bit of pain if you need to scale everything manually.
Here's a few things I automate using Jenkins:
* Creation of web application servers(whether it be Puppet, Chef or Ansible, etc) make sure you can bring up a new node quickly and scale your app layer horizontally. Ideally automate the addition of this node to the LB.
* Data store backup/restores to all staging environments on a schedule(tests backups/restores) this is done using some custom code and the Backup gem. This way your dev team has access to an env that closely resembles prod and can resolve current prod bugs.
* External security scans using NMap (again using custom scripts). The jenkins job will fail if output is not as it expects. This way if we change a layer of our infrastructure we can know if something is exposed and shouldn't be.
* Static code analysis using Brakeman
Information you're going to need to scale your infra:
* Metrics on each one of your hosts. Use DataDog if you can afford it, integrates with all major systems and technologies. Great tool.
* Log collection via something like Logstash or Loggly and being able to visualize your application and web logs.
* Application response time measurements using something like NewRelic or building your own using StatsD and tracking the heck out of your application actions
Last but not least, have a plan for failure. While you're laying in bed at night, ask yourself these question:
* What would happen if the DB went poof? Can I restore it? How much data will I lose from the last backup? Will I know when this happens?
* What would happen if you're now being scanned by 30 ips from the netherlands, all of which are submitting garbage data into your forms. Are you protected against this? How will the added load effect your app layer? Do you have a way to automate the responses to those requests so as to deny them? This is a case of when, not if. Be ready.
* What would happen if my site gets put on Digg(lol)?
There's no magic bullet here. It's just practice, failure and learning from yours and others mistakes.
The main stress on the system is really determined by the complexity of the SQL queries on each page. I've spent a great deal of time optimizing them, and I know there are certain ones that need to be further optimized. I have the database (MySQL) on one server, the web server and documents on another, and static resources such as images on a third, which probably isn't even necessary. All three servers run Linux and the database server has 48GB of RAM. They're hardly new; you could buy all of this equipment today for under $1,000 total.
The biggest technical bottleneck is really RAM; the biggest expense for this kind of site is bandwidth.
GS had for long time and still has the cache within Financial sector. Having GS on your resume will open doors at other financial companies for technology opportunities and give you an edge in your career growth.
Google has the cache right now but will it be persistent in the future. Considering Microsoft name on your resume no longer gives you any edge/influence like it did in 1990s, I will assume Google influence will be similar to Microsoft in another decade.
CS is a fast changing field so skill obsolescence is a major issue with the field and a major challenge to long term stability/growth of your career. You will have to stay up to date with newer technologies and continue to reinvent yourself every 5-10 years just to stay relevant. For example, knowing Microsoft stack is no longer as valuable as it was just a decade ago.
Working in an industry vertical such as financial, despite changes in CS technology applied to finance, you are still relevant because of your domain knowledge.
I interviewed at GS years ago and I ended up declining the job mid interview when I realized it would likely be years before I worked back up into a role where I'd have control over designing more complex systems. In short, GS seemed particularly good at pumping out sub-par code monkeys.
Microsoft/Google will have you drinking Kool-Aid and you'll be pushing their shit.
If you go into GS you will learn a lot more about finance and that's important, you can take that knowledge and move to a corporation that uses a better language like Haskell or Ocaml, or find some open minded people who will let you use a better language inside GS.
At Microsoft/Google you are stuck with .Net/C++ or something like Go which was designed by an idiot who forgot about incremental compilation. Also they are offering you less, so they can go fuck themselves.
So I would suggest just putting together your github and list of projects you've done, this should be a list of just the very best of the best, if its only one thing that can be fine as well.
Remember its not a awesome track record people are looking for with a junior dev, its potential and your current ability set and willingness to learn and engage.
We're always on the look out for up and coming talent so just shoot me an email if you get something together, I'd be glad to look at it for you and also see if maybe you'd make a good fit with us.
Money from the day job goes to paying the bills / mortgage / living expenses. Money from side work goes to toys be it a new laptop, phone, vacation, remodeling a room of the house, etc...
I probably wouldn't freelance if I was content with what I have and soon, that freelance money will start to be saved for a down payment on a bigger house instead of going towards the latest iPhone.
2ndary to this is the drive to keep abreast of new technologies. Sometimes, I can do freelance projects in a different language or framework - which makes me marketable for further side work. IE: I hated Wordpress - but then I started getting requests to do freelance work in Wordpress, so I learned it. Knowing Wordpress has scored me more work then when I ust' to write everything manually in PHP. (Not that Wordpress is new; but I wouldn't have learned it unless I was requested to write in it, for example)
I've found that if I REALLY want to do something, I'll just find time to do it. Unfortunately I haven't found a way to fake that kind of motivation. It's kind of there or it's not.
One technique I've used though, is to make my side-projects bite-sized (little tiny MVPs). That way, even if they only hold my attention for 72 hours, I'll still be able to finish them and put something up live. Later on, if I'm still interested in it, then I can iterate on it more.
Store: generate address keys on an air-gapped computer, best option is a linux live boot instance, encrypt the keys with a strong password and store on write protected media in a safe place. Make sure to have several backups of the encrypted storage file and for the love of bits do not forget the passwords. NEVER LET RAW KEYS NEAR AN INTERNET CONNECTED MACHINE, when you are ready to transfer funds out of the secure wallet(s) decrypt them on an air-gapped machine, sign your transaction, and then copy that over to a connected machine to broadcast.
I wouldn't recommend Bitcoins in general as an "investment." Only if you are buying the coins to be used in the near term for a purchase. Investing in Bitcoins is a little suspect, never invest what you cannot afford to lose.
For every position where it wasn't remote, did their job ads say remote? If not, there's nothing you can do about it.
The competition for remote positions is fierce, which is something I've mentioned before.
You seem like a talented guy if they got to the point of offering you relocation and you've also been offered senior positions, so perhaps your initial remote-work should be freelancing for mid-level projects at a decent rate (how about starting at $25-$30 dollars or something along those lines?).
If I had to run a survey asking remote applicants how many times they've applied for multiple positions, the answer (on average) will be like +10.
Take up freelancing or start your own remote agency. If you can't be the worker, be the boss.
It's much harder for me, also. I'm a C++/obj-C/C/R/python/ruby guy who only dabbles in web technology. I try to pitch web people on letting me learn, even at a short-term discount, and that doesn't work either. I thought putting out some iOS work would improve my remote-ability, but no go.
Funny thing is, before reading this post, I would've guessed Rails people had it much better than me. :-)
They all reply the same fucking thing: "Are you willing to relocate", "We are looking for onsite people now", etc.
So tired of this.
That's probably a surefire way to get people to stop mailing you completely.
Anyway, have you talked to recruiters? As much hate as they get on here, they can be very useful. A great recruiter will know your needs as well as the company's, and can give you an idea of a position's flexibility. In my opinion it doesn't hurt to reach out. Worst case scenario, you end up with some extra emails in your inbox every week.
Look for ways to help people. If you got big bad skills, prove it. Make people come to you.
Application => Interview 10%
Interview => Accepted 30%
Accepted => Funded 75%
Funded => IPO / Self-sustaining / Acquired 30%
I think your money would be better spent on, say, therapy to help you deal with your issues of belonging. One movie starring an Asian-looking man is not going to fix your identity issues, nor is any external event.
Asians are less than 5% of the country, so there aren't as many accusations of racism when movies are missing them as when movies are missing African Americans. Also, the "Asian American" statistic includes people from the Indian subcontinent. So if you feel like you're in a country that has very few people who look like you, you're right! If you were white in China, you'd feel the same way.
Regarding Asian actors: John Cho has had a fairly successful career, and it's only on the upswing. The Netflix show Marco Polo is absolutely full of Asians. Lucy Liu is the star of a TV show and many movies.
I find it ironic that you're crying about discrimination, but you mention several times that you want to see a male playing a lead role. Everyone wants the world to be in their image, but it never will be. Do what you can to change it, and if you can't, don't make yourself miserable.
Edit: Main characters in Silicon Valley, The Big Bang Theory, Heroes, The Last Air Bender, and probably lots of other films are Indian. Ben Kingsley is super-famous and half Indian.
Hum, I guess you can be hapa but still need an American last name!
You will certainly incur several thousand dollars in immediate costs for legal advice, filing fees, etc. You will have to pay a registered agent in a foreign country, etc., on an ongoing basis, which could be several hundred to a few thousand dollars per year for effectively forever.
You will also have potential issues with having to answer questions about whether you hold any financial assets offshore in the future. If you are, or become, a U.S. taxpayer, you have to disclose if you have aggregate of over $10,000 in overseas holdings. Including the holding company. You can guarantee that this makes you of much more intense interest for audit. If you lie about it, you set yourself up for penalties and possible criminal charges.
It will also just look weird to investors, company auditors, etc., if some offshore entity holds the shares instead of you. It won't be necessarily suspect, but it will be a distraction. Unless you have a substantial personal fortune already, in which case you likely already have estate-planning or tax-planning advisors and entities formed, it will just look bizzare.
In general, for a U.S. entrepreneur starting at zero and concerned about tax minimization, making sure you get long-term capital gains treatment and get your 83(b) election right is the most important. Next is trying to get Qualified Small Business Stock treatment.
Higher tax is due when a person withdraws money from the UG, and so on. But for reinvestment in other companies this system is ideal. Unfortunately Germany is also extremely hostile to bitcoin, and we're in the bitcoin space, so incorporating here seems like a bad idea on that front.
If you look at Google's and Amazon's corporate structures, they are a lot more complex than a single offshore holding company.
In reality, its probably not worth the trouble. Odds are it won't matter to begin with and if it does, investors will likely not appreciate you playing games with your incorporation.
If you're really making a startup rather than a lifestyle or small business, you're tax liablity will be zero to a first approximation. And if the business is a successful startup, then you'll have fuck-you-money either way.
But tax strategies do not a successful startup make. You may not even need a corporation at this point.