The advantage is that I can create a working prototype in days. I can show something to the client very early, and I don't spend months to fulfill specifications the client didn't really understand in the first place.
When I leave the project, any PHP developer will be able to pick up and implement changes within hours. My code isn't elegant in any way, but it's simple.
Problems with PHP itself aside, rolling your own from scratch only ever works out well for projects that start small and stay small. Even if the code is sane and readable, a developer starting with a site like this will need to understand either all of the patterns that are being used or to read and understand all of the code before being able to confidently and effectively work with it.
Contrast this to a framework, where similarly-sane code will yield something anyone with experience in the framework can almost-immediately begin working with.
Both have an up-front cost; however, the first incurs that cost every time any new developer starts working with any project done in such a way. The second is incurred once, period, making the startup time on any project on the same framework dramatically lower.
Frameworks are by no means a silver bullet, but their utility should not be underestimated, and the very nasty maintenance cost effects of the parent's post should be similarly understood.
But you can come up with a clear architecture without using a framework. For example, most projects I work on are well suited for a modular design. I can build them from many small, independent parts. So I write lots of PHP scripts consisting of some SQL queries on top and some presentation logic below. Introducing an ORM and separating Model/View/Controller would just add unnecessary complexity!
In my case, modularity ensures maintainability; there's no need for anyone to read all of the code before they can start working on something. Reading all of the code is only necessary if you write spaghetti code; but inexperienced developers will have no problem writing unmaintainable spaghetti code using any choice of framework!
When I leave the project, any PHP developer will be able to pick up and implement changes within hours.
Famous last words for PHP apps rolled from scratch with no unit tests.
Without tests I have less confidence with modifying another persons code. Without a framework it can be difficult to figure out the structure unless there is good documentation or the project has been well designed and structured (almost never the case).
Also I tend to either find problems with SQL injection,XSS or CSRF because they don't have a framework to help solve these or they have implemented their own solutions which are inevitably buggy or weird in some way.
That said, they don't allow SQL injections because they don't have a framework, they did it because they're stupid. Using a framework (and following the docs) will help save us from their stupidty, but so would learning about security issues.
Frameworks are largely about speed. They should make you develop quicker because loads of code is pre-written and generally it is of a higher quality than what you'll knock out in a few days because hundreds of man hours go into those libs.
Once you learn a singular framework, it cuts out any additional effort you need to go through to create said prototypes and you end up with a prototype that can be extended to production standard.
Sure you need to spend the time to learn it, but that's a one time deal for the most part.
Yii's CRUD code gen is incredibly nice to work with off the bat, so it really comes down to customizing json form validation messages and packing some partials views in with the response.
edit: It has ended up being that a good 70% of my time in web app dev is devoted to the tedium of changing little UI crap (Can this blue pop a little more? Can you put some shadowing here? I like this slider but I'm not feeling hyped about it... repeat ad infinitum), and not so much with complex backend work. It takes about two days, as you said, to get the server code going strong, and then two weeks to move divs around by an em here or there.
Congratulations. But will they be able to make changes without breaking what you did? That's the mark of a good developer. Anyone can make something, but it takes real experience and constant thought about how your code will be observed by others down the line to make a truly great product.
> Problems with PHP itself aside, rolling your own from scratch only ever works out well for projects that start small and stay small.
Small projects were what PHP was initially designed for. By the way the OP is talking, I believe that he's working on mostly brochureware or at least small/simple apps that don't require 24/7 monitoring or maintenance.
Avoiding frameworks, unit tests and client-side JavaScript is probably not as helpful. True, they can add bloat and complexity if you don't learn how to work with them.
Check out a framework like Laravel. Once you get over the hump you won't want to look back. I have my own framework called Phreeze which of course I'm partial towards but there are more recognized ones out there.
To this day i dont know how to focus... I got depression last year because... i dont know everything was not going the way i wanted but i dont changed anything... today i feel better but i still cant get things done... i was reading books/blogs/etc about how to organize/focus/motivate but nothing every really worked for me... not money/fame/etc helped to motivate...
maybe someone can help or share tips... and if you want dick around you can but i want answer or comment you...
The problem, clear in hindsight, was that actually hitting the books revealed how little I knew. Which is natural when you are studying a new subject, but filled me with fear because, well, exams.
It wasn't a happy time in my life. Maybe it's the same for you now. But that meant that rather than have the self belief to brush off initial defeat and study more, I found myself drawn towards distractions. Better to not know how bad you are than to work to improve it.
The sites you make are never going to be as good as the ones you imagine. Doing that animation, or adding this feature, is going to turn out to be harder than you first thought, and you are going to compromise.
If your self esteem is tied up in your work, or how good you are as a programmer, and you are like I was, then that means 'you are a bad person'. Better to read another blog than accept it.
Now I'm in a happier place, it's good enough to do my best. If I exceed expectations, I feel happy, but if I blow through a deadline, I'm confident that the next programmer would have too. Not happy about it, but confident.
So if you are like me, I'd suggest fixing my self belief and negative thinking yielded more than better time management. Hope this helps.
By breaking it down into small steps and focussing on the next achievable goal (we actually went even more granular than this but you get the idea) you don't get swamped, and if it all ends and you fail to hit a mile stone then hey, at least we hit 5 out of 6 or 10 out of 11 milestones (depending on when/if you fail).
We're still going 2 years later using the same process and it works really well
One thing to keep in mind though, TODO lists can give an illusion of progress and accomplishment[1]. That is assuming you split up the problem and create a TODO list out of it which seems like a reasonable thing to do.
I remember a discussion on HN about procrastination quite some time ago and there was a comment which made me think a lot. The commenter basically said that he procrastinates by writing code, because that is what he loves to do.
If you are procrastinating writing code by doing something else, perhaps you simply do not enjoy writing code and need to explore the world for whatever it is that you love doing?
I am still not sure myself, I enjoy writing code but there are other jobs which I think I would enjoy more.
Channeling him -- from things he's told me about myself -- I think he's say "What you're describing is a case, maybe a mild case, of ADD."
I've always rejected that comment when he made it, sure it was some failing of myself and my own "discipline." But you know what, there's nothing nobile about being hard on yourself and trying to enforce "discipline" through intolerance of your longtime behaviors.
Accept yourself, that a part of you wants to play and not work, accept that there's nothing inherently wrong about that. You're NOT a lazy person I'm sure. You're not a bad person. You're not doing anything bad. But if you feel your life would be better if you changed these behaviors, then try that out.
There are doctors (especially if you're lucky enough to live in a large city) that treat ADD without stimulants. But it's also possible the medication is exactly what you need. I'm a skeptic of remedies in pill form but also you can't argue with results.
For me, a big part was bad time management skills going back 20 years to grade school. So i sat down each morning and again after lunch and blocked out my next 4 hours in 30-minute increments. And I followed it. And I got a Chrome extension that began tracking time spent not working so I could acknowledge that it was happening with real hard numbers.
Over time, I got better at being productive. I started blocking time into hours. Then 2 hour blocks. I still do that on busy days. 2 hour blocks. It works well for me.
There's too many moral judgments passed about these things. You're a good person even if you manage time poorly. I promise.
maybe you are right. i will try it for some weeks. can you name the extension for chrome?
Additionally, focus comes from discipline. Discipline is forcing yourself to do something even when it's not what you might want to do at that moment.
How to become and stay disciplined is often very personal. Some people focus on the long goal, others on the minutia going from task to task, and still others focus on time (Pomodoro) or lists (GTD).
OP, try rewriting this, substituting "he", "she", "they", or "you" for "I".
Funny how quickly your perceived problems melt away as soon as you stop dwelling on yourself and start focusing on others.
Edit: I realize that OP is being slightly sarcastic, but I took this as an opportunity: This is a condensed version of pretty much the same feedback I've been giving people struggling with themselves for years: It's not about you! As soon as you get that, you can move on.
A recent instance:
Yours is not even a valid criticism. How about commenting on the actual content surrounding the words you're focusing on instead of arbitrary metrics that enforce your own perceptions?
This sort of inferiority can manifest itself structurally, eg. an army private vs. a captain, or individually, eg. insecurity and conceit. Based on the sheer volume of personal pronouns, it is clear that he is being subjected to a sort of myopia, and that he can't look at the issue objectively.
Removing oneself from the situation can be a valuable tool used to create objectivity, and one that this person has not attempted to employ.
But your comment is definitely relevant and potentially useful to the author.
Even though most of us are tech- and business-minded, we have to be aware that language is a big deal. The words we use to describe our products, startups and career experiences really affect how people think of them.
In this case, using so many instances of "I" makes the sentences repetitive and harder to read. That doesn't mean the article is bad or uninteresting. It just means the author has an opportunity to improve his already well-done essay by switching up his sentences and maybe focusing a little more on his environment.
For example:
"We opted to go for a web app purely because I was the most familiar with this platform but even then I had no prior experience and my friends were aware of this. I would be balancing my time between this and a well paid part time job at a local school as a music technician."
56 words and bunch of fluff. It sounds like a deflection of guilt.
What does it actually say? "I already had experience with web apps, so we decided a webapp would get things done quickly."
People who are hiring don't respond well to a lack of confidence. They will assume you suck and show you the door.
I keep on making the mistake of throwing away what I've got and starting over because I've learned how to do things better. I've just made this mistake again, but it's better because I've learned how to do it better this time, honest.
My response to this.
Don't write the retrospective bragging about what you've learned until after you have demonstrated success in a measurable way. I've encountered the described failure mode in other people, and unwarranted optimism about recent improvement is part of the pattern, not a sign of actual progress.
(Let me throw out a long shot because it is easy to investigate, and if true would potentially let your life be changed for the better. The person that I am most specifically thinking of that fit this pattern later turned out to be manic depressive. This article describes specific events that could fit as well. So..unlikely, but with a big enough potential payoff that it is worth a visit to a competent psychiatrist.)
Get a job, get on a team, write code, and stop reading about writing code!
I remember when I was a teenage hobbyist developer writing my first web apps in ASP. I learned so much, so quickly, that I also rewrote most things a few times.
I didn't try to fix that. I just naturally started learning less quickly as I grew more experienced. Now, I never threw away a whole stack like that, but then again, it's a lot easier to do that now (A lot more stacks, a lot more documentation).
This guy is in college. He's never done this work professionally. I know you're very hedged in your suggestion but IMO it's still entirely unwarranted and tainted by a bad experience you had.
I don't know why you included the bit about manic depression. If you can pick up a framework and build a full production app on your first try, then you're probably more impressive than the rest of us.
A small chance of a good outcome and no real cost in the common case is worthwhile mentioning IMO. Particularly if it is sufficiently hedged that it comes across as the honest "really random, really far out possibility that I know is probably wrong" thing that it is.
That being said the article comes off as way too much of a "Look at all teh knowledges I have" humble brag, with not enough "I severely screwed over my friends (even if I was working for free) because after 2 years I still haven't delivered..." In the real world this situation results in unemployment not a self-congratulatory pat on the back.
I'm sure he feels like he did. But he didn't. Unless he was actively lying to them along the way. Which is plausible but certainly not something I would assume about somebody.
He's in school. He's done the best he could with a hard problem. He shouldn't be hard on himself and IMO you shouldn't either.
I'll share my epiphany that I've learned from HN that PG said...if we're not embarrassed at launch time, it's too late. Being a perfectionist my self, it's a brilliant statement.
I read it as a sarcastic detailed break down of the excuses new developers use nowadays to justify their lack of discipline. Or.. am I wrong?
It is the plague of the modern age, and the real reason why hipsterism is so hateworthy.
... are you saying in my effort in sounding all serious and sincere, that I, in fact, align myself with hipster philosophy and world views?
The problem was I didn't read the last 2 sections, of which he clearly talks about what he learned. Thus I scientifically conclude this is not some weird hipster-ish ironic post of which maybe I'm the only one in the world who misread it that way.
Maybe one day someone can make a machine learning based hipster irony or post irony detection browser plugin so I don't have to think about it.
Unless you are embellishing, get checked for ADHD.
Disclaimer: I have ADHD and OCD.
What I mean is that as I search for a solution in the API docs, I stumble across other things that look interesting. Or bits of detail that further explain how this library is built. Or explain the dependence of this function on a specific language feature. It's fascinating. And ultimately, that information makes me a better coder ... but it seldom solves the immediate problem. And now I've got all these ideas for new projects. Or ideas for future features for this project. I feel focused (on obtaining my goal) but distracted.
Or maybe I'm building a new system. But to support feature F, I need this library. To serve feature Q, I need that daemon. To support that daemon, I need a database engine ... but nope, it doesn't support PostgreSQL. To support the database engine, I need a logging daemon with feature L that the bleeding edge metagammalogd doesn't offer. And why am I building all this again? At this point, I'm feeling not focused and also distracted.
Know that all types of ADHD aren't the same, and specifically that there is ADHD without the outward hyperactivity. Look up "Inattentive ADHD" - I am 30, and up until this past year I just thought that I had issues with procrastination, lack of follow-through, and was easily distracted.
Does this sound like you?
- Underperformed in school, despite being incredibly bright.
- Frequently didn't complete homework in school.
- Easily distracted.
- Shifts from one uncompleted task to another.
- Frequently skips large sections of text when reading.
- Procrastination.
- Frequently switches jobs
Please note, I'm not saying anyone has ADHD. I'm not qualified to make that assessment.
However, I'm going to make a guess and assume you aren't qualified to make that assessment either.
Getting checked for ADHD and OCD has made a big impact on my life. I didn't think I had ADHD either. I was getting checked for OCD for something unrelated to ADHD, and this came up.
What I considered a normal life, being distracted normally, etc - well, I learned it wasn't normal.
Sure, we all need somewhere to learn, but most of us do this on personal projects, at school or on low paid gigs under superiors who'll kick our asses.
I don't know many technical directors / lead developers who havn't shipped a single project and while some of you might call that "hustle" I call it lying.
However, you've missed the key point in the game - hustling. By the sound of it, you were not picking up a paycheck while doing this for 2 years. This is a major mistake. The product itself doesn't matter - if you're inexperienced the product is going to end up pretty bad, so the exact product you're building is largely irrelevant. The key is to hustle yourself into a position where someone is giving you money for you to learn. Late stage start-ups are usually perfect for this. You've wasted two years of potential income and fancy sounding positions for your CV, don't waste a third.
TL;DR Adding a feature to a product that you don't care about is harder that adding a feature to a product that you do care about.
It would be lovely if you could just walk into a meaningful project that you care about, but that's not how it works in the current system.
I started completely at 20 and not even 7 months later I was getting paid above average in Seoul to do the same thing, basically. Except I had expert help whenever I needed it in the form of coworkers.
I'd have to say that the two biggest factors contributing to this is that people like the OP probably don't know about opportunities available to them (though hard to imagine given the outlet used to express himself), and the general "5+ years of experience/ex-Googler" mentality really seem to discourage trying. Hell, I've gotten over a year of professional experience and sometimes I think I should just take an unpaid internship if I wanted to find a new job now...
These platforms seem hip and cool but they actually need extreme levels of discipline, awareness and experience to actually use them in the correct way.
I don't think the guy is a perfectionist at all. Perfectionists deliver finished working products. Perfectionism is a state of mind of not knowing when you are actually "finished finished". Don't make the mistake of thinking your inability to deliver a product is because of some perfectionism trait. It very likely isn't. It's more likely to simply be caused by incompetence.
From the psychology definition of perfectionism, there's both the version that lets you accomplish a thing well and the version that hinders you from completing something.
Anecdote: When it comes to me doing anything remotely artistic, I get so bogged down in fixing the details that I ignore the big picture. In reality, trying to perfect the details means I'm focusing on things that are going to jump out at me, but not at other people.
"Perfect is the enemy of good" is a good proverb about this.
Is there a platform for which this isn't true? Anyone doing anything novel spends most of their time doing things the wrong way.
And it's odd that you single out those platforms -- RoR is extraordinarily beginner friendly, and less than most other platforms helps you stop from shooting yourself in the foot. Node JS with express again is quite trivial. The platforms have literally nothing to do with their problem (the eager platform jumping is a symptom, not a cause), and they would be non-completionists in any other platform as well.
As this poor guy found out the hard way. Building what was presumably quite a large system inevitably turned into a sprawling mess that was hard to maintain and develop any further.
There is extreme levels of immaturity in the RoR and NodeJS communities (when it comes to the dissemination of good software engineering principles and practices) and unfortunately this often projects outward onto its users who don't know any better. Hell, it was only a few months ago the creator of RoR was poo-poo'ing the very concept of DI/IoC and therefore SRP. So it's no wonder the poor sods in that community that read his blog as though it's gospel end up producing unmaintainable heaps of crap that ends up having to be scrapped.
And remember, being a perfectionist is a prerequisite for being good at anything. If you aren't self-critical you won't improve, and no one comes out of the gate being good at anything. Obviously that's necessary but not sufficient since many people are disheartened by their early incompetence and give up before they've even really gotten started, but it's not a bad thing.
Congratulations on having this level of self-awareness, and I'm sure your future will be bright.
That said, the OP could probably benefit from planning ahead a little more. It helps to focus on core aspects of the product that are not likely to change and to anticipate things that you might want to change. At first, it may be a little hard to hold your entire project in your head at once, but once you've broken it down into a few core components, it becomes much easier to think about things going forward.
It sounds like the OP is already arriving at these realizations, so good luck to him!
The saddest paragraphs were "Time to change" and "Learning from your mistakes", where he basically says that he is doing the same thing under a different name with the same lack of results :(
Most young people are like this. You're not unusual. Difficulty focusing is pretty normal, but you do have to do something about it if you want to achieve anything.
I hate to break it to you, but the corporate world makes it worse. Now you're surrounded by unfocused, capricious, and disengaged people in a world where the worst people tend to have the most success. You need to take that for what it is: a motivating negative example, how not to live and what not to become.
When you're young, you wonder why most people never accomplish anything. Now you're getting older and seeing why. Lack of focus. Career incoherency. Bad management. Low drive. People let their time and energy and engagement get nickel-and-dimed by the world and soon there's nothing left.
You've learned a lot in 2 years. That's great! You've probably gotten more out of the past 2 years than 95% of people; but if you want to run with the elite (I'm not elite; I spend way too much time on activism, but that's another story) you have to up your game even further. Up it again. And again.
Perfectionism is something that comes to us from schooling, I believe. You work on something, then you "turn it in", and you get your one final, seemingly life-altering, piece of feedback: a letter grade or a score between 0 and 100. School also encourages risk aversion, in so far as tests ask easy questions where the average person gets 75-85% right, which means that 1 total failure (0%) counteracts 5 excellent projects or aced exams. (This is not universal; in the UK, exams are harder but 70% is an excellent score.) If I were to redesign the system, tests and projects would be very hard but 20% would be passing and 50% would be an A... but that's another rant. In the real world, that "work for months then 'turn it in'" strategy leads to demotivation, anxiety, and (as you've experienced) perfectionism. You need to find people you trust and link up with them to get constant feedback. This is why the REPL (interactive mode) of modern languages is so important; without interactivity, you don't learn anything and become disengaged.
You have to change yourself if you want to achieve anything. You're experiencing the processes that cause so many people not to achieve anything, but at least you're aware of it. You have to form better habits. Work, and sleep, and exercise, in the same hours every day. Have a principled schedule for taking breaks. Get up at 5:00 if that works for you. Exercise every day (it helps). Establish a routine because if your life is constantly full of injections and senseless change, you'll constantly be cleaning up your own spilled apple carts. Curtail (or cease) drinking.
You need to form better habits and establish a routine of getting stuff done. Just remember that each action counts for about 10, insofar as people are creatures of habit and what you do now also influences how you will behave when you are tired and falling into default activities (self-control is hard and limited and 70+ percent of your time will be in default activities, so make those better). What differentiates the true high-achievers from the rest of us is that they program themselves (often unconsciously) to have useful default activities, instead of watching TV or playing video games.
That's not to say there's anything wrong with TV and video games in moderation. I love Mad Men and Breaking Bad, and I probably play an SNES RPG (those are good because they're time-limited at about 50 hours) every year or so. You just don't want those to become your default time-filling activities. If you want to be a top-tier technologist, your default activity should be something related to technology.