@ruthlessrecursion Hi!
Breaking larger project into small sub-projects is somewhat a must. This is a well known fact. The hard part is - how to split it, it will be different in corporate environment, or in small team, or in your hobby project.
For hobby projects (this also generally counts for small teams), it is absolutely necessary that you can - at any point - build and run project seeing the game run. This is very important mainly due to one thing - visually seeing the end result all the time. It keeps your motivation on the project, and you have a chance to finish it.
This should bring you to “How to split tasks?” … at the end of each you should end up with another functional item in your project that is directly visible (for example - not for management game, but some other):
- Simple environment, i.e. terrain
- Player character and movement
- Obstacles (like tree, building)
- NPC character
- Interaction with NPC characters - dialogs
By building this and structuring in a code, you create a code base, which is essentially an engine. You may want to make it full featured engine in future (by adding tools - which are often more complex to write than whole games), although I would recommend you building a game (assuming you want to build a game, not engine).
Each of these tasks can be also split in multiple tasks (with various notes - giving you hints how to implement, throw in anything relevant when writing these up - it is likely you will change/remove/add some during the process):
- Simple environment
- Implementing World
- Adding a way how to describe world (text file for example)
- Notes: Text files contains value in each byte, representing which tile is loaded
- Implementing Tile (World is composed of Tiles)
- Rendering it with AwesomeRenderingAPI
- Loading tiles from resource files (PNG)
- Specifying tiles properties (walkable, non-walkable, etc.)
- Notes: Each tile has control file which specifies walkable/non-walkable and resource file PNG/JPG/…
- Implementing Camera
- Allow for zooming, and moving around
At the end of this task, you will have a way of defining world, and displaying it.
You can also use some Task software (like the Todoist, Wunderlist, etc. … no ads intended - there are TONS of those online and offline), to keep track of your work.
I hope this gives you the idea, how I split tasks even for small hobby projects (you can add lots of additional complexity, useful especially when working in teams, but even this, as the bare minimum project management, is quite useful … and most importantly easy to track, and fast to use).
Which brings me to what technology you want to use. And I will state right away - it doesn't matter. This is up to your decision, few examples:
- Use javascript and webgl, writing basic library for it is straight forward, and you can quickly prototype and run it in browser
- Use C++ to write windows based application, apis are your choice and might be based on target architecture (F.e. are you targeting Linux or Windows … or something else?)
- Use C# and Unity, which saves you a lot of time you would be implementing renderer, etc. … and let's you focus entirely on gameplay, additionally gives you a useful editor
- Etc.
Note: You mentioned that it is going to be management game, such games tend to have heavy user interfaces. You will have to consider this, as writing a custom UI from scratch … tends to be quite time consuming (from experience).