We're a place where coders share, stay up-to-date and grow their careers.
Templates let you quickly answer FAQs or store snippets for re-use.
Short answer: no, you don't have to work at another company if you don't want to - in fact, it might actually hold you back!
It sounds like you're able to work and pay your bills, and also learn Android / do your own development on the side. That's a great position to be in! That means you can learn by actually doing on the side, and not worry about getting paid for it yet.
The best advice I can give is to keep actively working on your own Android apps. I would pick a small (tiny!) app idea that you have, and build that completely and actually release it. It doesn't have to be great (it's your first one!), and doesn't have to be world changing - it just has to actually work.
You'll learn SO MUCH by releasing an app from start to finish. Anytime you run into something hard - that is when you're learning. Lean into that feeling! It's going to be a struggle, but it will be so worth it in the end.
If you go to work for another company, then what you'll be learning is their processes, and their way of doing things - but it sounds like what you really want to do is to do your own thing! So you won't be learning as much as you may think you would at another company.
So: I wouldn't quit your current job (as long as it's still going well for you) - and I wouldn't expect to make a bunch of money quickly by making your own apps... but still make them! You'll learn so much.
And later, if you want to, you can always go work for a "real" software company. Plus - BONUS! You'll have actual, real apps to point to in the app store, so you'll be able to ask for more salary, or a better title, etc.
I hope that helps! I'm happy to answer any other questions. I would only go work somewhere else if you REALLY want to. But if you really want to just develop your own apps - then just do that!
It sounds like you're ready now :)
In short: no. What you sample from working at a company is processes. The more you see, the more data points you have. But you can make up your own processes on the go.
At Ericsson I saw the nice processes for handling customer bugs by multiple lines of engineers, also about writing product documentation for customers. I enjoyed the pace of quarterly releases, the professional calm of small, few-people offices. At Google I learned how to communicate and work effectively with multiple partner teams, how to maintain mass codebase and infrastructure, apply code-review practices to shorten turnover for distributed teams etc.
Processes used by large companies will differ a lot from processes used by a single-person business though. You seem to have plenty of process experience already.
Organization of codebase, service structure, testing plans etc will reflect the structure of the company. So the examples you see promoted by people working at big tech companies (pervasive use of microservices, for example) won't apply to you.
I would recommend reading Scott Berkun's The Year Without Pants, about how Wordpress.com's org operated - a very bottom-up, self organizing fashion.
Don't use the bleeding edge. Don't use anything with an edge, actually.
You seem to develop Android in Java, good. Stick to it. No Scala, Kotlin, whatever. They will introduce some impedance mismatch, and every now and then make you loose weeks debugging odd corner cases.
No NoSQL, Rabbit/Active/WhateverMQ, Redis, Kafka, Kubernetes, Docker (ok, Docker maaaaabyeee... but no). These have their place if you have a dedicated infra team (or infra guy) who will spend weeks configuring stuff or debugging deployment issues.
No cloud managed queues, databases, whatever. They will be very expensive. Maybe some actual server instances in the cloud, but 1-2 big irons will take you far.
Yes: PostgreSQL / MariaDB. Learn SQL. No ORM frameworks.
Note: you need to play with the edge to keep professional knowledge up to date. But do it for toy tasks, not related to the critical flow in your business.
When you are solo and don't have a review peer, tests are your best friends. Unit test what makes sense. Later when you have some flow of money, gear up integration / UI testing as well.
Using version control is mandatory. This works fine in practice: nvie.com/posts/a-successful-git-br....
Try to add some continuous integration eventually that will run your commits. But initially just don't forget to run the tests every now and then.
This is optional, likely no need to worry until 1-2 of your apps get stolen. And, maybe they won't.
If you have a server-side, your app will be harder to just snatch and copy. Ask yourself, what knowledge can I accumulate that will be hard (or at least non-trivial) for others to replicate?
Don't go overly fancy. Have a database and a simple Rest API to serve it. Initially you can deploy manually even.
Working in the dark for six months to get the perfect polished product is a no-no. Aim to release something in two weeks.
Have a list for bugs, feature idea backlog, in-progress tasks etc. A free private Trello board just works fine.
Often there will be non-inspiring tasks, or bugs to be tracked down. You have to bear with these - working on the fun parts is fun, but most of the work is not very fun, at least compared to all the shiny tech you see on blogs. If you find it fun, ask if it is really essential.
If the anonymous poster pings me (can use email@example.com), I'll send a free instance of my book Programming Without Anxiety. This will show you the frustrations you would likely meet as a programmer, and help decide if you like that sort. Includes advice on handling them as well.
As I worked with Java for an extended while, I can dearly recommend IntelliJ Idea. You can go a long way with the free Community Edition. Really makes a difference (I generally prefer mucking around on the command line and vim, but for Java I would die without IntelliJ).
Why do you recommend avoid ORM frameworks? I thought they were commonplace
Disclaimer: My experience comes from ~8 years ago, but ORMs were commonplace even that time. Not sure what improvement happened since.
An ORM framework gives you a false promise: that you can forget (or not even be much aware of) that you are working with a DB, and just continue using objects the way you normally would in your programming language (my experience was from Java).
That is a lie, and lies will come to hurt you eventually. Some specific examples that hurt me back then:
The promise that it is easy (no fiddling with schema, DB connections, whatever). Initial wiring is always a hassle - getting the configs right, getting JPA to register correctly, getting the annotations right. Not as worry-free as expected.
Leaky abstraction. For example, when you commit new objects to the DB the first time, their identity changes (see developer.jboss.org/wiki/EqualsAnd...).
Where are transaction boundaries? If db objects mix with regular objects and get passed around in code, it is easier to loose track of what is committed or not (or when). Usually what you want is doing logic upfront, then having a tight section where you make a transaction.
Limited performance. The ORM can't do as sophisticated query optimization as the DB can.
Unexposed DB functionality. Eventually you might need something from the DB that the ORM doesn't expose.
My choice is having a DB access layer, which exposes high-level operations to the user code, but implements db access using SQL directly. I believe it is a low-friction and clear solution.
Besides, writing huge joins is fun!
I never got the idea with MongoDB and friends. My impression was, a lot of bloggers trying to push this new thing, that would make everything much easier.
Every time I came in touch with something ORM, it only blurred the hole data model, and I'd be looking for a way to migrate this thing into a normalized SQL database.
I grew my database bones with mSQL -> MySQL so my opinion might be colored by that :)
Nice comment, there are a lot of great advices in there!
An addition to the company experience (I discussed it offline after writing): if not with colleagues, one should definitely start to build out some IRL social connections. Maybe visiting a meetup, or rather frequenting a local coworking office.
Many times I was accidentally helped out after casually mentioning a problem I have.
nice, I will just add:
take some courses or reading about 'Computational complexity theory' if you have not done yet. It's sometimes difference between good and bad aps.
Speaking as someone with almost 20 years of industry experience... No, industry experience is not needed. At least not for the reasons you mentioned. There is no one right way for doing anything, no one true tool for anything. The truth is that everyone is just winging it, solving problems on the fly, iterating and changing things as they go. I've never worked in a place that operated the same from one year to the next.
Also, processes differ wildly, due to many factors. Number of employees, type of work, type of clients, type of software... Actual processes and tools you'd pick up working 'in the industry' probably won't even be applicable to your situation when striking out on your own.
Vast majority of tools and processes are there to facilitate efficient communication and collaboration between different people with different roles, different needs and goals. Working solo, you avoid all of that. If your app making career takes off and you end up needing to employ or partner with other developers, that's when you'll need to set up your way of doing things. But, you'll cross that bridge when you get there. And there will be plenty of books, blogs and other resources to help you along. You can even ask here. :-)
So, as to not knowing 'how industry works' - no need to worry about that. But, what I would like to caution you about is your business plan. Mobile apps industry is extremely competitive, and having a successful app is very, very hard, especially if you want to go it alone. You need to prepare yourself for a long, hard slog. Expect to have several false starts and apps that get no traction. Rovio got a huge hit with Angry Birds, but it was their 52nd mobile game! All previous were flops. I'd advise you to approach your early attempts as learning experiences, worth it for the journey itself. If any get traction, great. If not, never mind, you'll learn from it. But be prepared to move on and move fast to the next project. With some luck, you'll get a winner eventually.
Hope this helps, I wish you good luck.
My advice would be, don't jump in cold as a total beginner with no industry experience and try to support yourself full time with your own business. I have only second degree knowledge about the mobile market, but from what I gather it is extremely cut throat and a bit of a lottery until you make it.
Plus, if you want to run a one person business, you will need to do it all. Accounting, Marketing, Sales, Development, Testing, Customer Support, etc.
This takes time, especially when you have no prior experience. You will make mistakes. These mistakes will cost you money. This is how you will learn.
I don't think it necessarily matters if you gain the experience on your own or in an organization, but I think it matters that you don't put your livelihood on the line.
You say that you struggle with anxiety and depression. I can tell you from experience, running your own business is very taxing on your nerves. It is extremely difficult to take a break, it is likely that you will think about it constantly. I did that, I started a business and on top, I tried to support my family of four with it. I failed, I burned out. I didn't have the resources to make up for the months where business was slow. After a year I closed and am now happily employed. But that is me. At the same time, I can tell you, that there are few things as rewarding as celebrating successes in your own business. It's awesome.
As just a random person on the internet, I can only offer you my perspective on this. In the end, you will need to figure it out on your own.
My advice to you would be this: If you have a stable job, that supports your live style and at the same time leaves enough room to work on an app, keep the job and develop that app on the side. Gain experience. If you fail, great, learn from it. If you succeed, awesome, you earned it. But for your mental health, stay safe until you are good enough, successful enough to leave your job. That's when you take the plunge.
You are 29, there is no need to rush.
I'm pretty sure that articles attract a wider audience than audio recordings (by far). Why? Because you can only listen to someone speaking in realtime, maybe 1.5x realtime before it gets too fast, but when you have a written article you can skim through and even skip paragraphs. So articles might cost you more time to write than recording some audio, but articles save your audience time.
Build a lot of apps fast, get people to install & use them. Focus on that. Keep doing it. If one of them starts to feel like it has loads of potential, grow it further.
If you have a few reasonable apps with some installs, people will pay you to work on theirs. From there you can take the direction you want.
Keep your paid work until you feel ready.
I don't know if you're asking the right question, to be honest. It sounds like you want to strike out on your own without having worked in a formal job doing software development long term.
As long as you know what parts go into what you want to do, you'll be fine. You're always going to have growing pains regardless of your background, so there's no point to fretting about one piece.
Like, yeah, you may not know the ins and outs of making a perfect build pipeline, but do you need that right now? You also likely have never worked in marketing, but do you think you need a marketing job in order to get users for your app? Nah, Google it or hire a firm for that if you need it. If you find you don't like manually building an app and pushing it up somewhere, Google alternatives and figure out about build processes then.
Define "industry experience"...
As it pertains to the definition of working for a company and picking up tidbits from there: no, this is not mandatory at all.
As it pertains to industry experience as it pertains to getting a mentor from the industry or surrounding yourself with peers who have industry experience: yes... Sooner than later, but not day 1.
Learning with / from those in the industry provides insight into the nuances you'll never get by yourself: code that is written well because ONE DAY someone may take over the coding while you concentrate elsewhere. Good code that can be picked up / understood easily is worth it's weight in gold.
If you are thinking of expanding one day to more than just yourself the surrounding yourself w/ I dustry folks can help you learn about good programming practices within groups.
Relevant experience matters. You're building apps and gaining relevant experience.
On top of that, you're building your portfolio as you keep developing apps. So keep at it, you're doing the right things. :)
Firstly thanks for the post and. Bit about me. I am a c# Dev with 3 years industry experience.
In answer to your question. No it is not absolutely necessary to have industry experience, however it does make getting a job or clients easier.
I am speaking from experience, I have a degree in a niche engineering sector and I am currently employed as a C# Dev working on some pretty cool tech stuff, Azure, microservices, serverless etc.
I too wanted to get into programming and tech and that was around 3 years ago after going through some hard personal stuff.
For me I simply kept learning the craft whilst applying for junior jobs, until I found a company willing to take a chance.
I am essentially self taught. At first it was hard and frustrating, but not giving up and continuing go learn helped me to secure my job.
The best thing you can do is learn everything you can. Look at example projects on your favourite repository (GitHub, gitlab etc.) Read blog posts, hell write blog posts about what you've learned, get involved and never give up.
If it takes a month great, if it takes 12 so what, you will still have achieved what you set out to do.
Good luck and if you need more advice then shout up, this industry is one that generally cares!
The simple answer is: yes; if you're developing apps you're gaining relevant experience!
It sounds like you're in a relatively comfortable position to make the transition: a regular income with time on the side for your own projects. If your plan is to set up your own business then for the time being just do what's right for you.
The tools you encounter in a work environment are often there to facilitate working in teams; but can be useful on personal projects too - e.g. code repos such as Git are invaluable for backing up code and allow you to experiment with ideas whilst being able to revert changes if necessary. But no-one is expected to know all these tools in-depth: you usually choose a specialism and concentrate on that.
If you want demonstrable 'industry' experience for the purpose of getting a job you could also consider working on Open Source projects. They'll be using similar tooling but you won't be in a high-pressure work environment; so it may be a more comfortable introduction.
You're on the right path. Keep at it! You don't need formal schooling and these days industry experience includes personal work.
When you're ready, work with a recruiting agency - their job is to get you hired, so if you aren't gaining traction they'll tell you your weak points because at the end of the day, they get paid to place you. Then grow from there.
As another dev who suffers from OCD, Anxiety and Depression, best of luck!
In the 80's and 90's it was not possible, because the industry used very expensive closed-source applications and frameworks. No student or private person could afford these things. (Speaking of software in general, because there were no mobiles of course.)
But nowadays it's completely different. The leading technologies are free, well documented, have big communities, and are being taught in every university, especially when it comes to UI/UX development and mobile apps.
=> It's easier than ever before to produce industry-level software on your own.
I have been thinking about this a bit and there are a lot of good suggestions here.
Let me add a few points.
First, I don’t think it’s necessary but certainly helpful to work in a larger company for some time.
I am a self-taught developer that worked as an student intern for a couple of years, then being the only developer in a little start-up that eventually failed. I’ve written about it here: return.co.de/blog/articles/why-my-...
TL;DR: there was no senior developer so we made a couple of serious wrong decisions.
One good thing was, that there had been someone with a business background. We had a lot of discussions, I wanted “good” software, he want business value and save money. Those discussions have been stressful but in the end they helped to find a good balance.
So maybe it would be good to find someone to work together that does the business, and maybe marketing etc.
A second thing is, that you need to be realistic about the chance of an successful App. There are something like 2 million of apps in the iOS AppStore at least so it’s pretty hard to get visibility there as well as getting revenue because people expect Apps to be for free. So as someone else here mentions, to to start it as a side project.
I’ve built a productive android app (industrial context, not in the play store) myself and from the requirements, it appeared to be a very very simple app But it turned out to be very complex. Writing a solid android app might be harder as one thinks.
Sorry for my grains of salt, but I think you were asking for honest opinions.
I doesn’t mean, you shouldn’t follow your dreams, it means must must be aware of the risks. If you can, mitigate or at least actively accept them.
Disclaimer: I am personally very careful and conservative regarding my decisions.
As for all the other answers, this is just my point of view. Think of it as amazon reviews, read all of them and make a decision yourself. No one can do that for you 😉
My take on this is definitely NO ! You don't need to work at a company to gather some sort of mandatory "wisdom" or magical processes on how to do stuff.
The conversations with the former work colleagues which you overheard, who had it all figured out (communication, processes, whatever), don't fret about it. IT'S NOT IMPORTANT. Their perceived wisdom on how you "should" do something is just one of a myriad ways you can approach those problems. There is no holy grail or "one right way" to do something.
Anyone telling me that I "have" to do Scrum, or CI (continuous integration), or TDD, I can confidently tell them that I can do without - there is no "one right way". The most important thing is that you're motivated (which I can clearly see) and that you acquired the technical basics that allow you to get stuff done.
(by the way, the approaches around communication are not relevant anyway in your case)
What I do recommend however is that you google a bit about best practices regarding running your own business and marketing and stuff like that. But don't go heavy on "software engineering best practices", especially because you're a solo dev.
You can simply code apps that you like, make a profile in some freelance webpage, build a web portfolio presenting your works and get into LinkedIn. This should make some companies to contact you for work sometimes and makes you easy to apply into job offers.
Keep in mind that software development is a stressful career so it usually takes time and some jumps from a company to another till you find somewhere to work happily.
I won't help you lying in that fact and telling you all will be ok, but you could take it as a truth to prepare yourself when applying to a job so you can transform in a strong person against that.
There are som devs that go for the money exclusively. You can end working on a company for 40k being happy and that makes you keep in that one, even getting 60k offers and thats what you need (i think).
You may also build a great app and create your own company, why not?!
The best advice i can tell you is "Don't stop coding!", If you work, if you want to learn, it will pay you back sooner than later.
If you can study on an official school (don't know where you live) go for it as you'll have more open doors to dev companies. If not, simply keep coding and get some certificates when possible, there are some free certificagions ad there are some official ones that are not too expensive.
In my experience, I was ALL front and no clue before joining a company. I got by but I didn't get it. And although this might just be me, I would advocate learning with a company first.
Imo, one of the best way to gain experience without working for any company is Open source contribution. This way you learn, gain experience and contribute to the industry
We're a place where coders share, stay up-to-date and grow their careers.