* cfgen, a config files generator that is fed with config templates andparameters to fill them
* CronBuilder, to pull a repository, run building command, and save theresults in another repository
* flowmon, which shows bandwith usage of different streams, each defined byBPF filter (a.k.a. "tcpdump syntax")
* sftponly, a shell for jailing in chroot accounts meant for data transferonly (for scp, sFTP, and rsync)
* xmlrpcd and its spiritual successor HarpCaller, RPC daemons for sysadmins
* logdevourer, log parsing daemon
These are just the public ones, the ones that were generic enough to be opensourced. I have few others that are/were too specific to the environment theywere written for.
For me Xamarin Native was slow and rigid. I highly doubt I could make 'innovative' apps with Xamarin. Maybe it is okay for people who want simple things like a "to-do app" or somethign that fetches list of images and displays it.
I wanted more and found no solution for things I needed, so I gave up and started xcode (swift + some objective c).
And let me be clear here, if I had spent same amonut of time on xcode as xamarin I would have been iOS dev master :)
Things just works much better. You can do anything you imagine with Xcode and swift. With Xamarin its more like find whatever library is out there and try to create something by combining these. Too many bugs.
This is no sly dig on Xamarin or Microsoft as I use alot of MS products myself. I have also tried phonegap, react native etc. and Xamarin is the best when it comes to cross platform without a question, but none of these can match true native coding (xcode swift/objc)
The real problem is that I can write a native iOS app in a fraction of the time it took to write a Xamarin app. Swift has improved iOS development speed so much I'm not convinced we need cross platform app engines (excluding games).
As for Android, yeah, native Android sucks. Activities and fragments are the worst idea anyone has ever had and no one agrees on best practices. But even with cross platform high levels of abstraction like Unity3D you still need to understand them. So, my current advice is to suck it up and write it native twice. Pick your favorite OS, start with that, and then port the logic.
* Xcode = iOS bugs + UIKit bugs
* Xamarin = iOS bugs + UIKit bugs + different runtime, language, memory model abstractions + .NET bugs + P/Invoke bugs & overheads + GC inter-op bugs & overheads + C# bugs + slow followup of platform updates
* Xamarin Forms = iOS bugs + UIKit bugs + different runtime, language, memory model abstractions + .NET bugs + P/Invoke bugs & overheads + GC inter-op bugs & overheads + C# bugs + slow followup of platform updates + extra UI abstraction layers + lack of fine level controls & features
However, in my experience, both Xamarin Studio and the build system are buggy as hell. Random or inexplicable build errors, things that break during updates, incompatibilities with official Android support libraries... I find myself doing 'clean project and rebuild' to fix random errors, or switching between alpha, beta and 'stable' channels all the time depending on which one does not have the bugs that I'm running in to.
Xamarin.Forms is simply a disaster. Because it aims to unify the apis for the UIs for various platforms it boils down to only the most common denominator of those platforms. And then makes it worse. Not only is it buggy, it is also very slow and incredibly limited. In our office we're keeping a list of all of Xamarin's silliness we encounter, here is just one of those:
"Clicking a Button changes its text alignment from center to left-aligned; it requires writing a custom Renderer to solve this."
I'd love to hear from someone using Visual Studio if their experience is more positive, but my advise is: please stay away from Xamarin.Forms and Xamarin Studio as much as possible.
I've tried Cordova/Ionic, Xamarin, Dropbox Djinni, and native iOS development. C++ is the closest I've got the a performant cross-platform solution, even though it go it's own quirks.
The problem with Xamarin is it'll always play second fiddle to quick moving targets of Android and iOS toolchains. In my case the Reactive Extensions support was utterly broken, and Visual Studio kept crashing on MvvmCross, Android SDK updates would make things hell, and I would waste at least 8 hours a week to fight the toolchain. The promise of cross-platform doesn't deliver much as you're trying to tweak your MVVM solution to Android/iOSs whims and fancies, which leave you with a fragile common logic.
If you want to write a TODO list of simple CRUD app, it might work, but for professional iOS/Android development, Xamarin is not enough. Xamarin doesn't free you from learning ViewController lifecycle etc and platform specific implementation details. So you're stuck on a foreign platform, with extra overload of learning C#/F# along with Android/iOS platform overhead.
My Advice: Learn Swift and Kotlin, and do native development. Cross-Platform is a illusion, and the road is paved with dead and failed projects.
Xamarin Forms is not Xamarin, it is a DSL. You do not need to use it. At its core Xamarin is c# with pinvoke to the underlying native platform implementation. You'll still need that platform knowledge but now you can share the core business logic between platforms.
To get maximum code share you'll need a MVVM framework such as ReactiveUI which is based on the Reactive Extensions and modeled on functional reactive principals check out https://github.com/reactiveui/ReactiveUI/releases/tag/7.0.0 or http://reactiveui.net
Also I would like to recommend to focus more on Xamarin.Forms, it's using more modern approach. XAML (it's a xml-derived language) is actually quite good for writing UI part. Add there some MVVM framework and you'd love it.
Edit: fixed spelling
The team is made up of a few React core devs and some ex-FB folks. They actually helped organize the last official React conf. The scope of what can be built using Exponent is expanding rapidly. And you can build apps that are virtually indistinguishable from Swift/Java apps.
If you want an example, I'd encourage you to download the Android version of this app: https://li.st/
In no particular order:
Stay the hell away from Xam.Forms, unless it's improved drastically in the last 6 months. Though I also think the whole idea is misguided.
For Android, go with Xamarin or Kotlin. I would take C# over Kotlin because of the maturity of the language, the tooling around the language, and the ecosystem. Either way, having a powerful modern language will be a godsend.
Concurrency on Android is much easier to deal with in Xamarin than with native. This extends to things like complex orchestration of animations.
You will do backflips trying to get startup-time down. But once your app is in memory performance is basically native-level.
Xamarin gives you some nice framework-level things that native Android doesn't. A good API for sqlite and http. Proper data-binding. MvvmCross and ReactiveUI are light-years ahead of anything that is available in native-land.
Xamarin builds are faster and more reliable than Gradle.
Xamarin introduces its own layer of bugs and glitches. You've added another slice of Swiss cheese to the stack.
Xamarin plugin for Visual Studio is crash/glitch city. Xamarin Studio is tolerable at best. Either way, your tooling will be faster but less feature-rich than Android Studio.
Every time you want to use an existing third party library, you will go through this process: Has anyone done an official binding for it? If yes, use awkward Java syntax in C#. If no, try to find an unofficial binding. If not found, try to bind on your own - 50% chance it just works, 50% chance you fiddle for half the day and then fail. If it's the latter, try to decide if you want to do a code-level port, or abandon your idea. Code-level ports are possible nearly line-by-line, it's slow brainless work.
One thing I love is that because it maps so closely to native Android development, you don't need to look specifically for Xamarin.Android tutorials/SO Answers/blog posts etc to learn how to do something.
Most of the time, information targeted towards native Android development will apply to Xamarin.Android also, and you can basically map example Java code to C# because they use the same classes/namespaces.
I'm going to be getting into Xamarin.IOS soon, hopefully the experience is as nice.
In the beginning, i thought about making a hybrid app, because it could save me time on the long run, but starting to developing with Cordova and EmberJS or even Xamarin was frustrating.
Xamarin on VS has some bugs that would only go away if i restarted the IDE in order for things to work. Also, i'm concerning about being dependant to a third party framework.Can they keep up to speed with Google,Apple and MS?
Another valid concern is app size distribution that seems to be considerably higher with cordova and Xamarin.
Since i started on Android, using Android Studio made my life a lot easier and i'm progressing daily and enjoying it, something that was a PITA with other tools.
In my experience i would say that it will be more time consuming (expensive) to develop a single solution for each platform as well as giving support, but the tooling is a lot better, also you can give users a better experience because you end up developing native apps for each platform that can take better advantage of it's ecosystem.
I'll find out in the future if i'm right or wrong.
My main complaints are:
* It's full of bugs
* The build system is unreliable and mysteriously breaks, which generally takes a full day to fix
* Basic functionality such as merging resource dictionaries (which are stylesheets, kinda) is missing
* No graphical UI designer or preview, so every layout change requires a recompile and deploy before you can see it
* Apps feel sluggish and crash at runtime without specific error messages
* It makes VS crash all the time. I'm not a regular VS user so I'm not sure if VS:CE2015 is a POS or if Xamarin is.
Obviously I think it's worth it, I learned it well enough to teach others. We have a bunch of free Self Paced Learning modules and videos at Xam University, as well as obviously the paid stuff that pays my salary ;-)
There is a ton of investment and effort from a small team, remember, we've only been with a "big company" a few months, so the improvements come at a blistering start-up pace. If you haven't seen it in a couple years, you should really check back.
If you are going to develop "all platforms" or even just iOS and Android, it is _certainly_ worth a long look. Access to every API you get access to in their native languages and the ability to avoid that language "context switching" pain. Plus, some amount of shared code (varies wildly, 25% - 75% depending on how heavily your app is just about custom UI and animations ).
Because we use the same APIs (except when we have better ones), you can leverage the same documentation and StackOverflow posts when you need to (yes with a little language translation), but you often don't need to because Xamarin has a _lot_ of great documentation as well.
And, as has been mentioned, "Xamarin Forms" does not equal "Xamarin". Although it is a valid choice for developing in Xamarin, it is only one option. Here is a super shallow comparison:
Xamarin Forms: Super fast for super simple UI's and interactions with common elements. It is highly opinionated on what it should do and look like on all platforms. Customization is do-able but starts to increase the complexity of the app quickly to the point where the below would have been a better choice.
"Xamarin" aka "Xamarin.iOS and Xamarin.Android": Use essentially the same development patterns as Native Android and iOS developers and use the same API's (plus .NET library, and many .NET 3rd party libraries). You get code sharing (as noted, amount varies considerably), ability to "think in one language (often including your server, which might also be c#), and access to some additional libraries (because we support both the Native libraries _and_ the .NET ecosystem).
Hope this helps :)
Oh, and a quick plug. Xamarin University is live classes taught by real, very experienced developers who can actually help you learn and understand, so we are, you know, worth asking questions of. Also, we'll be doing a free presentation all day on November 18th as part of Visual Studio Connect, so check us out there and see what you think of Xamarin _and_ Xamarin University!
Microsoft's strategy with bringing a phone to market appears to have failed so they're going to have to take the next best thing which is owning the development tools. I expect the outlook for the software to be extremely bright and if you plan to be a professional mobile developer I strongly suggest learning it.
Of course, this does not excuse you from learning how to develop for iOS and Android natively, but it is a great addition to your toolkit as a developer. It's also another box to tick for the recruiter or hiring manager.
However, as others have pointed out, Xamarin Forms is a bit of let down.
In my experience, if you try to create custom designed UI (which is quite common in the native apps), then you find that Xamarin Forms is very limited. To overcome this limitation you need to write something called as a custom renderer for each OS you want to support. So it doesn't really save you much time.
Xamarin has something called as Xamarin Labs project on Github: https://github.com/XLabs/Xamarin-Forms-Labs But it's progress has been very slow.
If you have a business data collection / reporting app, where how things look is not very important, Xamarin can save a lot of time while creating cross-platform apps.
However, I wouldn't recommend Xamarin Forms for B2C apps.
With that said, I've made a number of apps in it, and it works well enough, but the more abstractions, the more problems, and you want to do anything outside of simple UI apps, you are likely going to have to learn how the native methods work anyway.
One nice thing about it is that all the methods/classes are named almost the same thing as native android. If you want to know how to do something, you can find the android solution and just change a few small things.
So my vote would be to not do Xamarin and to choose a different cross platform development environment. Cross platform is the key. If you do choose Xamarin, I would spend some time and do a little bit of training before jumping in. It's not like the ease of building windows applications in VS.
Then I had a .dll that I could use in my Xamarin project. The Xamarin project was razor thin and I only used C# to connect my XIBs or Storyboard (I forgot what I used, but it was in Interface Builder) to the existing .dll calls and a specific type of hardware scanner.
The hardest part was getting that scanner to work, which would be not so easy for me even in Objective-C. But I basically had to create an Objective-C wrapper wrapped in some kind of C# wrapper. It wasn't easy but it was doable.
The hardest part was getting everything signed correctly, since I was using all kinds of layers you usually wouldn't use in "just software" project.
The overall experience was really good despite that the native editor for macOS wasn't that spectacular. I did the meat of my programming in Visual Studio and Visual Studio is a really great tool. Another part was done in Interface Builder which is a great tool in my opinion.
A friend uses it a lot for a cross-platform app written in Xamarin Forms. The thing with Forms is that unless you keep it simple you will run into Xamarin bugs, iOS specific bugs or Android specific bugs in your layouts and that can be challenging sometimes.
I would say that if you would make the UI in native code or storyboards and it still seems like an attractive idea to use Xamarin, use Xamarin. Don't use Forms.
The downside to this is that making a UI seems to even out your gained time--it's extremely messy and even complicated. Code that's valid in C# produces vague underwater bugs in Java code, which makes you keep hacking around until you find a working solution.
Not to mention the docs: some parts of the documentation are completely outdated to the point of not even compiling on an older version of Xamarin. For example, the tutorials on using Google Maps in your Xamarin.Droid application are way out of date, ignoring the fact that the "Google Play Services" component has split off into thirty-or-so components. Some of the most used API's are not documented at all, simply having a "To be added" description.
All in all I find much potential in Xamarin, and I really want to love it, but it's a messy nightmare to use, and it only makes me want to use Java and Swift separately for apps.
The answer to whether or not you should learn Xamarin depends largely on what you are trying to accomplish. Let me explain.
If you were to approach me as someone interested in Xamarin, I would start by asking what kinds of apps you are looking to build, how complex they are, and how much you care about UI quality and customization. This is to help decide between Xamarin and other xplat solutions, but also between Xamarin native and Xamarin.Forms, our cross-platform UI toolkit. Id ask what you hope to gain from a cross-platform approach, so we can optimize for that. Id ask what parts of your app you are looking to share, and how you plan on architecting your app to allow that.
Id ask how much experience you have with .NET, and if being able to use C# and/or Visual Studio makes you more productive. Id ask if you have an existing codebase you want to connect to. Your familiarity with native iOS development is a plus - the particulars of iOS and Android add to the learning curve, but you cant make good native apps without knowing the basics of the platforms youre building for.
From these considerations, we would decide if Xamarin is a good fit for you. It would be naive to say that Xamarin is the ideal solution for everyone, but it is a very good solution for many people.
At the end of the day, Xamarin is free, and it takes less time to get a handle on developing with Xamarin than it does to read this thread. I encourage you to try it out and decide for yourself.
I must say that, having its own quirks and nuisances (specially in Xamarin Studio, which was pretty buggy until version 6.x), it does the job pretty well.
In fact, when we wrote our iOS and Android clients, Xamarin was still pretty immature. But if we had to rewrite them today, it would be one our of first options, right after using the native frameworks (which ensures the best results, but drastically increases the costs).
Purely by coincidence, I have four blog posts on this out this week. The first one (on React Native and Xamarin) is here: https://unop.uk/cross-platform-native-mobile-app-development...
With both Xamarin and React Native there was a honeymoon period where everything seemed so easy and great. But at some point I always hit a problem where there was limited documentation, or unsupported features, and that really hurt my productivity and motivation.
The learning curve for Swift/ObjC always seemed much higher, with a lot more upfront investment required before I could make anything resembling a functional app. The iOS layout system in particular was an obstacle, as well as managing the tooling and dev environments.
If I had a free 6 months, I would just learn full native, but keep an eye on React Native. The dev experience in React Native is unparalleled, and it seems easy to drop down to native code (assuming you know it). Also the ability to easily contribute back to the community with NPM and react-native "link", makes me hopeful limitations will quickly be erased.
Xamarin wins if you need something for Enterprise. A lot of entry fields, validation, integrations with SSO, Sharepoint, other rest API. If you use MVVM well, it will lead to ~75% of code reuse between iOS and Android. Even more with XamarinForms. No complex effects, no complex animations, just enterprise.
Native wins if you want to make it more beautiful for end-users and you need to have a lot of customization. For example, customize map, pins and callout views. You will hate everything if you do it in Xamarin. No code reuse here
In general, Xamarin has very great chance to be #1 choise when you choose platform for Enterprise development.
Overall I've been very happy. Code re-use hasn't been stellar, but good enough to repay the investment. We have re-use not only between apps, but also between mobile apps, Windows desktop apps, and our application backends. I also feel I'm more productive than if I had so swap between Java/Swift/ObjC/Andorid Studio/Xcode.
Stability has improved a lot in the last year. Paid-for support was pretty good (esp. guys like @jonpryor), but the self-serve forums can be a bit hat-and-miss. I never had any killer bugs (but then I never used Xamarin.Forms...)
Overall: 85% happy with Xamarin.
As a day to day user, I quite dislike it. But rewriting our business code was not an option.
Had huge pain in full screen mode dynamically for all the devices.
Calendar with colors forced me to create a new custom control from 0.
To be stable with the controls if you make a tab control in one version should be the same in other versions also, not reinvent and change the wheel.
Easy and clear documentation. Forums all with lots of no one cares why it works int works on my machine stuff.
To new technology and has to get mature and stable. If you are not in the same versions of Xamarin in mac and windows it just not works properly.
Proper error message. I am getting an error like There were deployment errors. Continue. (Not run in administrative mode the vs 2015, closing the emulator or it was opened by other vs before, or you closed the emulator before finished the deploy)There are lots of errors like "aapt exited with code 1" that means there is some bad character in image or in files like -.... or files starts with number.
Also sometimes out of memory exception when loading images larger then 1mb or in android 4.2 larger than 300kb, even going lover to 100kb having problems in 4.2 android.
Proper editor for Xamarin.Forms is a must have if you want to develop. You can't see the design what you are doing with vs 2015.
Also designer is crashing all the time if i open multiple times and make some adjustments.
It has not been an easy road. After 2 years, I'm finally beginning to reap the benefits. The simple problem is this: this is another layer over the existing layers and it's very hard to get it right, especially if the underlying layers suck.
Just because you've learnt Xamarin Forms doesn't mean you can choose not to learn the underlying native platforms. You can skip over most of the details, but something will always come back to bite you, and then you have to go figure it out. Xamarin Forms works on top of Xamarin Android, that works on top of Android SDK and Android Tooling, which works on top of the JDK, which works on top of the OS you're developing on. So many places for something to go wrong, and usually presents itself in the form of a cryptic error at the top. Developing for iOS is considerably easier.
So there's still a fair amount of expertise to develop if you're completely new to mobile development. Take it for what it is -- an abstraction, and as with any abstraction, any concrete manifestation will have its issues, and you must be ready to roll up your sleeves to figure it out. And it does get keep getting better with every subsequent release.
But it does eventually help -- we have to get the complex bit right once, and then it simply works. Don't approach this like you would approach an Android app -- make sure you understand UI design best practices -- especially reactive design and data binding.
So if you're writing a one-time app, and you just want to target Android/iOS, and you don't care how you've done it, no it doesn't make too much sense.
But if you're trying to make a long-term bet, in this awful fragmented device-oriented world, (and having to write the same app twice goes against the very nature of your existence), well that's my bet, I will be cautiously optimistic. If you're on .NET, it's a no-brainer -- there are simply too many other benefits to ignore, and philosophically very true.
The architecture itself (Forms, Xamarin.Android, Xamarin.iOS, Custom Renderers, Platform Effects, Bindings to access native libraries) is theoretically flawless (or very close to it), a work of art -- and I'm a sucker for theory, no matter the real world pain.
Xamarin is nothing more than a C# wrapper around the native iOS and Android APIs. Everything you're familiar with (UIViewController, UIView, UITextField, UIButton, etc) remains the same. The main benefit (other than using C#) is that all non-UI code can be shared across platforms (iOS, Android, Windows, server, etc).
Xamarin.Forms is built on top of Xamarin and lets you reuse the same code for UI as well (using their own abstraction that's similar to WPF/UWP). I would only recommend this for relatively simple apps as you lose some control over platform specific details.
1. If you don't use Xamarin and you don't have a team in-house that uses C#, don't bother. You'll be better off doing native development on iOS and Android platforms.
2. Your app won't be as pretty, and it won't adhere to platform native UI conventions as well if you use Xamarin.
3. Xamarin does a better job of it than most but it will still be lagging in access to the latest features.
4. BUT, if you are doing a vertical market app that wants to be cross-platform AND you have C# coders you can apply to that task, Xamarin is the best choice.
There are a lot of places where choosing Xamarin makes a lot of sense. And the people who created Xamarin are excellent. And now that Xamarin is owned by MS, it won't die because it is hard to make money as a cross-platform startup. But as with every other cross-platform tool for non-game apps I've seen, it isn't the best choice in green-field situations.
Recommended workflow:0. Never ever use Xamarin.Forms other than quick prototyping. If you develop applications with other cross-platform frameworks, you already know all of them sucks and Xamarin.Forms is not an exception.
1. Create PCL / Shared project for your business logic (also your view models if you're using MVVM architecture). Believe me most of your application is platform independent (except the view layer). Your api communication, storage operations all handled here. See 3rd article to how to make storage/network platform independent.
2. Create native projects for each platform (iOS, Android, Windows) implement native views here (use xcode, android studio if you need visual designer). This part should be exactly the same as your swift/java code. For iOS you're just implementing an ApplicationDelegate class and UIViewControllers as same as your swift code. Same for Android part, nothing special to xamarin just implement your activity classes. At this level you have the full power of your native platform with one exception 3rd party native libraries. It's possible to use (yes i used some swift/java libraries for youtube player) them but really hard to integrate to your project, that part has to be improved and better documented.
3. Your shared code base need native features, for example storage implementations are totally different for each platform, or changing views (navigation) will be implemented differently for each platform. Since shared code base shouldn't know anything about native platform. You should abstract these functionalities with interfaces. For example create a storage interface with methods like saving/reading/creating files. Another example might be network communication. Abstract it as an interface on your PCL and implement this interface in your native project with full control of your platform. Your shared code base only knows how to use that interface. And then each of your native projects should implement these interfaces. At this point dependency injection may help to register implementations easily. Actually that part is what makes you share your business logic. Writing idiomatic cocoa navigation code is much better than using any cross platform implementations, you have full control but in the same time your shared code base using them without knowing anything about the platform.
In the free version you app expires after 24 hours AND it has to be below a certain size, I dont remember maybe 2 MB or something.
To make something you have to cough up a lot of money, and the sad part is this information is incredibly hard to find, you only stumble upon it when you download GBs of files.
- I want to have from now on x% more salary, kind of a PITA bonus because I have to deal with amateurs
- maybe (more) equity, because if I have to tell a founder how he has to do his own job I am not only an employee any more
- to claim the right (maybe include it also in your contract) to refuse breaking sprints
And of course I would start for looking for a new job, just in case.
If you don't still believe, pull off the band aid and tell the founders you plan to leave. However, tell them you'll stay with them through the new year to 1) buy you time and 2) not burn bridges with them.
(a) enough influence with the company leadership to make a real difference to the culture in the immediate future
(b) the company has good prospects if only the management issues could be resolved
(c) the risk of staying is balanced by a huge potential upside for you personally (such as already having a potentially life-changing level of equity AND a bulletproof contract)
then I would suggest you make plans to leave as well. Loyalty is a fine character trait, but so is pragmatism. There's no need to burn bridges or screw anyone, just find a better option, give a reasonable amount of notice, and do what you reasonably can to hand over to whoever is taking over your responsibilities for as long as you're still there.
You don't say what your side project is, but you have to ask your self whether you need liability protection, that is what are the chances someone is going to sue you for damages. If you feel you need liability protection, then you should form an entity. I recommend an LLC in most cases. It is a pass-through entity for taxes which means you pay taxes on your individual return (though it still must file a business tax return). Also buy insurance.
The other reason is ease of administration. A legal entity will have some form of controlling document. In an LLC, it is the Operating Agreement. This spells out the rights and duties of the principals in the business. It also allows for common ownership of the business assets. As principals come and go, the LLC continues on. Finally, if you get big and you bring on investors, they will want to see a legal entity for their protection.
The drawbacks of forming an LLC are the time and effort of drafting and filing all the proper incorporating documents, paying the filing fees (in California $800 per year), and the extra tax forms.
This is a complicated topic and I have given a high level view. There are lots of resources on the internet and in bookstores on this topic. Nolo.com would be a good place to start.
No I operate as a sole proprietor.
> 2. Do you pay quarterly taxes?
Nope, I pay the penalty since my income and ability to shelter it vary from year to year. The penalty is something like 3% on the total taxes you owe. Not too bad given the flexibility holding your money provides. Maybe I can load up a i401K that year or need to save for some big purchase which is more valuable then just giving the IRS the money.
> 3. Do you list it as other, unreported income on your returns?
I file a Schedule C
I do it all using TaxAct. Super easy and cheap. Helped me to understand taxes as well.
I haven't incorporated any of them, I see that as an unnecessary hassle.
I'm in England, and (as far as I'm aware) quarterly taxes aren't a thing here. Until this year the income was negligible enough not to bother paying taxes, but this year I've been keeping track of finances with ledger and I intend to pay taxes as "self-employed" for the first time at the end of this tax year.
And to make sure I'm going in the right direction (not going to run out of money) I add up my net worth, split by category (bank account, peer-to-peer lending, stocks and shares, Bitcoin) at the start of every month and keep track of it in a big text file.
 currently focusing on SMS Privacy, read my Indie Hackers interview at https://www.indiehackers.com/businesses/sms-privacy
I have to say that Atlas might be one of the easiest, and least expensive, ways to deal with the incorporation and the rest.
I've got an LLC for basic liability protection.
PayPal is my business system. All sales come in through PP, and I use the PP credit card for my purchases. All documents are electronic. At tax time, I download the entire year's transactions into a spreadsheet, add things up, and enter the totals into a Schedule C.
Rather than filing quarterly taxes, I've simply bumped up the amount of withholding from my regular day job.
Lawyer and Accountant. Budget about $10k/yr
Start as LLC then move to C-Corp as it grows and takes investment money. Accountant files quarterly federal and state taxes. My wages are taken out on W2.
When smaller the project is an LLC. Accountant still files paper but under $100k only annual. Just take the money out as distribution.
Tax implications from either route. Encourage you to find a trusted advisor on those matters
If you're making more than a few grand (net) then you might consider having your LLC taxed as a corporation and enjoy the 15% tax treatment. If Trump gets his way, corporate taxes might finally be reduced and you'll get even more favorable tax treatment.
However, if your intent is to enjoy the income but you expect a narrow net income or loss (lots of expenses can be attributed to your business), then stick with a single-member, disregarded entity, LLC.
While the annual cost of $800 minimum tax plus maybe another $500 in administrative fees (accountants, legal, etc.) is real money spent, you can make it back in tax deductions and potential liability. If you have a structure in place (another entity that is not you personally), it is much easier to deduct expenses (less red flags) IF you make an attempt to actually generate income -- the government cannot stop you from being a bad business person :)
If you are in a 50% tax bracket, this could easily be offset by $3000 in expenses such as hosting fees, domain names, costco membership, cell phone, even your car lease. If you are renting, you can possibly deduct some portion (~20%) of your rent (do not do this if you own a house). Get a separate bank account + debit card, a separate credit card (maybe a business one with rewards) and pay everything using that entity. You will end up making "owner contribution" from your personal bank account to your business account every month.
The extra wrinkle if you have multiple projects is that you can further separate your different projects into "DBA"s (Doing Business As) which costs an extra $100/yr (County Clerk Recorder, Publish in Magazine, separate bank account, credit card, domain name) 100% owned by your LLC (or S-Corp). If you shut down a DBA, it will cost maybe another $50. You will need a DBA to open a bank account under that name.
While this may look like overkill, this keeps everything clean and if your side project does take off, you will have some history with the business.
On a day-to-day basis, what I usually end up doing is setting aside a day to deal with all these entities. Most bills are on each "company" credit card and I call all the credit card companies to align the closing date. For example, all my credit cards close around the 22nd or 23rd of every month. On the 12th of every month, I pull up each account and pay them all using one screen of online billpay if you have all your business accounts tied together using your SSN.
Note: I have other companies that are their own entity as they are generating income & have other partners. The setup here is specifically just for my side projects.
My state LLC
>Do you pay quarterly taxes?
Absolutely, mail a check with the coupon based on income earned.
>Do you list it as other, unreported income on your returns?
Schedule C and income from business, you pay Self-Employment Tax, SEPs are nice to push off the income to retirement and see a tax benefit if it's supplementary.
I also carry worker's comp and liability insurance, pricey, annoying to setup and deal with but worth it from my perspective.
If you have a small side project with low risk then I recommend sole proprietor for sure.
In any case, soon as you start generating income you need to track income/expenses, register your business, register for HST and setup a separate bank account. I think TD here charges $25/mo just for that privilege.
So yeah, sometimes a fun side project loses its excitement when your stuck doing paperwork and start adding up the expenses, it's not worth it.
The $800/year is indeed painful but it's cost of doing business (and maintaining continuity).
As for taxes, the penalties are not particularly punitive if you screw up and you have years to manage the situation before anything critical happens. In particular, if you go one year without making quarterly tax payments you will probably walk away with no penality.
EDIT: specifically, in the index entry for "business structures" and the chapter on taxes. I also bought a few "personal MBA" books, & on marketing etc, but this seemed clearly the best one to start with; those others I think I'll come back to, later.
If not, how would I go about the income from my side projects?
I ran my businesses for the first ~6 years as unincorporated sole proprietorships. The exact mechanisms of doing this are different based on where you are (both at a national and local level). Japan and the US are fairly similar: a sole proprietorship exists as soon as you say it does. (In Japan, you should probably walk down to the local tax office and file a form announcing your intention to file next year if you plan on making more than $30k revenue. They'll know which form to file and you are capable of doing it write if you can read Japanese.) Some US localities will want you to file for an assumed name / "doing business as" (DBA) with your local county clerk or have a city business license -- you can usually find out about that with some quick Googling. I filed a one-page form with Lake County, IL saying that I was doing business as Kalzumeus Software (several years before I had that LLC) and then had to pay ~$50 or so to put an ad in the newspaper for a few weeks saying "Heads up Kalzumeus Software is actually Patrick."
You pay taxes on the profits of the business, not on the revenue of the business, which is a crucially important distinction that many HNers do not know when they start and which many do not properly operationalize even if they know it. I cannot underline this enough: no software entrepreneur I've ever met had a good handle on this when starting. If you sell $10k of software and think "Hmm my profits are maybe $9.5k -- the only expense was a DigitalOcean server" I think your profits are ~$0 after you spend a few hours with an accountant walking through credit card receipts. They're going to walk you through things like e.g. depreciation, apportioning business and personal use of your Internet/cell phone, conferences, business entertaining, (potentially!) home office use [+], etc etc. (A thing your accountant will probably tell you, in the US, is that if you want to decrease your tax burden for 2016 buying a Macbook for the business
You should ordinarily be listing income from a side business as business income, at least in the US and Japan, and not as any other type of income. This is both a) correct and b) gives you the ability to deduct expenses, which is not possible on all types of income reported on e.g. one's 1040 or .
The US has you pay quarterly estimated taxes. There are safe harbors which are likely to cover you in the first year of running your side project. https://www.irs.gov/publications/p17/ch04.html#en_US_2015_pu... The calculation of these can occasionally be complicated; this is a great "ask an accountant" question because this is their bread-and-butter and that particularly calculation is something that most accountants would do for free, on spec, as part of soliciting your business for next year. The penalties for not paying estimated tax in a timely manner are very small -- many entrepreneurs of my acquaintance treat timely tax payment as a small discount to the "real" tax bill and elect to simplify their lives by paying taxes once a year rather than by calculating quarterly.
The chief reason to put a side project in an LLC is to reduce the risk of liability of the side project flowing to you. Most side projects have vanishingly little liability. Ask me for a citation some other time, but even software development freelancing is low-risk -- my insurance company calculates than ~0.5% of freelancers/consultants get sued in any given year. Downside: when they do get sued, win or lose, that averages $40k in costs. If you're doing something where you have non-trivial liability or if the prospect of $40k+ vanishing just makes you unable to sleep at night, incorporate and get an general liability / E&O policy. (Costs $1k or so per year as a floor; mine as a comparable is $3k and has the words "patient health information" and "HIPAA" on it, which contribute expense and underwriting fun times.)
If you have additional questions about this sort of thing, I'm writing about it this week (in my employed capacity) and would love to hear what you're thinking about.
[+] Home offices are historically a contentious deduction in the US, but one of the reasons you have an accountant is so that they tell you consequential things about the difference between the regs as written and the regs as customarily applied like "You don't have an office? Oh, in Japan, we just deduct 40% of your rent then. Substantiation requirement? Ah you Americans are such kidders. There's the law on the books which is $CALCULATION but the tax agency basically feels like you don't screw them too much on being aggressive and they won't screw you too much on bringing out a tape measure to your kitchen.")
1900 euros/month is peanuts. Even considering that you're fresh CS graduate, you're worth more.
Also, the fact that the contract is "non-negotiable" is a huge red flag. This company doesn't respect their employees. Trust me, you don't want to work in the environment like that.
Keep looking for job, the market is huge, you'll definitely find something decent.
But if you're happy to take a lower salary in exchange for some other perk then that's OK. I took low salaries to work for start-ups for the first 4 years of my career and that worked out very well for me, as I was given a higher level of responsibility than most companies and I now feel I am further ahead than my peers.
A company should be able to be very specific about what it will offer you. If not, it might be in the early stages and run by inexperienced people, which can be either a good or bad thing depending on your career goals.
If in doubt, negotiate or reject. It sounds like you're in a comfortable position anyway.
20k/yr is a average salary for a junir developer in Spain. 30-35k/yr for an experienced one (5+ years). 35-45k for a manager.
The red flag for me is the lack of information about your role in the company. This means peope in HR don't have a clue about what is going on. Probably you'd be outsourced to a client (a sign of the non-negotiable money amount).
Honesty is a huge deal in any employment situation. If you feel like that before you even start, the likelihood is that it will only get worse.
If you have no immediate need for the money, take your time and find something that feels right. You'll know it when you do.
Front end: We use Ember because of its balanced focus on progress and stability. The team behind it is solid and batteries are included.
Application: Ruby/Rails, Elixir/Phoenix. Rails is great for getting up and running quickly, and your problems with #scale won't be on the application later. Elixir (really Erlang's BEAM) is great at quickly spinning up/down lightweight processes that handle raw data. So if you want to build a CRM and, say, manage emails, then it could be a good fit. Or if you want to process a 1,000,000 row CSV import, etc.
Database: Postgres. Binary JSON columns give you flexibility, plus PostGIS for all of your geospatial needs. Structure as much as possible to take advantage of the smart people who have spent countless hours building a world class database. You'll appreciate their focus on correctness.
My overarching advice: push everything as far down the stack as possible. If you can do it in Postgres, do so. Data correctness is your life; better that your DB throws a fit than your application serving bogus data.
Happy to answer any specific questions!
(And I wouldn't be a YC CEO if I didn't take the opportunity to mention that we're hiring! http://seneca.systems/careers)
I've gone over Angular 2, React, Vue.js, Ember, Polymer, and so many more. The one I really connected with is Vue. While I realize it's only been gaining popularity in recent months, there are some big companies who start to make use of it in big scale production sites (Alibaba, Laraval, ...), this makes me pretty confident that support will not be an issue.
For the db I would definitely choose Postgres, but I would go for plain old relational tables, and maybe use its JSON features for data which is isolated and does not relate to other data (e.g.saving spreadsheets data).
For the server I would choose NodeJS + Express + SequelizeJS, and I will probably make use of some GraphQL library up ahead too.But honestly, if you choose to make your system a SPA, then your server will not do much of the heavy lifting anyways - it will probably expose an API point and be used as an interface to the database, so I think any back-end stack would fit in. I would also consider Python + Flask + SQLAlchemy, which used to be my stack of choice few years back.
I've been dealing with different CRMs recently (SFDC, Netsuite, MS Dynamics, AgileCRM) and I don't think tools really matter, architecture that will allow you to customize everything is the key for CRM
As my personal choice it would be (I'm a full-time Python dev)
* Java/C# (there's nothing really dynamic in crm, entities, fields, etc with different "name" and "display_name" for each customer, IDE would allow me to manage complexity)
* PostgreSQL (no NoSQL, CRM is all about relations)
* ElasticSearch (with Kafka for replication from db)
* RabbitMQ for offline jobs
Stack is two separately hosted apps.
Frontend: react, redux, webpack as a single page appBackend: Rails for an API
Why? I wanted to learn react and redux and I like using Rails for my backend and was comfortable with that.
Any stack will get the job done. Use the one that yields you a shippable product in the end.
My stack is ExpressJS, AngularJS, PostgreSQL, NGINX, DigitalOcean, Route53, PM2. And I fly through it.
For our team that would be Node.js with a React frontend, with probably MongoDB as the database, but every team is different.
As a side note: APIs are very important for CRMs, but as long as you design your API well you can swap out, move around, and refactor your backend as it makes sense.
It'll answer all technical questions, make it easier to hire, and make it easier to fundraise. Oh! And easier to get customers.
Then think about how people get info into your system - if its email, use Nylas (it's gonna be email to start). If it's voice, use Twilio. If it's directly, then abstract all the complexity and use the right terms for your market.
I don't work for Salesforce, I never have in the past, and I barely use it now. But choosing anything else is nuts.
The main parts are:
- type safety, in the hope that it speeds up development. TypeScript 2 is my main contender here.
- on demand module loading, so I can shrink the initial page loads, will go with Webpack 2, because it lets me use System.import() and automatically splits these imports into it's own files
- interaction flow control completely based on observables, because they compose nicely and with genertic types ease development quite a bit. Will go for Cycle.js (+xstream), because it's rather tiny and really everything there is an observable, data and UI, also it's written in TypeScript. Feels a bit like Angular2-lite.
- WebComponents based UI-widgets, because I think they should be independent from the rest of the application, don't know yet if I'd go for Skate.js or Polymer, maybe I'd even use custom components directly. But I like the Skate API much more than Polymer or the "native" API.
- data retrieval will be based on GraphQL with the hope that it will lower data-on-the-wire if the client has more control on that. I also hope that the GraphQL subscriptions (based on WebSockets) will integrate nicely with the observables. Apollo-Client is my fav here, it's framework independent and written in TypeScript, too. I'll probably use their GraphQL-server, too.
Every part is pretty much independent of each other (besides everything being written in TypeScript, haha) so I think I can use parts of it in future projects.
Right now, I lean more toward the integrated views than most of my fellow developers. Very few people would take an always/never position on single page apps, so this generally boils down more to how far people want to take them. Some are more eager to apply them in a wider range of scenarios than others.
One other thing - remember that it is relatively easy to expose a rails method as an API even in the absence of rails-api. My guess is that this is true of most integrated frameworks that provide a view tier. You won't be locked into an integrated app provided you keep logic out of those views! You should be doing that anyway. Also, make sure your tests don't rely exclusively on the views to verify logic that isn't in the view (again, you shouldn't be doing this, but I've seen it a-plenty). That'll keep you flexible enough to transition away should you want to at a later date.
On the backend, ASP.Net core is looking good to me. Although, Go and Elixir are picking up fast. Heck, ignore the haters and use Node if you want.
Finally, don't be scared to use something "old" like Java (EE or Spring) or even Rails (personally, I believe the whole performance fiasco is not as bad as you would think)
If latter, I would probably choose vuejs/Play2/MongoDB. (Replace Play2 with RoR or Django or anything else).
If you can can get a good IBPMS for a nice price probably you have a good solution that will be easily customized.
3. Foundation for Rails
This is literally everything you need to get it off the ground as soon as possible.
This is what has helped me build Allt.in (https://allt.in) and UnderstandBetter (https://understandbetter.co/)
Starcounter (http://starcounter.com) is an in-memory application platform, which is comprised of an in-memory database (ACID-compliant) with a built-in app server.
You can compose a complex business system out of small apps (micro apps if you will). Apps don't pull the data from the db - they run in the db. Multiple apps that run in the same db share the data in real time. Our first clients are retail, CRM and advertising tech.
From dev perspective, we like to call our approach "collapsing the stack". There is no ORM. Your code classes become the database tables. You can use our (Web Components based) approach to create thin client HTML views that bind to the data using JSON Patch. This saves you from running huge amounts of glue code, which is typical for traditional software stacks.
Right now we are on Windows/C#. Linux and macOS is coming next year. Other languages will follow.
Edit: looking at what you already considered, maybe: back end: Ruby, front end: VueJS
I'm not sure how universal it is for CRM systems to be all about who knows whom, from where and what's the nature of the relationship, but the ones I've been involved with certainly all were.
Backend: KeystoneJS + React, Redux (Universal JS)
I've built the framework to a CRM (Python and Flask) and I wonder how it'd line up with your needs. I'm not currently using it, as it needs a bit more work, but I'd love to talk to you about your project.
If you're a profitable company with a sizeable userbase, just buy Salesforce. It's clunky, it's expensive, but you can find contractors really easily to make it do whatever it is you want. Or you can learn the Salesforce platform yourself and build your final CRM on top of that. Welcome to enterprise IT!
If you're a scrappy start-up, or non-profit, with a small number of people to serve, you can use whatever you're most comfortable with. A single database (perhaps with hot replica,) a single application server (perhaps with load balancing for good measure) and you have everything you need. Use whatever you already know. PHP and Bootstrap? Ruby and Rails? Node and Angular? Doesn't matter.
If I were in the middle area -- successful company, lots of customers, but not actually at the point where I need the Salesforce behind-covering and easy contractor access -- then I would probably use React for the front-end GUI, and Haskell with Warp for the back-end services, hosted on top of MySQL or Postgres, with Redis for data caching, plus some scripts to make creating bread-and-butter tables/indices/queries simpler and less repetitive.Like the poster above, I kind of like having an "escape column" for "annottation data" stored in JSON, although it can simply be a plain TEXT. As long as you don't need indexing, it makes adding new columns easy even if you have a table that's too big to change online.
There are, however, some upcoming developments which will change the situation in the next couple of months:
1) The main matrix.org client, Riot (https://riot.im) has end-to-end encryption now in beta. This will offer Signal-strength encryption, but in a decentralized, e-mail-like system with federated servers. This will create an ecosystem where people are no longer dependent on the goodwill (and solvency) of a single entity to use a good, encrypted messaging app.
2) Briar (https://briarproject.org) is a new (Android-only) app, designed for people with an especially high need for privacy. It works without central servers (through Tor hidden services, but hides the complexity of that), even works when the internet is down (e.g. when mobile networks are shut down during a protest) via Bluetooth and direct Wi-Fi connections, and it offers extra features, like a panic button that deletes all your data. It's in beta at the moment, with a planned release early next year.
TL;DR: Use Signal or Wire for now, but be ready to switch to a better system when available.
It has text (one-on-one and groups) and voice calls. Things that could use improvement: group management, switching to a new device. It doesn't have some of the features some people like (stickers and whatnot), but personally I don't care much about those. Video calls would also be nice.
Mobile only, paid, end-to-end encrypted with in-person verification. Team and infrastructure is based in Switzerland
First of all, if you want total encryption, you'll need to make sure your connection is encrypted and secured as well (meaning following you back is not trivial), so the whole messaging should go through Tor.
There are plugin solutions for bitlbee, for Pidgin, and many other clients supporting OTR and similar encryptions.
If you want all-in-one solutions, you probably should look at Tox, which is a protocol, not just an app, built to be encrypted by default. It's complicated and nasty to use and set up, but it's pretty secure.
Other ideas might be drawn from the prism-break Communications list, listing apps like Chatsecure or Xabber, both encryption-capable jabber apps.
: https://www.torproject.org/: https://wiki.bitlbee.org/bitlbee-otr: https://developer.pidgin.im/wiki/ThirdPartyPlugins#Securitya...: https://tox.chat/: https://prism-break.org/en/protocols/: https://chatsecure.org/: https://www.xabber.com/
Personally I use Signal and Whatsapp from that list.
Refer to http://www.apple.com/business/docs/iOS_Security_Guide.pdf which specifies that RSA 1280-bit keypairs are used, and the private key is held on the device. So in terms of transit - the protocol should be secure.
The only remaining option would be to question whether iOS is secure/insecure.
Apple claims:"Apple does not log messages or attachments, and their contents are protected by end-to-end encryption so no one but the sender and receiver can access them. Apple cannot decrypt the data."
- Encrypted local on-device storage. We have an always-on mechanism and never store the entire local storage decryption key on the device. It's half on the device and half on the server. In case of lost or stolen device, all data is still safe. In fact you can effectively "wipe" your biocoded app data even if the device is offline by deleting the server part of the decryption key.
- We allow private servers (not for free).
- Double ratchet algorithm for communication.
Also check out Alex Becker's youtube channel(he is the founder of Source Wave). He is really awesome and shares a lot of amazing things.
I'd consider installing it and using it to test my content against, even if you're not using WP as a part of your stack.
- Google Webmasters
- Matt Cutts' blog
- Search Console Help
You also gain a lot by listing the major players (Google, Bing, Alexa, etc) and then telling them about your site (domain verification, etc).
Needless to say that good content and being a good citizen help.
We've caught issues ranging from expired passwords, missing files / files with incorrect permissions / write failures, sync issues and other obscure gotchas.
Catching a failed step during deployment can sometimes prevent a huge rollback effort and save a lot of time.
Don't rush new features or code into production. Don't deploy anything after 5pm on a Friday.
Documentation, documentation, documentation. If there's a piece of knowledge for your app that's only in your head, you have failed.
Also, improving production performance/scalability.
And making apps simple to deploy. That's about it for me :)
Understand why certain security procedures are put in place even though they do create some friction.
Lately, I've been thinking a lot about potential consulting niches in the software industry at large. With many of my clients there seem to be recurring patterns and challenges regarding software development processes and software products:
- dealing with complexity
- improving code quality
- writing reusable code vs. writing disposable code (i.e. code that can be adapted and replaced quickly)
- communication and knowledge transfer
- having to write huge amounts of boilerplate / 'plumbing' code over and over again
Overall, managing complexity, improving communication, doing away with repetitive processes are huge problems. It's not like nobody is addressing them (IDEs, agile processes focussing on communication alleviate those issues to some extent) but these issues probably are still the most prevalent impediments to efficiently developing software that fits the requirements.
So, I think there's an opportunity for consulting companies in terms of reducing the complexity of their software and processes. I'm just not sure exactly how to package this as a productised service.Then again, consulting firms like McKinsey have been doing similar work in the general context of business management for decades - with varying degrees of success.
Writing a book (leanpub is a good place to start) can provide you with some credentials.
I've met a few fractional CTOs who work with startups/smaller groups within a company to provide technical leadership.
Join a startup as a CTO (I've seen 2-3 startups looking for CTOs/founding engineers, and I haven't looked that hard). Of course, the issue here is your risk, and I don't know your risk profile at all.
1) Autoplaying videos, especially ads.
2) Pop-ups / overlays.
3) Loading lots of extra elements causing text to jump around.
Especially true if I'm just browsing around and click on something that looks interesting, the above will take that thing from "this might be worth 30 seconds" to "not worth it".
Why kill that little dopamine boost someone just got from clicking on a link to your site? If you're wondering why your bounce rate is so high... though maybe these dark patterns bring in enough ad revenue that it's worth it. I don't see how 3 helps that, though, just lazy coding. Or maybe other people are more tolerant and it doesn't really affect the bounce rate.
Some websites have legitimate use for autoplaying media. Some users (believe it or not) actually _like_ their videos autoplaying when they scroll through their Facebook feed or whatever media site they visit. Are their usecases and desires not legitimate?
Your argument is in the line of "I don't like going to Starbucks, so legislators should get together and ban Starbucks stores for everyone". Even if you have a legitimate reason for not liking Starbucks, the solution is for you to just stop going there. If you don't like websites that use autoplaying media, then stop visiting them. Or, like some others in this thread suggested, install some plugin or other software that makes sites behave the way you want to.
A call for browser vendors to implement some opt-in setting that does what you want would be much more realistic suggestion. (As some other comments pointed out, for some browsers this setting already exists)
additionally the dom.audiochannel.mutedByDefault and media.default_volume settings may also be useful if you want slightly different behavior.
If you want a more blunt tool you can also use content blockers to block media content until you opt into it for a particular site.
> I know there are plugins than can somewhat do this, but no solutions are universal or great.
How so? There are about a dozen FF addons covering different use-cases like muting inactive tabs or all tabs but a designated one. If none of them meet your particular expectations that might also indicate that everyone wants something different and it is difficult for browser vendors to cover all expectations. Maybe you should modify an existing addon instead to do what you want.
So far I have not had a bad autoplay problem on iOS. However a growing problem is obnoxious pop up ads that are difficult to escape.
Overall more of my Internet usage is shifting to apps because the Web is just too annoying. Years ago the Web was like a friendly, boisterous marketplace in a safe town. Now it's like the street in "Casablanca" where I must constantly guard against someone picking my pocket. It's not worth using except for a few sites I trust.
Google in particular had better watch out. With Web hostility their search is not as useful. One reaction of theirs has been to pack more information directly into their search result.
Overriding autoplay can lead to a confusing user experience -- play/pause synchronization issue with embedded YouTube videos: https://bugzilla.mozilla.org/show_bug.cgi?id=1217438
The Disable HTML5 Autoplay extension is often suggested for Chrome, and it has 112,213 users, but it's far from perfect: https://chrome.google.com/webstore/detail/disable-html5-auto...
So, in fact, while e.g. Firefox has a mute button for each tab, I also wish it had an individual mute button for each <video> and <embed> element.
In the past 12 months or so, I am really finding my web browsing experience hitting new shitty lows. Pretty hard to see the content you want these days behind that clutter of Outbrain ads, pop up newsletter subs, auto playing videos and the like...
* voluntary customer feedback was universally negative * bounce rate decreased substantially (around 40%) * total interactions with the page increased almost 3x (clicks on significant UX elements such as like/subscibe/additional video plays) * interactions for those using some form of adblock stayed the same (presumably these people also had an autoplay off plugin)
*We did eventually kill autoplay, but only so we could have a consistent experience between YouTube and non YouTube videos (YouTube took efforts to stop counting autoplayed videos for advertising purposes).
What site does this? You can't (auto)play media on iOS without direct user action for exactly the reason you specified.
iOS 10 changed this slightly to allow silent or muted videos to autoplay when visible on the screen https://webkit.org/blog/6784/new-video-policies-for-ios/
Complex software control of multimedia and the whole browser experience gives me the ability to develop new ways of interacting with computers.
I hated Flash. I either avoided installing it or used a Flash blocker. So I always managed to avoid the auto-playing problem when the Internet primarily used Flash for everything annoying.
Now that Flash is about dead and everything is HTML5 now, neither of these techniques work any more to avoid auto-playing.
All websites should be allowed to play sounds any time they want to. Without it, webapps can not reasonably compete the native apps.
I am a developer of web games and being able to play the sound from the beginning, without any interaction from the user, is one of the most essential parts of the game experience.
If you visit a website which unexpectedly plays a sound, you should stop visiting it / downvote it / ask the authors to stop doing it. When you are surprised by the sound, the problem is not in browsers, the problem is in authors of webpages / webapps.
For example, GIFV is a format that uses auto-playing videos to replace the GIF, and by doing so cuts down on Internet bandwidth usage. I'd suggest that's a legitimate use for auto-playing videos.
I only really get annoyed with auto-playing videos when I hear the sound from them, so perhaps the fix should be targeted in this area. It may cause problems for things like YouTube playlists, so I don't think the fix is as simple as 'mute them all by default', but whatever the fix is should rely on some form of user control.
The data issue can be addressed by only having videos play automatically when the user is on a wifi connection. This is the default for mobile devices already, so it's arguably already solved for most users.
The "convenience" issue is something that I strongly suspect is actually something that people think one way but act another - lots of users claim to hate auto-playing videos but then they watch them a lot. Facebook's video engagement statistics are hard to argue with - a well designed video that works without sound (eg something from Buzzfeed) gets a tremendous number of shares, likes and click through engagements.
I strongly suspect that turning off auto-playing video, even by default, would actually make the web worse for the majority of people. For those who prefer them not to autoplay, browser vendors do provide that, but the functionality is usually buried in the equivalent of chrome://flags somewhere.
Or who knows, people might start animating images on canvas or something. Allowing auto play in some conditions seems to be lesser of two evils according to me..
Luckily, there's a setting if you can be bothered - and luckily, for many marketing departments around the world many can't...
"Look, how many views our videos have on FB"...
There's no way to stop autoplay if we allow free, programmatic access to videos (without blocking js too, which I use noscript for).
I had the same problem with the 'loop' attribute. I wanted videos to not loop. I found that some sites loop videos without using the 'loop' attribute. I would disable 'loop' on the <video>, but the <video> would be replaced by a new autoplaying <video> when the original video ended.
This is about the point that I gave up on my extension.
For Flash, change the Flash Plugin setting to Ask to Activate. For HTML5, switch `media.autoplay.enabled` preference `about:config` to `false`.
Or try out FlashStopper  to stop both HTML5 and Flash.
Audio: MUST be muted be default. There's nothing that I hate more than opening something in a new tab for later, and a few seconds later, having to track down there that damn noise is coming from.
Always, always, mute tabs be default!
I find that pages that have sound more annoying than video, but isn't a major problem for me as I have headphones plugged in permanently.
I think I would prefer such a feature request as a user option, like a permission request. This is how popup windows, full screen, taking control of the cursor behaves.
I do worry about the data usage on mobile though with autoplaying videos. Even pausing them doesn't stop it from fetching more in the buffer.
I suspect there may be some valid use cases for autoplaying (such as background looping videos, YouTube, etc), particularly when run in some type of kiosk mode on a TV. It's another example of where some spoil the experience and the behaviour of the web ends up getting locked down to stop them.
Worst thing is that many of these video ads can not be caught by Adblock Plus...
I think it is best to avoid shitty websites. My short list: Facebook, and TV network websites and their affiliates. There are lots of websites that do the right thing.
Here's Tampermonkey: https://chrome.google.com/webstore/detail/tampermonkey/dhdgf...
Now with everything rolled into the browser, the problem has gotten much worse.
If websites are abusing it, simply stop visiting them, or install an ad/content blocker. What maybe browser makers could introduce is a "switch" to disable autoplay and audio, and manually enable it per tab. But this feature should be not active by default.
Also, we should be complaining with the ISPs and Carriers about their data caps, not at sites for using data
I would suggest at least making it opt-in through the browser-popup. However that's another annoyance - the number of sites I now visit which ask to send me notifications.
A common scenario in my house: The spouse or I muttering obscenities over the autoplay ads, along with a comment of, "Use your powers for good, dammit! For good!"
I find these intrusive. So much so that I occasionally browse with the computer muted - especially if the source of entertaining sound is coming from the spouse's computer or if I'm looking at cooking sites. Most times, I'm just wanting text.
So a browser setting would work but not disable for all
- YouTube- video usages (webrtc)- some apps for people with disabilities...
You may ask for an option of disabling it by default (which will make some apps not working) but not impose your choice and "insult" developers choices that have a far better pov than you. :/
So somebody who would like to trick the system (e.g. advertisers) could just make e.g. a menu item behave the same way as a play button.
2. If you use Chrome, use the option that stops plug-ins autoloading (search for plugins in the Settings search-box)
3. If you use Firefox, remove or simply don't install Flash. For HTML5 you should look for controls that stop autoplaying.
This summer in Greece we had to pay about 500$ f.... penalty for over using our 3G internet access (we just forgot a laptop & brower open for a night).
autoplay video, please register, and messing with history would be lovely.
I guess it's because there's no good way to populate the selector without visiting the link target.
I filed this bug myself July 2015, though I believe others have existed for years.
In the meantime, I've taken to blocking hosts and/or domains which are used to serve autoplay media. A small list generates exceptionally high mileage.
I implement this on the router via DDWRT, which protects the entire LAN. You can also add this to your own /etc/hosts file(s) on individual machines, or go further and have a local DNS server be authoritative for these services.
The block is intentionally global, and encouraged, as media providers themselves will find that they cannot reach anyone, anywhere so long as autoplay is a default.
Again: the Internet and Web are ultimately a user-determines-policy system. And if servers say "fuck you" loudly enough to users, then users can say "fuck you" back. And win.
DD-WRT instructions: https://www.dd-wrt.com/wiki/index.php/Ad_blocking
Sadly, pop-ups and auto-play videos lead to more profits, at least perceived/short term. No amount of whining by us will change a board meeting at a medium-large company result. "We need to do X that will piss off Y customers but result in Z more profits." Companies always choose profits.
I'm on board with getting these things changed but appealing to big corporations because "it sucks" is never going to amount to "but it makes us more money." We need a different strategy.
Step 2. ?
Step 3. Profit
I will try to use a gross misrepresentation of a new-comer, but chances are they will ask trivial question that do not concern the project ( or are already answered ), some resources ( developer time ) will be used in favor of answering/guiding the newcomer ( who probably did not have search the usual sources before asking the question ).
Documentation is quite a pain to maintain, as it requires a good grasp of the English language ( mostly ), and quite a lot of empathy to figure out who the documentation is for.Additionally you have to make sure the documentation is accurate as the software change.
Returning the question: do you accurately comment the code you write for fun ?
I think your general premise (that management is becoming less relevant) is true, but you're approaching the problem incorrectly.
If I had your goalset, I would cram hard on EdX, OpenCourseware, etc. You need a good first principles education starting with Algorithms, Data structures, etc. I'd also start to learn how to do SWE interviews, which are a whole other skill set.
One last note: even if you do all of the above, the best way to ensure you're working with cool technologies is to start your own company. I work for a major SF tech company, and our ML team is two orders of magnitude smaller than our monetization team. At the end of the day, companies exist to make money and a lot of the stuff you've highlighted is currently speculative/nascent. There's just not going to be many jobs until these technologies prove their financial value.
Most don't feel like they're building lasting career skills, as agism persists in the industry and most people work on web applications to satisfy enterprise project business specification and project managers. During lunch, I hear conversations about the future of technology and the type of technology that we can work on if we only quit to start or work for a cool start up (e.g., Tesla, SpaceX). The consensus is that there is a tremendous opportunity for these emerging technology area's while other disciplines such as closing JIRA tickets will become marginalized. So I'd advise you to stay away from the enterprise coding bootcamps and only apply for the specialized tech bootcamp that emphasizes on these emerging technologies. The few that come to the mind are, creating new cryptocurrency payment models (for Paypal), writing self-driving cars hardware/software (for Tesla) and harnessing deep/learning AI (for Google DeepMind).
The really interesting stuff usually requires deeper knowledge and skills. For problems worth solving, 15 years experience as a CRUD developer is no better than 15 years experience as a project manager. Making this career change won't necessarily help you gain the skills you want.
The analogy is you wouldn't necessarily take the Olive Garden line cook training class if you wanted to be a French chef. Sure, it won't hurt to learn how to use a knife and it might be a decent Step 0, but it won't get you much of the way towards your goal.
You should really consider a more in-depth CS education, whether that's through a traditional university or something like a Coursera / Udacity nano degree in your areas of interest.
As a practical matter, it might be better to stay employed while you pursue that. But that's up to you. Plan on spending some significant time learning (1-2 years at least) before you can do what you want, not just a few weeks.
You're very smart to consider getting into something like deep learning. The opportunities will be good over the next 10 years like you said - but only for those who are really good at it. It's a very technical field that requires lots of continuing learning. The competition for the best jobs is high. Don't get into coding unless you are very excited about it and willing to invest in learning it for the rest of your life.
If you are excited about coding and willing to put years of learning into it, go for it! But otherwise you could take the impressive skills you already have and find a way to reinvent yourself and apply them in the deep learning industry without becoming the actual coder yourself.
Not because the opportunities you see aren't there; they are. Not because management isn't losing its lustre in tech companies; it is. But because coding is hard.
I have a great software education (top school, top program), I've had tremendous opportunities to learn from the best and build amazing things from scratch, and I've been coding professionally for 20 years next year. I'm only just now starting to really "get it".
Having a top-3 MBA (I assume you mean Wharton) puts you pretty advanced on the product/management track, one it will take a decade to catch up with as a developer. Embrace that, dive in, enjoy it.
Here's an alternative suggestion: you don't need to code to understand crypto/blockchains/AI/etc. Those are complicated and sparsely understood, and they are math. Knowing what you can do with them and how to apply them in products is much more rare than being able to implement the algorithms. Why not focus on the theory beyond the code?
Calculate the opportunity cost of doing this in dollars. That cost is REAL.
People seem to think opportunity cost is an abstract concept. It isn't. Your retirement and your personal situation will be less $Oppurtunity cost.
Other false assumptions I see in your thinking:
1. Underestimating the difference in competition in engineering versus PM
2. Large error in the number of years of low beginner status in programming
3. Your personality as a PM puts you at a disadvantage when trying to get technical buy in from other engineers
Investigate other paths:
1. Study on the side.
(If you can't do this for 6 months, you won't be able to sustain it full time either.)
2. After Work 1-on-1 face to face engineering coaching
Use the money you make now to have a full time tutor who sits right next to you (I.e. they only have 1 student and thats you and you sit side by side and code) after work. I think this is a much cheaper and much more effective way to learn that isn't available even at bootcamps. You keep your optionality but you also learn more/faster than at a bootcamp.
(Ping me - I'll do it for $150/hour. :)
You're crazy to do this. I've been (largely) a developer for years, and I struggle to get excited about client work now. It's amazing to be able to MVP something myself, or throw up a project over the weekend, but that's kind of it. Kids are younger and hungrier than me. Having experience is fantastic and certainly helps with day-rate, but I just don't have the time or the energy to keep on top of everything anymore. Now it's time for me to transition to other things.
In your position - keep the job. But invest time outside of that to learn to code. Build fun things. Experiment, learn, grow. Having an idea of what can be done, how it can be done and the time it takes will make you 10 times more valuable in your roll and moving forwards. You will be better positioned to talk to clients and talk to developers.
If or when the time comes that you want to run your own business you will be in a better position to recruit and to muck in yourself.
But for now, spend your spare time learning, and save as much money as you can to take a chance when and if you're ready.
That said, good luck with whatever you choose. Right or wrong, you can only learn from your choices :-)
If you can, take a sabbatical. If you can't and live in an ethical gray zone, go to a psychologist and get disability time off of work. Depression and some other mental maladies are treated as disabilities, at least in the state of CA.
Otherwise, find time outside of work. I assume you are able to teach yourself if you graduated from a top 3 school. Teach yourself to code. There's more than enough resources on the web that show how to go from 0 to capable engineer. Keep in touch with devs from work. Hang out in dev chat rooms/forums on IRC, discord, slack, or MOOC forums.
Coding bootcamps and online resources don't teach you truly how to code. The ultra basics they teach. Only actually coding, failing, refactoring, repeat teaches you how to code.
As you learn more, you should keep in touch with those devs, and you can ask them for feedback on the projects you work on (clearly, the onus is on you to not abuse their time, but most people like to help someone who is hardworking, enthusiastic and respectful). Then, by the time you've developed your skills to the point you could take an entry level developer position, you will also have a bunch of developers in the company who know you, know how hard you've been working, and will often be willing to pass on knowledge of openings, and put in a good word for you in the hiring process.Also, don't ignore the possibility of joining a startup once you have sufficient technical skills, a growing startup is exactly the kind of place that would greatly benefit from someone who understands team and project management and can deliver good code. They will hire you for the technical skills, not the PM skills, but that doesn't take away their value.Email me if you'd like to discuss further, and best of luck!
My 2c is that if you dont have any dev skills right now then work night and day in your own time to get it. Choose a language, any one will do because you need to learn the fundamentals soundly. Do not be swayed by the tech-du-jour or you will never finish anything nor learn anything in depth. tschwimmer advice is sound. However know your learning style first - i got more out of 3 months messing with C on Arduino then i ever got from a textbook because i like learning stuff with sleeves rolled up and the coffee strong.
And lastly, follow your heart. npostolovski did it. It is far more important to enjoy what you do than much anything else (practical considerations of food and housing aside). Happy and comfortable is a whole lot better than miserable and wealthy.
Disclaimer: Im a PM, have an MBA, and dabble in C# at work, Python/C on home projects.Experience: Im a much better software PM because i can also code/hack some of my own ideas.Have been co-founder of a corporate restructuring company and my ability to code meant i could get the data and calculations needs to make turnaround decisions while others just drowned in their spreadsheets.Im now 53 and learning new things - currently IPC and mesh networks(home) and cost accounting(work).
If you want to become a much better PM and have the tools to start building apps on your own, then yes DO IT! Right now the economy is great, if in 3mo you are back on the job market saying "I'm an awesome PM and I did a coding bootcamp to increase my understanding of the products I manage so I can be an even better collaborator" you will just have increased your value significantly. Probably you could just go back to your old job with a promotion.
I decided to quit my last job and study full time to become a developer. Not through a bootcamp, but through cheap or free resources online. I chose freecodecamp.com to go for now.
I did an Ask HN too and I did not receive much support either from the HN crowd. I don't know if people here think being a developer is not a good career path, or they are tired of wannabes and impostors, or they consider a developer career is just for a few selected ones; but I was expecting much more support here for people wanting to learn to code.
My answer to your question: I think you should go for it. Just consider very carefully if a bootcamp is the best way. But if you have the cash reserve to use, I think might be a good first step. After that, keep searching for knowledge in other places. And follow with laser focus the exact field that you consider interesting.
If in one year you regret this decision, it is not too late to reverse the career change and go back with your great resume as a PM, with more added value by your experience learning to code. Go for it, it is not a path of no return and it will be a valuable experience either way.
Edit: Let me try a more helpful response (though I did intend to make a point there). You seem very focused on what you have: a good salary, a top 3 education, a job at a top 3 company. Things you expect should make you happy, basically, but you aren't, and this is confusing, and it's always scary to give it up if you haven't figured out why those things don't make you happy. But IMO, if that interpretation is correct, it's more important to attempt to find things that do make you happy rather than dwell too much on why the things you have, which are often equated with success in our culture, are not doing it.
Most bootcamps that I'm aware of are for training web developers, with a few going into mobile app development. That will give you some basic coding skill but is probably not going to get you very far in the direction you want to go.
You'd most likely be better off seeking an online CS degree.
I quit my job went into a bootcamp and have been a software developer for a year plus. I've been pretty happy with the decision. My reasons were completely different though and were more about understanding what I was good at and passionate about.
I think I can help. Ask me anything.
I've made the transition from developer to PM over the last 7 years and it's enabled me to work on progressively larger projects and to set direction.
Being a PM is about making sure the right thing is built at the right time.
Admittedly my technical skills have gone stale and to do any of the really interesting technical things would require 6-12 months of intensive learning if I were to do it on my own. This is with undergrad degrees in Comp Sci and Physics too.
So I decided to hack the problem and join a startup in SF thats doing novel hard tech !(business process automation, ecommerce, apps, small marketplaces etc). Here in Sydney they're few and far between.
I'm pretty excited to be working with them, its an opportunity to work and learn with a smart tight team.
So advice to you would be to is find a smaller business unit in your current company where you are closer to the coal face or go join a 100 person company working on a hard problem. Usually they'll have a team of 5 PM's supporting a tech team of 30.
I would say, a PM has to understand the user needs, and drive the product.The former has got two parts1. Understanding the user needs which the user can articulate2. Understanding the user needs which the users cannot articulate.
I have had the opportunity to work with some of the best coders. Though I greatly admired their intellectual capability, I was not a big fan of their ability to think from customer's shoes. I have figured out that "Common sense is not so common". Now, having an MBA does not guarantee common sense, but if you think that, you can communicate effectively with your users, understand their needs, empathise with them, and can comfortably put yourself in their shoes, your are definitely adding value as a PM on Point No 1
Understanding the user needs which the users cannot articulate - This is where innovation begins. Now, if you are a PM without the ability to code, you may be at a slight disadvantage here. The ability to code, or perhaps the understanding of the fundamentals, would help you to structure your thoughts. It gives you a clear picture on what is possible and what is not possible at the present, from where, you can start to innovate.
To me, Quitting the job appears certainly crazy.
Even as a former PM, PM's at your company will try to exert power over you if you are a dev. They will be backed up by executive management, board members, investors, the media who all have an interest in maintaining this outdated view of the programmer who takes the specifications and simply types in the code. Why not fire PM's and just hire PM's that code? PM's don't like that, executives (who don't code) don't like that, even the janitor doesn't like that. Nobody likes that except for devs and devs have no power in companies because of self reinforcing old school ideas about job roles.
You will learn none of these things at a coding bootcamp. If you are really interested in going deeper, check out Georgia Tech OMSCS - you can do it while you are holding your current job (employer may even pay for it for you if yr lucky) and more importantly the courses are relevant to what you state actually interests you about future of tech.http://www.omscs.gatech.edu/current-courses
I have a feeling tremendous opportunity will be available over the next 10 years to software developers while other disciplines such as management become less and less important.
I disagree, solid managers and leaders will always be important. Perhaps you are focusing on the negative, rote aspects of yr job too much?
Like "I don't feel like I am building tangible skills as a PM, it is more about project management and coordinating." Perhaps you are learning many tangible skills (just not ones you prefer). Also, "I have a feeling tremendous opportunity will be available over the next 10 years to software developers while other disciplines such as management become less and less important." That could be true, but maybe it won't be.
My 2 cents
They either come very natural to you, hence why you think they're easy, or you're not good at your job and oblivious about it or you have a very junior position and someone else makes the difficult decissions.
Either way, I would love to be a PM with an interesting product, not to mention being in a top 3 tech company. The money must be really good and the feeling of fully conceiving and creating a product has no equal. Coding it is fine and feels good too, but steering the ship is where it's at.
Even if you go back to PM, the ability to code will help you communicate with engineers and identify the right solution for a given problem, enabling you to transcend the project management aspects of PM.
Also, many executives struggle with strategies that entail deep learning or blockchain, because they simply don't understand them. To position for a future where those technologies are critically important, it's a good idea to invest time today to learn how they really work.
Several of the people in my cohort didn't become a developers though, as they didn't seem to have the proper motivation to put in the necessary work (at least not to manage it in a 3-5 month period).
You can read about my experience going from non-technical to technical here:https://medium.com/learning-new-stuff/from-non-technical-to-...
A thought... I have worked at monoliths, a mid-sized corp, a hatchery, and my own. At a monolith, your job is very narrow. I was bored out of my mind and left. At a smaller company, the role of a PM is much more interesting.
I was a PM but I had a coder's heart. I took the route you are thinking about. I would never go back to being a PM.
Two words: software architect
Definitely go for it. Especially, please have a look at my previous comment in the thread entitled "Sorry, developer bootcamps: I was wrong" :
To resume: to my knowledge, the best training to start your journey as an aspiring Software Developer is the one suggested by Founders & Coders :
(Note: Codewars is just so awesome... https://www.codewars.com)
By the way, if you can get into it, I would strongly advise you to apply to FullStack Academy, they seem to have the best teaching around there (at least their students have very high rankings on Codewars) :
Good luck :)
Trs cordialement / Best Regards,
Some of the problems I deal with in programming can take months of thinking to solve and any course that says yo can become a professional programmer in three months is a joke. What happens when you stumble a problem that doesn't have a ready made answer for you or you encounter a bug take days to discover.
If you want to become a professional programmer, just start coding. You don't need certificates to tell you who you are. Programmer is an occupation based mostly on meritocracy, It's a well known understanding in the industry that the best programmers are self taught.
Start by learning some text books and doing side projects. Try and get a job from there. It will take you 4-5 years of hard work to get to the level you mentioned. And note. There are many bad programmers out there that stop learning after 6 months and just accumulate time. Don't fall into that trap. Learning is hard but the personal reward is great.
Because they are trying to compress a lot into a short period of time, and because they are trying to keep it interesting and give students early wins, they seem to not spend nearly enough time on the basics, and jump straight in to using frameworks that do everything for you, the end result being that a bootcamp grad can quickly whip up an ok looking app that has basically no functionality but as soon as you ask them to do something complicated, they get stuck. Sure, that's not true of all grads, but I'd argue that the ones who come out of a bootcamp with serious skills are the passionate ones who would've done just as well or better on their own, so at best they wasted a bunch of money.
You are much better off going the self taught route to start off, maybe take community college classes on the side. If dabbling like that doesn't inspire you and give you the fuel you need to learn what you need to know on your own then software engineering may not be the ideal career for you anyway, what you know is a small part of the job, what you can figure out and learn are also huge factors.
Then you will think "Fuck if I were a PM, I would be a VP at this point, and my skills would be more sought after as I got older, not the opposite for a coder."
Stick with being a PM. If you like technology read up on it or program on the side.
Boot camps are like dipping your toe in the water. Most people are not qualified after only a few months of learning. It might take a year or longer to become skilled enough to get hired . A small number of very talented and lucky folks can get there in 6 months with no prior experience.
Before quitting, it seems important to validate the assumption that you will actually like programming and have some success in it. Try building a few toy/example applications on the nights and weekend for a month or two.
That being said, after much consideration, if you want to do it and feel strongly it is the right path for you, go for it. I personally love writing software. It feels like magic sometimes -- you type some words into a file, and very cool things happen :)
Anyway, one good way to do this may be to:
1. Take a hiatus. You may either tell your employer that you want to learn coding, or you may decide not to. Either way it's fine. Even if you tell your employer, if they are really top 3 tech company, they will understand and even encourage it. You can spin it as "I want to be a better PM and want to understand coding."
2. Learn coding
3. While you're learning, you may feel the urge to really jump in and become a professional programmer. Then be so.
4. If no spark comes during your time at those bootcamps, come back to work and continue. But even in this case, the world will be a completely different place for you than now.
Don't worry about people telling you that's crazy. Crazy is good.
But yes, by all means, if your goal is to learn to write software yourself, go ahead and get that extra education.
Coding bootcamps produce people who are conversant in the hot technology of the week, but if they were weak on fundamentals going in they're still probably going to be weak on fundamentals coming out. If you want to be a leader in the field, and not in the rank and file, you need strong fundamentals.
In my experience it hasn't mattered that much where knowledge has been "downloaded" from (college, bootcamp, self-teaching, etc). What has mattered is maintaining this "downloaded" knowledge and having it always updated to keep up with current times. Also, having actual projects to show to employers has helped me tremendously (e.g. open source contributions, client projects, personal projects, etc).
I'm self-taught and work at a BIG-BRAND company now as a Front End Engineer and make a six figure salary in the SF Bay Area; no college degree whatsoever, just a high school diploma. My resume says "Education: self-taught" and I'm happy to explain what "self-taught" has meant for me in the past six years to any employer. I've been able to work with people from all kinds of backgrounds: devs from bootcamps, self-taught engineers, devs with degrees unrelated to CS, devs with BS and MS degrees in CS and other subjects, and from many more backgrounds.
I'm contacted by many other BIG-BRANDs and small companies all the time to interview with them, and before I even accept to interview, I make it clear that I don't have a CS background, and that I'm unwilling to waste each other's time white-boarding algorithms - usually they're fine with this as they can clearly see my experience and instead they focus on the value that I'm able to provide. Many times I come across companies that ass-u-me I'm incapable because I chose a different path than them, but I've learnt to ignore the ignorant, and instead I focus on improving my skills and bettering myself as a programmer and a human being.
Any path you choose will lead you to a similar result. That's the beauty and uniqueness of our industry. As a final note, don't bother with comparing your salary with other people's salaries when/if you make the switch, as it won't matter at all if your income will allow you to live a really good life.
Maybe do the bootcamp to get started, but keep your job and the opportunity it gives you to meet other great developers and learn from them.
My recommendation is: 1. learn the basics however you prefer, 2. study open source code, 3. build something medium-size that you can use, either home or work. If you're very good & lucky this may be your next gig. If not, you'll be a PM with coding skills, which usually is a pleasure to work with from a dev perspective.
This is a world where you really need to aim to be the best in what you are doing, though. It's so competitive and there is no reason to expect that to let up. If you aren't doing that you can get stuck or hit a career deadend when the market shifts and those surface-level bootcamp skills become irrelevant.
So in my own space I am focused on a mixed stack of design, coding and leadership skills that is more in line with founders. The ability to pitch, to write up planning documents, to prototype and hold a vision, to study the marketplace and identify opportunities, to hone the vision through philosophy, as well as PM-type managerial duties. Those things are robust to changes in the technical landscape and they build on my own background.
Why not contribute by launching a startup as CEO? If a Harvard MBA with deep pockets and PM experience reached out about her startup idea, that is a beer or coffee I would take seriously. In other words it sounds like you have the background to attract a talented programmer cofounder.
Recently I was hiring on a tight budget. I've interviewed a dozen people from various coding boot camps, self taught web developers, etc. None of them could solve a Fizzbuzz level problem on a whiteboard.
(One thing I've learned after 15 years in industry, 8 jobs, 2 continents - a person who can't do fizzbuzz-type problem is not worth having onboard even for free).
It seems to me that even with best training in the world and a ton of prior IT experience it always takes people at least 2-3 years to start thinking in code in a way where you don't waste everyone's time.Learning to code is not about a bunch of syntax rules. It's about retraining your brain to use different mental models, developing intuition about where a bug might be, finding your way around a large and hostile codebase, anticipating how your today's decision will interact with all the features you'll implement over next 6 months, and so on.
Basic rules of programming are simple, but so are the rules of golf or snooker, or making bespoke suits, or wine tasting.
If you are prepared to spend next 3 years aimlessly poking around the debugger struggling to figure out the simplest thing only to realize at 11pm you were looking in a wrong place - go for it. It's frustrating but also rewarding.
If you think in 6 months you'll be able to build the next facebook with AI - only thing you'll learn in that time is how much there's still to learn.
Is this something where you could first try some of the online courses (Udacity, EdX, Khan Academy, etc) to see if you're actually interested and also able enough to do the job well?
Also, while I worked as a Software Engineer, I was not really doing much in the actual job and felt I was stagnating and falling behind. Most of the advancement in ability came during my free time where I'd try to learn new things, dive into new interests, create software I actually wanted, etc.
Eventually, work hours resulted in less and less time to do things on my own, and the crap at work got more and more irrelevant, tedious, and stupid. Also, management was all about trying to rid you of any competitive edge or anything else that makes you worth anything (or that brings you happiness), so in addition to all that was in place, it was known/realized they were going around each day looking for more ways to ensure every path would lead to a dead end.
It wasn't long before I wanted to quit and before I realized the only way to make it work would be to create my own company (or maybe become a freelancer/consultant).
But hey, we all get a little crazy when it comes to the things we love. Just be aware that a bootcamp is just the first of a great many steps before you can contribute to something you'd consider the 'future' and not 'move the button 10 pixels to the right'.
Unless you feel your PM role is a complete dead end, build on your experience instead of trading it away.
Edit, adding: A PM who understands software development, or a developer who understands project management, is a good set of skills to have.
Tutorials on various common "patterns" (RoR web apps, iOS apps etc.) are of good quality and easily available these days. As a PM in big tech, you can try to find little ways to contribute into the product's code base, which will teach you both programming and engineering practices. In my experience (disclaimer: was a PM), engineers are delighted when PMs show interest in code, and at least a few would be excited to hand hold you through the process of setting up your dev box, building the product etc. It's not a bad way to get better while making hand and fist full of money.
That said, like any other craft and practice, programming is layered and specializes. It takes 5-10 years to be "good", and it takes equals amount of time to be good in a specialization (say machine learning for example). Even for a good ol' engineer to move from building web apps to building machine learning systems, the barriers are still non-trivial. Furthermore, consider that a career in software engineering is perhaps more akin to spending 20% of your time building somewhat sexy* new thing, and 80% of your time doing boring boiler plate work, trying to pull your hair out digging through other people's APIs and code, and wondering why the build and CI system is so broken. If that's what you want to do, then go for it.
* most likely it's just a boring CRUD app using somewhat unfashionable technology.
Otherwise, it's quite odd. It seems you ought to be in my spot and I ought to be in yours. I plan to pursue a career as a product manager after I graduate (hopefully join a rotational product management program). I am currently studying computer science at a University of California. I have yet to have my first internship though but I plan to attend Recurse Center (https://www.recurse.com/) this upcoming summer to work on some iOS projects (I am more interested in mobile than say back-end or front-end engineering). And while I have good grasp of a few programming languages and tools, I do not think I would like to code for a living. It's fun building things and the future of software is indeed bright. I just find the aspect of programming on a daily basis will result in burning out, personally. Plus even when I do a gig as a product manager, I will still would like to develop mobile applications (particularly iOS).
Above all, there's nothing wrong with changing your mind and learning more. Plus you have an MBA and now you are going to have some coding skills. You are golden. So long as you are excited about what you are pursing, and not let that excitement fade.
That said, make sure you actually want to write code. Boot camps prepare you to make simplistic websites and mobile apps not the interesting stuff you mention. You'll have years of learning to get into those in a meaningful way.
I've worked in startups and the game industry as a programmer, designer, producer (probably more like your version of PM), and kind of as a PM (which, in gaming, is probably like some percentage of your job now, but not all of it).
It's definitely true that having worked as a designer and programmer was INCREDIBLY helpful in making me a better producer. The ability to communicate with people you manage or need to make decisions for at a passable level of their domain knowledge will be very fruitful and will help you command their respect. You'll make better decisions too, of course.
Feel free to email me if you want to know more. (That goes for anyone here, I'm always happy to give advice.)
The chances that you happen to turn out very good at programming and that you land a job doing exciting stuff that you love in a cutting-edge company are virtually zero.
You may have an idealized picture of what developers do. You can try and learn some programming in your own time (yourself, with tutor etc) and see how it goes before taking the plunge.
And truthfully, most companies today are really bad at management, particularly related to technology.
Learning to code is a great idea but I would think of it as supplementary to your management work.
You're right about all these amazing technologies that are being developed, but truthfully, the stuff you learn in a bootcamp is not going to put you in a position to do much in those fields. It might be a small step in that direction, but you would need to go way beyond it. Advancements are coming from folks with deep knowledge of math, algorithms, systems engineering, etc.
The skills you pick up learning to code will be tremendous for managing others to build what you need.
Coding is hard to do well and takes years to get really good at it, and you will likely need to start at the bottom of the food chain to get the right coaching and support. I'd recommending learning enough code to be dangerous but get experts to help you do the hard stuff.
That said if this choice is about happiness, then go with your heart. Money shouldn't factor into that decision, it will come over time.
Having some kind of hard technical skill very important. It help you tackle harder problems that arises in the future. For example let say AI becomes increasingly important. Since you know some code, you ability to lead in this a new technical field will be better than someone with no technical ability.
FYI i'm a coder and founder of a software company. Most of my time is spend on PM now.
You're not crazy to make that career switch, but you are crazy to attempt to do so in that manner.
Start reading books on programming and teaching yourself instead, and start working through the actual exercises. I think Python is a good language to start with.
We're in a period when everyone is "learning to code". This means the potential pool of developers (ignoring their actual talent levels) is growing.
Someone has to check whether the stuff people are making is following whet needs to be created. Someone has to be able to manage the teams of people making these things.
I'd suggest your premise is the wrong way round.
Or, go back and become an expendable framework of the week coder and then find yourself needing to relearn those skills every 5 years to do the same rote job.
Coding is great fun, until it becomes a routine. Then it's just like anything else.
As for learning to code because of things like the blockchain, etc, keep in mind that bootcamps teach you to build web apps, not that level of programming.
Take the coding bootcamp. Do one of the longer ones, like the 6 month one if you can. Or do one of the online ones, and be disciplined about it, such as teamtreehouse.
And then go back to being a PM, but use your knowledge of the difficulty of coding to leverage many developers to work towards an important goal.
If you really work in top 3 tech firm, your colleagues are Stanford/Berkeley/MIT/CMU grads, who ate rice and ketchup writing operating systems and compilers. This will be the level you have to get to to contribute to any technical project in a meaningful way. But basically: when you were doing business case studies and traveling around the world to meet world leaders and learn from the best CEOs how they handled corporate crisis, they kept hacking algorithms in a black window with grey letters. I know--I did that too.
I have 15+ years of UNIX experience, 10+ years of programming experience and 5 years of real-world software engineering experience. I'm thinking how to get your job all day long :-) This requires reading tons of books: http://www.koszek.com/reading/ which I do and I sacrifice time with my gf because of that. If you look at this list it's business, management, investments, people stuff. You'll have to do the same, but read about software and hack code in front of the computer, etc.
Most of HN experienced crowd are smart technical people with worse credentials, who are attempting to move from coding job to architecture/design/management job, which you now have. You are our target :) You can see it in many threads. It'd be like moving from a coffee shop manager to a waiter. Ask some senior buddies from a random technical team whether they'd like your job. It's good to see people appreciating each other professions, and we appreciate that too, but don't do this job switch yet or we will crucify you :)
My advice is this: take a break from work (just because you can -- you have a shitload of money anyway, or maybe just "enough" due to loans; go on leave, but for god's sake, don't quit your job), join the bootcamp if you really like, and don't tell anyone you did it. You see from this thread bootcamp, unlike your MBA, don't have established value in the industry yet. It won't harm you, for sure, but you won't be a software engineer. Bootcamp sounds good for you--you're a smart person and wants to learn more, since I think you haven't hacked much code before.
Better idea is what other guys say: just get yourself all online programs there are. All of them. They are $30/month at most, and Udacity is $200. Get them all for a month. You'll spend maybe $200 + 5*$30 = $350, but maybe $0, since first 2-4 weeks are free. You'll pick one that you like, because it'll fit your learning style. Stick to it and just do exercises. On top of that get books. Books are dirt cheap compared to value they bring to your portfolio. Whichever books you need; all of them. I think you'll have to end up doing bs I do for business/management books: google "top 10 programming books" and get them. Even if you don't read it, get it. It'll be maybe $350, since you may end up getting 10 books. So it's $350-$700 investment at most -- you'll get a grasp on what's going on. Then maybe $30/mo for 6 months to teach you one thing well and 2 in a sloppy way you'll kinda understand. And repeat it maybe 2 times. Basically: watch classes, do exercises and immediately after that write your toy programs on the side or (better) real products.
So you'll spend at most $1k to learn something you want. It's also spending $1k to save your $150k investment you've made by doing MBA in top 3 school. It's 0.7% cost of what you've spent on school, and still much, much cheaper than a bootcamp.
If you're a good MBA you're a cheap, stingy bastard that can get people to pay for your stuff. And top 3 high-tech companies have educational grants. Some up to $9/yr. They pay you for your education. So have the company pay for this bootcamp, if you come up with good enough reason, it'll be all free.
If you absolutely truly love hacking code and are obsessed with it and you think that yes -- this is your 2nd calling and you basically don't see yourself talking to people anymore - congratulations. You are eligible for leaving your job, retraining yourself and entering coding workforce. Trade your suit for dirty sweater and you're all set to apply for a junior dev role.
But I think it won't happen.
What will happen thanks to my advise instead is this: you'll make yourself be in like 0.1% top category of MBA people who truly understand what software is all about AND have a PM job. People who you work with will see that, so you'll be getting good reviews etc. You'll come back to this thread, see how wrong about PMing you were, and you'll apologise. You'll then keep studying and getting better at being a PM and being technical manager. You'll learn how to manage technical people, how to partition tasks, build features, build products and build tech companies. And no, it's not very easy and it's not fading away. I see you posted some stuff about machine learning in the past. If that's your field of interest: go and get TensorFlow original publication from Google. It's a paper where you see an abstract is shorter than a list of authors. Do you think these guys would have built Tensorflow without any PM of some sort?
Anyway, story goes: then you will quit your top 3 high-tech firm, and start a high-tech startup, get $20M in funding. And then you'll come back here, DM me personally and offer me 1% in your new enterprise for having a profound impact on your life and you'll offer me a PM role in your new startup. I'll gladly accept it for this 1+ hr free of charge advising.
Not crazy if you hate PM'ing, or you are not good at it, or are not motivated by climbing corporate ladders.
Most technical careers are competitive and short.
Like several other commenters have said, a better approach would be to learn coding on your own time. (Choose a languageany language will do, learn the basic from a introductory book and codecademy.com, then work on small weekend projects)
And how are those not tangible?
Find someone to complement you, then try changing the world. one small project at a time.
Instead of something like a coding bootcamp, I've taken courses at the local university. Almost all universities (including Berkeley) allow non-enrolled students to enroll in 1 or 2 courses.
Keep the job, join some open source projects, solve some issues and enjoy the process if you can.
You can learn how to solve digital problems by coding while you work full-time somewhere else.
Good luck in any cases
The two points I think are worth considering are:
1. Coding bootcamp vs postgrad qualification in CS or similar. I'm not in the coding-bootcamps-are-the-devil orthodoxy. In fact, I've seen a lot of great juniors come from bootcamps, but you do have to recognise their limitations. A bootcamp will get you to the point that a self-taught highschool code wizard will be at just before they hit university and realise that they don't know anything. Employable, sure, but lacking in fundamentals. You don't have to learn CS from a university, but one way or another until you learn it there will be a ceiling on how far you can progress as a developer.
2. Part-time vs full-time transition. One thing I will agree with is that you are going to be a way worse software developer than you are a PM, just by sheer weight of hours put in. For that reason if you're looking to make a switch I would do that wholeheartedly rather than learning on the side or moonlighting. Otherwise you'll be pulled in two different directions, and the one that you are better at, have more experience with, and can earn more money from will probably win.
If you genuinely want to be a developer to build stuff, I would do the coding bootcamp, get any job as a developer you can find, then teach yourself CS as quickly as you can while on the job. The CS will mean more and be easier to understand because you already have the practical skills and you'll be able to call yourself a developer sooner. Just be aware that the stuff you build straight out of a bootcamp will not be deep learning blockchain automation algorithms for SpaceX, it'll be web apps with questionable business models.
Another option is to just bite the bullet and get a real CS education up front. This will take longer to get you to a point where you're actually building things, and keep in mind that CS doesn't give you practical skills, so you'll probably still need to start with entry-level dev work, but your trajectory to doing interesting stuff will be steeper from there.
Ultimately it's down to your resources and your priorities. If the drive is to just make stuff then go with the bootcamp, it'll get you there sooner. If you mostly like the cutting-edge ideas and high-level work (and you can afford it) go with CS first. Deep learning isn't bootcamp material.
And keep in mind that either way you're 5-10 years out from being good enough at this stuff to really live up to the picture of it you have in your head, so make sure what you're doing in the mean time is going to make you happy.
Pay particular attention to the segments on emotional intelligence, motivation, engagement/disengagement(!), and professional development. It'll not only help you understand what is affecting your motivation and disengagement, but you may also realize your greatest strength is that you are motivated to solve these problems not just for yourself but others in your organization. Understanding the way things should be could just cause you to double down as a PM and master the challenges of the role while further developing your skills to advance your career.
Good leadership focuses on the health (and happiness) and growth of the individual as much as the organization. Maybe you are just in a poorly run organization or one that has poor leaders. Discontent is usually a pretty good indicator this is the case, because even if an individual is the problem, a good leader has the awareness to recognize this and have a good relationship with their staff that enables them to make the staff member aware of their strengths and weaknesses and the source of their discontent so it can addressed be remedied.
It sounds to me like you want to more authority and control, or at least more challenges and your organization's leadership is not addressing that. Without that your growth and personal development is limited. Being a coordinator is little more being an admin that tracks status and doesn't require much tactical or strategic decision making. Your manager should understand this and being stretching your abilities in every area little by little until they trust you to make those decisions. They should always be preparing you for the next level up. Maybe you aren't aware of your weaknesses and they are not identifying them and working on them with you. Maybe your desire to quit and become an individual contributor is just an Escape Coping mechanism for dealing with stress instead of a Control Coping mechanism which is positive and proactive. Or maybe they just have poor leadership skills.
It would be terrible if you quit your job and lost the opportunity where you are to address your weaknesses and strengthen all of your skills in an attempt to start over because you feel it would give you more control over your happiness, especially given all of the capital you have built up in that role over the years. Besides, if the problem is your desire to leave is a just an unhealthy response to stress or a challenging situation, it won't solve anything.
Just a thought, but one from someone who has been there.
What did I do in your situation? It took me a while but I watched that video, combined my awareness from it with formal knowledge of PMP (Head First PMP is good start) as a reminder of what project management is all about and what my organization did wrong as leaders of a functional versus projectized organization (a weak matrixed organization), and then I studied stress management to help me understand my own (unhealthy) responses to my situation.
If I had done that while still at my organization I would have not only felt empowered by the evidence and knowledge, but challenged to work on myself and the organization at the same time, and could have been perceived as someone with greater leadership potential that would have allowed me to level up. Even if I still decided to leave, I could have improved my skills while there to prepare for a move to a healthier organization that I would have been better equipped to recognize and excel at.
FYI I strongly considered a Masters in Data Science which would have had a narrow focus either as a developer, data analyst, or data scientist, but at the risk of competing with people who were younger and/or smarter, and rooted in those disciplines from an earlier age. I decided I should master my management and leadership skills instead, leveraging and building upon my knowledge and experience at a better organization. I am unemployed and working on that now. Once I get a job, even if it's a contract position, I can still take the online courses to get that masters degree from a top university and also take advantage of being around people in the industry that do what I aspire to do as mentors.
I sincerely hope this helps.
It took me 2-4 years to get on a level I was ok again with what I contribute in my role (lead architect). In these transitions I had the benefit of solid coding skills from way back plus having worked at a tier-1 corporate lab for a few years. I had the benefit that the company supported me but that came also with constraints on freedom and focus in recovering the skills.
Coding school may give you basic coding skills. The deep knowledge you would need to be a good coder however will take many years to acquire. I would be surprised if someone got to a more senior developer role in less than 4 years and going to architect before 6. Only then you will again be able to shape things. Until then you will have to implement what other - often a lot less qualified product managers have thought up for you to do. Often of the code will be for /dev/null as most projects fail in any case before hitting the user. I sometimes think salaries in tech will always be good as frustration tolerance is never going to be a commodity.
I found product management a very difficult proposition. It can be incredibly hard to add value in that role but then on the other hand it can be one of the most powerful and decisive roles too (Jobs do I need to say more). There is a lot communication and coordination and that can be fun but also can feel void. Shaping from that position takes serious political skills to acquire the necessary power and to wield it.
The way I think about these changes:
- what can you leverage into the new role?
- is there a plan B?
- do you truly like that type of work (tools, processes, travel, challenges, conflicts)?
- do you like to work closely with these type of people?
- what drives you? Long term vision?
- what are your strengths?
- what technical and interpersonal skill you want to learn? Will you learn anything new?
Would I have hired you when I was team lead way back? Iff you showed up with lots of enthusiasm for coding and passed our structured technical interview - maybe into a junior developer role. Willingness and ability to change was a key criteria for me. But I know I probably had to argue both technical staff and HR. I never worried about someone going for my role but maybe with you I would have worried about that on my side.
By all means learn coding. You may however want to give some thought on possible paths, risks and contingencies. Coding - considering your starting point - is certainly one option but comes with a high risk of significantly lower ability to contribute and ultimately benefit from it. Project management may be another. Consulting in the area of requirements may be another.
I can see through your words that your interests are to participate in those great new ideas and to achieve greater things but you can make it happen without that Bootcamp especially without quitting your job. If you decided to attend to a good university it was because you really wanted to leave a dent on the universe. There are cases such as the orchestra director where although he does not play any instrument he must at least learn to play one to understand the essence of music before being able to lead. But in our ecosystem what is rewarded beyond our vision is our ability to execute.I believe that you as a PM have one the most valuable assets because you can take any talented team and give them a vision towards execution, that they will appreciate because people do not know how to execute complex Things step by step the way that you do. Besides that if you give them that strong desire to accomplish excellence that breaks the molds. And that stamina to persevere even in the darkest hours you are set.
If I could go back 3 years in time, I would ask for the refund even if I had to pay something. Instead I would use that money to spend more time observing regular people, maybe participate inside university activities, labs, study groups and invite complete strangers to take espressos or beers with students or teachers and bond with them. Instead of being a solo learner I would encourage myself to be a part of a group. My job would have been to create any initiative with them on the topics I sought were worth it and even if I knew it wouldn't work I would put all my experience to support the implementation of these ideas. I might not knew how to type a line of code but I would have felt more alive to be able to see those ideas become a reality, even if it wasn't 1% my vision, even if if wasn't my code, even if I only was able to sit on a table with just one talented person and be able to keep him motivated and enthusiastic after the first prototype was made and help him with the first sale to come, that would have been enough. Instead of investing in Bootcamps you could interact more with humans, learn more about human behaviors, spend more time with your family or children, travel more to meet with more people and take advantage of the work you have right now to find mentors or talk with your peers about your expectations in those topics that you like to execute instead of being in front of your laptop fighting with your lines of code that someone you work with can do much better in less time.
Finally I have to say it surely was a blessing to become a developer, right no I'm working as CTO/CEO but I 'm about to let go, and I know it's going to be hard, anyways in your current situation where you have much more knowledge and experience, only quit to carry out your ideas but if you definitely want to play don't forget that sooner or later you'll need to delegate and learn to orchestrate and for that you don't need that Bootcamp.
P.S.: Forgive my bad English.
During my break: I learned squash (so much fun - can't get enough of it, and it's so good for you), studied Spanish (lovevto travel in Latin America), learned a bit of Scala (not really that much, to be honest), took some salsa dance classes (tough, but so much fun. Met lots of new friends), and did some Lynda courses on video editing (for making fun travel videos). I also spent a week and a half doing a road trip through southern France and Italy. Read a lot of books that were on my "someday" backlog - almost 0% TV!
As someone else mentioned, the quasi-unstructured time in the day was so refreshing. I loved just doing some random boring errands, bumming around the coffee shop talking to people, taking a long walk in the park with the dogs (I live in NYC)
I'll tell you: I'm 2 months i to my new job (technology job at a startup), and I really miss the feeling of this unstructured "regular life", or whatever you want to call it.
Cherish it, but don't overdo the planning, as it'll stress you out!
All the best!
Over the past few months, I've been keeping a list of things I'd want to focus on. Ultimately, I decided to trim this list to 5 things, because I don't think one can focus on more than 5 things at once. Here they are for me (unranked, equal importance to all):
- Working on my Japanese (I'll be in Japan)
- film photography
For the last two items, I've been keeping a list of books to read, and topics to investigate/projects to work on over the past few months as well. Then I trimmed theses lists to end with 1 book per week to read and 1 programming project per week to work on.
Of course, I'm likely to deviate from it, but having these lists and priorities as my guiding star will be helpful.
If I were to do this for 6 months, instead of 1.5 months, I'd probably break it down in 1 month chunks, with varying priorities per month, and a bit of loose time in between said chunks to account for unexpected things/rabbitholes to go down.
I also have a 5 day mountain hiking trip in the middle of it all, because in my experience there's nothing better for your brain than disconnecting absolutely from reality, and centering your days only around walking/eating/sleeping/looking at beautiful landscapes.
* Learn how to play three open chords on the guitar. I would recommend E, A, and D.
* Watch this video on how to write a song using GarageBand. It's easier than you might think, and a fun thing to do with kids.
Compose, record, and mix a song! Also learn about fun technical audio stuff like levels, EQ, compression, reverb and the like.
- Learn a foreign language, again 6 months is a perfect amount of time. Highly rewarding.
- Work on holes in knowledge, build a self-course around it. Algorithms, dbs, whatever.
- Pickup an new programming language.
- Build a side project, doesn't have to be commercially viable, could be open source or not. Build a redis replacement for no other reason than to understand it.
- Travel. I understand the constraint of wife/kids, but there are ways to fit it in. Don't have to live in Southeast Asia, but travel, I feel is a great brain boost. Awesome rush of new.
I'm wrapping up a self declared sabbatical right now. Most of it was traveling and reading history books on the country I was in. There were a couple career inspired prototypes (web and mobile). Now I'm on a a coursera and reading kick for stats, probability, and ml.
Enjoy the "break"!
Now that I'm settled into my new job, it's the one thing that I'm still doing more regularly than going to the gym or going on hikes.
See Jeff Bezos' regret minimization framework for inspiration: https://www.youtube.com/watch?v=jwG_qR6XmDQ. Imagine yourself at 80. What would you regret not doing?
Have you travelled much outside of your home country before?
1. Finishing real estate course so that I have the license to pursue alternative career in free time/ weekends, etc.
2. Buying groupons for unlimited Yoga classes. Never been able to stick to a workout routine so hoping will get something from yoga (hot) to be in a little bit better shape before Jan/Feb comes and things get crowded.
3. Planning to travel for few weeks.
4. Talk to some startups (I have been in corporate world) that are really making a difference to just know about 'em!
- Powerlifting (one session, teaches you good form for several lifts)
- Small diesel engine maintenance (6 weeks, evening)
- Professional bike mechanic certification (5 weeks, full time)
- Upholstery (workshop format, as many as you want, $100 per session)
- Cobblery (haven't found a course yet, just really want to learn how to make sweet shoes and bags)
- Linux sysadmin (online but with a human coach, costs a few grand)
- Welding C certificate (evenings, 3 weeks)
- Swing dancing (Monday and Friday nights before the mixer, 8 bucks/session!)
I ended up doing way less than I expected. So my advice: leave behind everything connected with your job and focus on the unusual.
(if you're not essential for childcare or similar at home, and more important if you have not seen the world before).
Learn new things you've wanted to learn. Master new skills. Take a few MOOCs.
Spend more time with your kids.
But as the other comment states, B tends to be more exciting, and allows for deeper social connections more frequently. Sure, millions of people might know java and you can say, "Hey I know java too!" But I doubt the conversation will go any further than that. However, if you have experience with a less popular language and meet (or are interviewed by) someone that also knows that language, it will create a much deeper connection.
All in all, do both if you can. If you have to choose one or the other, learn something new and become a part of a smaller community and watch it rise or fall.
But if you want to look at it from a purely economic standpoint, the factors you mentioned interact in a complex way. Another one to consider is the salary curve for a language over years of experience. Not every language has the same pay. I would also consider the number of entry-level jobs over the total number of jobs.
I have an article exploring all these factors here if you're interested. Enjoy!
If you're going to focus on a specific language, make sure you're applying it to a problem where it makes sense.
First, as you point out, less competition.
Second, these languages are usually a little younger, and there is a chance to be part of a nice community from the beginning
Third, learning an "exotic" language is sometimes a great asset on a resume even if you interview for a position involving a different technology. It shows intellectual curiosity.
That may not be a language. That may be a programming style (functional? reactive?). It may be a library or a framework. It may be a platform (Android?). It may be a "language" that we don't think of as a language (SQL?).
My current answer is Android (not that I'm making much progress on it...)
Credit where due: I got my version of the question from my wife. She's asked it a couple of times over my career.
If you work interactively with data, you might also enjoy Slimux (https://github.com/epeli/slimux), a vim plugin that allows you to send lines from vim to an arbitrary tmux pane. I usually have IPython running in such a pane so I never have to copy+paste. I've got an ebook I've been kicking around describing this workflow in more detail here (http://dvbuntu.github.io/compute/posts/2050/01/01/workflow.h...).
As far as plugins, if one sounds interesting or useful to you, install it. If it doesn't work out, then you can delete it later. Over the years I have tried all of the popular plugins, but I have managed to whittle it down to 4 plus a couple of language specific plugins
Here are a couple of handy youtube videosVim Navigation Commands https://www.youtube.com/watch?v=Qem8cpbJeYcHow to Do 90% of What Plugins Do (With Just Vim) https://www.youtube.com/watch?v=XA2WjJbmmoM&t=3477s
Indirectly, a lot of good things have happened to me because of HN as well. Things change very quickly in tech space. Yesterday's anti-patterns are today's best practises and best practises of today will become tomorrow's anti-patterns. I owe a lot to HN which keeps me updated with ever changing tech ecosystem. Being a full-stack developer, I've to keep up with both frontend and backend changes happening everyday. Without HN, I'd not have found out lots of things for sure.
The whole experience was really amazing.
Thank you HN.
- Make a rule that anything that's in master can be deployed by anyone at any time. This will enforce discipline for code review, but also for introducing changes that f.e. require migrations. You'll use feature flags more, split db schema changes into several deployments, make code work with both schema version, etc. All good practices that you'll need anyway when you reach larger scale and run into issues with different versions of code running concurrently during deployments.
- If you're using Github, check out the recently added options for controlling merging. Enable branch protection for master, so that only pull request that are green on CI and have been reviewed can be merged. Enable different dropdown options for the merge button (eg rebase and merge), these are useful for small changes.
- It takes some time to get used to those constraints. Make sure that everyone is on board, and do a regular review of the workflow just as you would review your code. It takes some time to get used to, but I think it's worth it in the long run.
To be precise, small feature branches are perfectly fine. They are meant to be reviewed and squashed into master ("trunk") in a few hours to a few days maximum.
Squashing instead of merging has a big advantage of being able to quickly revert the changes if things go awry despite all best practices in place.
PS Avoid gitflow and similar workflows as they introduce leaps and thus risk. As everything in software engineering, you want your workflow to be as incremental as possible.
1. Never commit to master 2. master is always deployable and gets built and deployed (CI/CD) automatically so its sacred 3. Everyone codes in their own feature branch (username/feature) 4. These are merged into a topic branch (origin/topic_feature) if there are more than 1 person working on a feature together 5. That topic branch is treated as a master - no force pushes, everyone rebases and merges from their personal branches 6. Topic branches are rebased with master periodically/sensibly and often times get built and deployed as beta for feature testing 7. Topic branches are merged into master
We don't force push and maintain history. Proper commit message formats are enforced to ensure that everything is standard and readable.
Feature branches were rebased then merged with a --no-ff. This creates a merge commit on master which includes the ticket number and short description.
The rebase is done by the feature branch developer who is usually best qualified to do so.
The advantage is that changes are isolated from each other, so nothing is spread before it's reviewed. The rebase makes the history easy to follow because it becomes linear and you can always easily see exactly what was changed in the branch. You still retain the full history of the feature branches.
Disadvantages: it doesn't scale to a massive team because you need to linearize the merges back to master. So it works for upto around 20 people.
I'd recommend against Git Flow because their method of merging makes it very unclear exactly what was changed in a branch. I actually prefer no feature branches to using Git Flow.
The main cherry I like to put on top is to always rebase before merging then merge with --no-ff (which is the default with GitHub PR merge button). This gives linear history for purposes of git bisect but preserves the topic branch structure so you don't have to read the tea leaves of the individual commits to piece together the overall development timeline. That one little piece goes a long way to addressing the concern that "rebasing destroys history" (which I don't agree with anyway, but that's the topic of another post).
This might not be worth it for certain types of contributors who are not programmers by trade, but for career programmers I believe mastering git and rebase in all its flavors (-i, --onto, pull --rebase, etc) pays big dividends that your team will appreciate more as the years go by. For git beginners maybe you start without rebasing, then learn the ins and outs of rebasing with local branches only before pushing, before finally going the whole hog and rebasing topic branches with force push before merging.
One last idea I like is Zach Holman's recommendation of deploying topic branches directly and then merging if there are no issues (https://zachholman.com/posts/deploying-software) in order to have easier rollbacks. Then you have 100% guarantee master is always stable.
Right now, I work on a smaller project, we use similar workflow - we haven't implemented feature flags yet, but I suppose we will in the future (the project hasn't been released yet actually). I personally don't like developing an entire feature in a separate branch and then merging when it's all over, because code review becomes tedious (and ineffective) and the risk of merge conflicts increases. I would suggest you invest time in writing tests, so you can become better at it (if you aren't already) and it becomes a natural part of your development. Same goes for feature flags :) I was a junior when I started working like this (I still am, kind of) and it meant the world for me :)
We just keep it simple like:
- No one pushes to master.
- For every feature (or update on a feature), create new branch.
- Send pull request for reviewing (one of us is the reviewer).
- Merge pull request into master.
You could try git workflow, but it's just too complicated for small team (and for large teams too?).
Only working, tested code should make it into master. Code reviews and automated tests are great tools for this, but ultimately, it's up to the individual developers to not be sloppy.
Avoid long-lived branches and big merges. If you've got big features that take a while to complete, break them into smaller things you can deploy sooner or use feature toggles.
Don't leave it too long between deployments. Small, frequent updates are far easier to manage and far less risky. A dozen deployments a day are better than a dozen a year.
Everybody should stay up to date with master. Rebase on top of master before merging instead of having awkward merge commits that only obfuscate history.
If you have people working on features that take multiple commits to implement, use feature branches. These should be rebased onto master and cleaned up before merging into master.
If you combine all of the above, you're heading down a path similar to GitLab Flow or GitHub Flow, so strongly consider using one of those instead of coming up with your own from scratch. Don't use Git Flow. It overcomplicates things and offers zero benefits over the alternatives. As far as I can see, it's only popular because a lot of inexperienced Git users were feeling like they were adrift without a workflow, and a blog post with a snappy title came along at just the right time to catch their attention.
If your team don't have good VCS habits, you need to do something about this. Small, frequent commits that do one thing and one thing only, good log messages, push and pull frequently, etc. If you can't describe the change briefly, you are doing too much in one commit. There's lots of best practices articles for Git that have been written read them. Also read Pro Git, which is free on the Git website.
Also, the Pro Git book: https://git-scm.com/book/en/v2
- Branch off master to make your fix/feature. Prefix branch name with "fix/" or "feature/" accordingly. We occasionally use a "script/" or "migration/" prefix too. - Do work. Use "git app -p" so commits are fairly small. - Make GH PR into master, get code reviewed. CI test are run automatically. - Deploy branch to staging environment and test. - Merge with GH, deploy to production.
- master is always in sync with production, and so is always deployable. - never commit to master. - we don't use a develop branch.
There is only one long-lived branch in each of our repositories: master. All other branches in our GitHub repos exist only to perform a Pull Request/code review.
PRs must not be merged in to master until all unit tests are passing (the unit test suite is run for each new commit to a PR branch) and the change has been reviewed by another member of the team. In almost all circumstances the person who raised the PR is responsible for merging it. Once the PR has been merged in to master the GitHub branch is deleted.
Our CI server creates a new build for _every_ merge commit to master, automatically pushes this build to our integration environment, and then runs a series out automated integration tests on the system. If the build or automated tests fail then only PRs that fix the build are allowed to be merged in unless they are trivial.
Once our DiT is ready to perform a test, she promotes a build to the test environment and does her thing. Tickets that have been tested are then reviewed by a product owner and if they are happy the build gets promoted to the Live environment.
both work well I think for small teams just depends on how well you want to organize things.
master ("production") branch:
- this is deployed
- nobody (not even GitHub Org administrators) can push; master is only changed via approved PR
- the base "working" branch during each 3-week sprint
- pushing is allowed iff the change is trivial or already has team consensus (e.g. changing linter rules)
- this is where we demo to our Product Owner
- branched from dev
- named along the the lines of "alternate-checkout-TFF-75-story"
- base branch for any work that needs to be done for a user story
- branched from the corresponding story branch
- (usually) named along the lines of "item-unavailable-TFF-92"
For all branches:
- CI must pass
- all PRs require >= 2 approvals, unless it is a trivial change then only 1
- require PRs when merging upstream (i.e. task -> story -> dev -> master)
- merge freely when going downstream (i.e. master -> dev -> story -> task)
- do not merge from story-A to story-B nor task-A to task-B
- squash commits when going task -> story and story -> dev
- do not squash when going dev -> master
Having stroy & task branches help keep the changes for each new feature in easily digestible chunks. The story branch is particularly helpful when two tasks need the same code, but the story, task-A, nor task-B branches are ready to go to dev. So we merge the shared code to the story branch, then the other task branch can merge down the required code from the story branch.
Currently, there is some contention over our verbose branch naming scheme. Previously, when 3/5 of the team was working on a different project, the branch naming scheme was "name-of-story-TSS-XX-story" for stories and "name-of-story-TSS-XX/name-of-task-TSS-XX".
This is nice because in addition to the isolation it provides when everyone is working on their own fork it's easy to code review changes BEFORE they land in the "blessed" repository.
It's also nice because junior developers aren't pushing directly to the blessed repo either.
This model is really nice for maintenance and small feature development.
For major new development (new version, major feature that multiple people will work on) we tend to revert back to the behavior of committing directly to the blessed repo.
In the end, however, it is going to come down to the specifics of your app and environment. What sort of CI do you have set up? Do you have anything that controls when or how you are able to release code? These types of things are what generally push teams to other models.
Feature branches are named after a ticket. Pull requests are across branches in the same repo, not across repos. (It's marginally easier to collaborate on feature branches if they're all in the same repo.)
We don't (yet) do full continuous deployment, so many feature branches get grouped together before a release. Our strategy is to test* each feature independently and then merge all the tickets together to a branch named "staging". The staging branch then gets run against some extra regression/acceptance tests and whatever manual tests we may want. If they pass we merge to master, tag, and deploy.
Seems fine so far. Specifics about our tests and deployment process drive the Git workflow more than anything else.
*Run the test suite, test manually, whatever.
Also, what's your QA process and what is the usual quality of your builds? How R&D heavy are your new features, and how long do they typically take to develop? Are your programmers own different parts of the codebase, or is every one of them able to work on anything?
Without all this details it's impossible to know which workflow is ideal for your particular team.
The biggest change for us when we starte was do not push features for the 3 month release into master so at any moment or bug fix master is always ready to go live anywhere without some dumb new feature we don't want. Keep master clean dammit :)
Will you only have one version of the app released at a time, (websites) or multiple versions (native, mobile apps). Will you have just one team or multiple teams working on the same app at the same time?
Answer these questions first, then and only then should you seek for a workflow.
1- every dev works on a topic branch
2- always rebase before committing
3- have a jenkins running somewhere\
4- everything that gets merged into master gets automatically built and tested
5- everything that gets merged into -RELEASE gets automatically built, tested, packaged and deployed
6- Use issues from gitlab/github
7- Did I mention to always rebase before committing?
This isn't much and isn't exaustive, but it's a start.
An admin merges a release back into Master and back through to dev after a milestone build, demo or production release.
Keep the same Workflow with other teams in your organisation if it exists - unless it is fatally flawed - so that team members moving around have the same experience. Consistency and all that
Just commit everything to master and that's all! Sound stupid but worked best for us. I have seen a big software company using this, I learned this from them and never looked back!
Next to feature branches.
Jenkins for updating
Beta = production databases, but automatically copied, to avoid production errors ( lots of parameters to customize stuff)
No develop in master, just merging
Some news organizations will have their own staff checking results, especially in areas where it is known that the results will be slow and the results are going to be within polling error margins.
You'd think the data could be crowd-sourced more effectively, but private citizens get the data more slowly for a few reasons ... First is that there is red tape involved in obtaining the data (i.e. forms to fill out, fees to pay and it all must be done ahead of time) and second is that after-hours early access to data is just plain limited logistically. If it could be efficiently delivered to a large quantity of people, it would be presented online.
There are a few areas where the government decides that it's more efficient to let private parties distribute data, and it's generally pretty good business to become one of those parties. NMVTIS data comes to mind immediately (carfax and it's competitors), but there are many similar instances.
"Shortly before the polls close, over 4,000 stringers report to county election centers. When the first polls close, theyll be ready to start phoning in the raw vote as it is reported by the counties. Theyll place their calls to AP election centers around the country.
At the centers, a total of over 800 vote entry clerks will answer those calls, and walk each stringer through a dialogue as they enter the number of precincts reporting and the candidates votes into our election night system. "
They pay $50 for someone to go to the county and report the election results. There's an iphone, android, and mobile web site, as well as a call center that takes that input.
Honestly, it was a really fun evening in the middle of nowhere Ohio...
Disclaimer: I work in philly's city government. It's really cool, and we'll soon be hiring a product manager (for beta.phila.gov), a data engineer (for open data), and a front-end/wordpress developer.
In Illinois I registered to vote well before the deadline. I showed up to cast my ballot but my name wasn't in the "database." The folks managing the polling station had to manually re-enter all my details into an Android tablet. While this was happening, I took out my phone and scanned the WiFi network of the church I was in. I assume the tablets were connected via wifi. I saw no other connection to the tablet besides a power connection. To my surprised the WIFI was running WEP. Hmm, this day in age you would think WEP would be default=off. This was at a local Church too. So perhaps the tablets use cellular data plans?
They get all my PII data entered, I get my ballot, fill it out, and pass it through a machine. The machine is in the corner of the building in a large box so I can't tell if it's hardwired to some network or using the wifi.
Later that day (about an hour later after re-entering my details into the Android tablet) I went to the Illinois voter registration web site to look up my name and I can find my details.
Anyone have any information on the tablet software? Who writes it? How it's transmitted and stored? What about the electronic ballot counting machines? Are the phoning home some where?
The whole setup seems sketchy to me.
As an aside: I know a couple people who have homes in different states and claim they can cast multiple votes by driving/flying to the state where they have 2nd home to cast a 2nd ballot.
In the UK at least we aren't meant to release the results until the returning officer reads them out so waiting for any of the above while showing a live feed of a result would mean we don't have the result to show on screen immediately. For this reason you would likely also have people in the studio watching the live feeds from counts and entering the numbers which would then be double checked against the official feed later. This can be tricky when the result is drowned out by cheering from a crowd of supporters! ie "Labout party, John Candidate 22 thousand... <WOOOOOO - YEAAAH> ...hundred and 1 votes"
The focus for news orgs is getting these results out accurately before their competitors, no one wants to be slow to announce the results.
In addition to all those, there is Oy ve Otesi, a non-profit does the entire thing with only volunteer work. Their coverage is pretty minimal in rural areas, though.
We transfer and process them, for national races we we the AP Election API
basically it says it is based on exit poll. and it is costly, so many media companies formed an entity called NationalElection Pool to do the report.
And they also hired a company called Edison Research to do the exit poll.
My wild-assed guess? Based only on the ridiculous amount of computation needed to simulate neurons, the first roughly human-like AI will stretch the hardware it's running on, and the budget of the organization responsible, to its absolute limit. It will probably not even run in real time, more like 1:100 or worse, with its creators rationalizing that ratio as actually being good for their scientific purposes (a slow-motion process is easier to control, study, debug). Hardware is hard and expensive, and attempts to scale up to real time will only be made once there is a convincing case that there are no easy design gains left to be had. It will take years.
And once that happens, you will have a roughly human-like AI who has no more of a clue how to make itself smarter than you and I do.
We are pretty well compartmentalised against 'superior intelligence' anyway so it seems. Not too many philosopher kings around these last few millennia.
Exponential growth starts very slow, even slower than linear growth at first.
Potential risk: choosing bad content could cause more conflicts than new connections.
Why not done: just came up with it, also unlikely to be profitable unless you get a research grant for it.
Trigger: this idea is similar, right? https://twitter.com/Aelkus/status/796845589254275072
For people like myself who like great art but have very little knowledge about the relationships or even chronology of the various movements, it would be great to have a broad range of artworks representative of the various movements placed on a map. Together with a slider type interface to choose time periods I think you could get a really good idea of how and when the different movements evolved and how they relate to each other. You could easily see for instance that there wasn't much happening in city x in a particular decade but a lot going on in city y. Move forward a decade and while y might be in decline, you can easily see that city z is becoming active - and that the newer works have clearly been influenced by what was happening in city y a decade earlier.
I have a fairly clear idea of how something like this could be monetised, together with how to get the necessary content. Haven't given much thought to how it might be marketed though. You could call it 'Art in Space and Time' (artisat).
I like that it presents a great challenge from a UI perspective - it could be done really well or really badly.
Anyhow, work keeps getting in the way...
If anyone likes the idea, go for it. Get in touch if you'd like to hear a little more - I might even be willing to get involved.
Customers simply type what they want. GPS locates the customer. Companies submit reverse bids both manually and algorithmically. Customer accepts what suits them best. Yay, money saved, time saved, customer happy.
Specifically, I don't have enough experience building android apps to make it as slick as I would like. Happy to talk with anyone about it. Can build back end, will travel, etc :).
I would like to see a larger effort for the SV community to expand into some of these communities and help give some of these communities a much-needed economic jolt.
1) Some kind of crawler that goes through YouTube videos indexing them and its subtitles and then when a user searches a word or idiom the web app would show some part of a video that speaks exactly that search term.I know there are other services that does that, but I want something more natural since these services use some kind of text to speech with a robotic voice and not a real life situation.
2) An old school open world MMORPG with modern graphics and a mix of Ultima Online (PVP) and Diablo III (Dungeons) gameplay. Nowadays every mmorpg is a copy of World of Warcraft with a different story. There is no innovation...
EDIT: add another idea :)
If I had access to a space launch capability for less than $100/kg, however, I could bootstrap the whole business from my basement with an investment of ~$100-200k from some friends. 
From SpaceX's perspective, they can put ~5 tons in lunar orbit for a cost of $200k in fuel . $40/kg is great, but it's not what they charge their customers, and it's not what they'd charge me - demand from comsat operators with a much higher willingness to pay means that I have no access to the market, and SpaceX needs to make a profit.
Give it 10-50 years, and I'd expect real asteroid mining will become economically viable. 
 assuming zero NRE for mining robot fabrication and a single person salary.
 ignoring actual launch costs, personnel salaries, and assuming the whole booster stack is paid for through infinite perfect recovery.
 see also Planetary Resources, and why they should be in hibernation mode, not burning $2m/year developing camera sats. but hey, VCs have money to burn.
The idea is that people get a "bubble" but that when people vote, hopefully they take into account both quality and how similar the post is to their own. So people get a better version of their own views, which hopefully also allows them to see similar but non-identical views.
You can see that sites like reddit which tend to have high quality posts, but many subreddis have very strong biases as well. Letting people live in their own bubble means that people can write the best quality posts they can without worrying if their bias matches the subreddit they are writing in.
Step 1: My wife and I both download an app.
Step 2: We link our accounts.
Step 3: We each find and read articles in the app, Pocket-style.
When done with an article, swipe right if I think my wife should read it. Swipe left if I don't want to pass it on.
Step 4: Open the queue of articles that my wife thinks I should read. Read them. Swipe right if I want to chat about it with her. Swipe left if I don't.
Step 5: On the weekends, as we're going for our walk, talk about the articles we both found intellectually stimulating.
Here is an outline of the technical requirements and how they could be achieved.
I couldn't build it because I a) lack hardware expertise to figure out tricks to navigate without GPS or/and map buildings and b) never figured out a realistic GTM for this.
But what about proof assistants? It struck me that using a proof assistant to guide the theorem prover inside a partial evaluator offers an opportunity to repartition the coding task. The idea of "end user programming" always fails because we cannot sufficiently separate the idea of a program that serves as specification (here is what we want done, its a shame that this specification isn't really runable because the implied algorithm is too inefficient (think about PROLOG, where a naive program may well be logically correct, but backtracks itself an exponential runtime)) and a program that describes a tolerably efficient algorithm. The poor end user has enough trouble with writing code that specifies the computation correctly without worrying about computer-sciencey stuff about how the computer should actually go about computing it.
If only there was some way the person rewriting the code to make it go fast could do so at one remove. He works with the end user programmer first time through, but subsequent revisions by the end user get rewritten automatically...
This was the vision I tried to articulate in https://groups.google.com/d/msg/comp.lang.lisp/5p8oVP5dGbU/V...but my health has failed and I've not got any further forward :-(
A polished, credible implementation of that would mark the beginning of a new marketplace centered on agent services that prey on existing Web companies and tear open their data silos and adtech, one user at a time.
But what ultimately stops me from further consideration is that the level of AI know-how needed to do this is not a commodity at this time - you'd need a full team of top talent, and it probably wouldn't be cheap/fast/customizable/secure enough for users if done now. I think it will happen though, the signs of it happening are gradually emerging, and when it does, watch out!
On the service-end, it would have basically been an Apache Spark instance doing collaborative filtering as data comes in. It seemed like a pretty sweet idea, but I couldn't find the time to work on it.
If this seems like a cool idea, you should definitely steal it and start working on it.
Related to this -- I wrote a blog post about a lot of my random ideas I haven't finished and why you should steal them. Complete list and blog post here: https://kristianfreeman.com/post/steal/
My single friend tells me of dissapointing dates where the profile photos are years old. She especially dislikes guys who lie about their age to date women in their 20's.
In more detail, an innocuous autonomous droid that reminds me of meetings and takes me to the right location. Intelligent enough to correct for diversions to the wc or coffee machine, and stay out from under foot.
Note that this is partly independent from speech recognition. Perhaps speech could be translated to a string of word alternatives with probabilities, and language understanding gives a hint which alternatives make more sense.
In other words, language understanding could help speech recognition.
Can be used for announcements, notifications, 2-way comms etc.
1/ So the idea I haven't done is build a hacker search engine. I'm not sure what this would look like, but I'd bet being able to search through source code at high/low levels might be interesting.
2/ Another idea is I noted on the the Amazon/NES classic thread, arbitrage by Amazon/users resulting in instant sellout. Could this idea be used somehow?