Everyone wants to work for a sexy, up and coming startup .... apparently! I've even seen people say that if your first job in tech isn't at a start up or on a new team at one of the big tech companies then your tech career is basically a bust before you got out of the gate.
Setting aside the ridiculousness of that statement I want to look at the difference between working on greenfield projects and older, more established IT estates at companies for whom tech probably isn't their primary focus. Is one better than the other?
Nearly everyone loves the first page of a new notebook, that sense of opportunity of what this book could be, the person you will become once you write your thoughts and ideas in it - there is something exciting about it. We all know after page 3 it will be full of scribbled notes from calls and reminders for tasks you need to do, but still, we hover the pen over the page just that bit longer on page one, like we're stepping out in to the first fresh snowfall of the year not wanting to ruin it.
Starting a new codebase is similar, all those ideas and possibilities. Knowing that this time you will "do it the right way" is alluring, not having decades of technical debt to slow you down is freeing.
You will get to know more of the code, you have a hand in crafting many of the main areas, and so further changes and refinements are fast because you already know the code and the patterns employed. You don't need to reference documentation all the time or go spelunking through layers of function calls because you already know the final DynamoDB document that the data you need ends up in.
Working on a greenfield project can make you feel like a coding god. You know what to do and where to do it. You deliver features quickly and you're on top of your tech debt. It's nice but short lived because all greenfield projects grow old, become complex and no one knows how it all works, not really any way.
Working on old IT estates is tedious, hard and boring. Nothing new happens and it's all just maintenance!
This misconception is what startups and agencies want you to believe because it's their best narrative to persuade you to come and work for them. At some companies it might be true, but that's not an issue inherent with older codebases but instead organisations that are set up in such a way that this is how they view their IT systems. Funnily enough a boring company that isn't really innovating will probably have boring IT projects that will feel like the above.
Companies that recognise the value in their IT department and are actively adding features and modernising their IT estate on the other hand, offer something equally fun and, I think, more challenging than greenfield projects.
- They teach you the ability to decipher how a system works without relying on knowledge you accrued from making it yourself. You become a better problem solver.
- You are forced to become comfortable woking on a system you only partially understand.
- You learn the value of tests, not because you are forced to write them but because you will loath previous developers who didn't write any for the code you now have to change.
- You will be given the chance to modernise an old system using best practices and compare new approaches to the "old ways" and see not only the benefits but also the downsides.
There is no right or wrong answer to which is better but I will say that I have seen developers come to existing IT projects, having only previously worked on greenfield projects, and flail for 6 months getting frustrated and annoyed at how slow everything feels because their expectations have been set unrealistically high from their experience to date. Most of the work with existing code bases is working out exactly what you have to change and where, rather than the change itself.
People who start their careers on old systems, adding features, fixing old bugs and generally ushering this creaky beast into more modern times don't have this painful learning curve, and when they come to a greenfield project they are delighted and appreciative of this window of time where they can move fast and break things.