Organization Of Complexity: A Five Step Implementation for Freelancers

Life is complex, there are a wide variety of problems you must face in life and career, and especially so in freelancing. As a freelance programmer, for instance, you cannot simply be a one domain expert like your colleagues doing 9 to 5 jobs are.

You are usually expected to know a lot about your field apart from coding like unit-testing, deployment and devops, documentation, etc. Even apart from technical skills, you must have some expertise in marketing (creating portfolio and website/blog), writing proposals, professionally communicating with the client, handling your accounts and taxes, etc.



Sometimes, these challenges simply seem overwhelming. How do you solve them when they seem too difficult a nut to crack? A seemingly impossible problem. You must do that by breaking the big complex problem into multiple smaller ones, then abstracting, grouping and organizing them so that they make sense, then having a backup plan if something goes wrong, and then finally focusing and acting on the individual smaller problems (or delegating to someone else if you can't solve them yourself). Let's understand this in detail.

Divide and Conquer

All successful colonial invaders (and perhaps today's successful politicians) had one thing in common, they tried to break the native subjects based on caste, creed, religion, etc. Once a large population is no longer united, controlling it becomes easy and manageable. Applying this basic technique to a seemingly overwhelming problem statement, you can break it into manageable chunks called milestones and tasks.

For example, your client's problem statement is that they want a web application developed. Dividing this problem statement into manageable milestones, you get:

Design Phase: Understand the detailed workflow of the app from client, how many users are expected to be online, do they need only web or android/iOS versions too, what are their preferences for back-end database and programming language/framework, front end Javascript framework, is it a single page app, etc.

Development Phase: In this phase, you'll write code for the app. If you are a back-end expert and cannot handle HTML/CSS/Bootstrap, you can delegate this task to another freelancer (here is where the importance of delegation and outsourcing comes).

Deployment and Integration: Again, delegate the devops part if you can't handle AWS/EC2/Lambda/RDS intricacies yourself. Alternatively, change the problem statement (contract with the client), so that you'll be providing source code only.

Testing and Maintenance: Focus on the testing and bug fixing part, discuss the challenges beforehand with the client, who'll be doing the UAT (User Acceptance Testing), for example.

Abstraction and Grouping

Organize your work so that things needed for each milestone or phase are arranged in proper folder structure on your computer or cloud drive. This is how I usually organize my work folder for each client:

.....CLIENT_NAME/PROJECT_NAME
..........docs
...............design
...............testing
...............screenshots
...............deploy.txt
..........src
...............app.py
 ..............db.sqlite3
................gitignore
...............static
....................index.html
....................base.html

Stick to one pattern and follow it for each project. Following this habit will make it very easy for you to organize and manage the intricate details for each project, trust me! The human mind likes organization and pattern, it hates chaos and disarray. You'll be doing your mind and yourself a great favor by instilling the habit of organizing within you.

Having a Plan-B

Once you've broken the problem statement into manageable chunks or milestones, you must analyze them carefully before acting, identify risk areas and create backup plans for them. What if you delegate a task to another freelancer and they don't complete in time? What if the feature X you are about to code requires some third-party library or API which you don't know how to use? What if there are deployment issues or performance issues? Identify these things beforehand and the risk associated with them, note them in an excel sheet called "plan-b.xls" and place it in the documents folder for each project.

Focus and Action 

Once  you break a large problem into smaller milestones, it then becomes easier to focus and act on them. If not, then break the milestones further into a chunk of tasks.

Delegation and Outsourcing

If the task is still to complex or difficult (or maybe it requires a different skill or specialized knowledge which you don't possess), then delegate it to someone else. Find a freelancer or Fiverr whom you can subcontract part of the project, or somebody offline in your work circle.

Comments