By Borifan Dabasa | Full Stack Developer & Software Engineering Student
Two years ago, I started learning web development with zero coding experience. Today, I'm a Full Stack Developer building production applications with the MERN stack. This is the roadmap I wish I had when I started.
My Story
I'm currently studying Software Engineering at Haramaya University while working as a freelance Full Stack Developer. I've built e-commerce platforms, appointment systems, and crypto trackers—all while learning on the job.
This roadmap is based on my real experience, not theory.
Phase 1: The Foundation (2-3 months)
HTML & CSS
Start here. No shortcuts.
What I learned:
- Semantic HTML5 elements
- CSS Flexbox and Grid
- Responsive design with media queries
- CSS animations and transitions
Projects I built:
- Personal portfolio website
- Landing pages
- Clone popular websites (Netflix, Spotify)
Resources:
- freeCodeCamp HTML/CSS course
- CSS Tricks for Flexbox/Grid
- MDN Web Docs (bookmark this!)
JavaScript Fundamentals
This is where it gets real.
Core concepts:
// Variables and data types
let name = "Borifan";
const age = 22;
// Functions
function greet(name) {
return `Hello, ${name}!`;
}
// Arrays and objects
const skills = ['HTML', 'CSS', 'JavaScript'];
const developer = {
name: 'Borifan',
role: 'Full Stack Developer'
};
// ES6+ features
const numbers = [1, 2, 3];
const doubled = numbers.map(n => n * 2);
// Async/Await
async function fetchData() {
const response = await fetch('api/data');
const data = await response.json();
return data;
}
What to master:
- Variables, functions, loops
- Arrays and objects
- DOM manipulation
- ES6+ features (arrow functions, destructuring, spread operator)
- Promises and async/await
- Fetch API
Projects:
- Todo list app
- Calculator
- Weather app using API
Phase 2: Frontend Framework - React (2-3 months)
React changed everything for me.
React Basics
// Component
function Welcome({ name }) {
return <h1>Hello, {name}!</h1>;
}
// State
const [count, setCount] = useState(0);
// Effect
useEffect(() => {
document.title = `Count: ${count}`;
}, [count]);
Learn in order:
- JSX syntax
- Components (functional)
- Props and state
- Hooks (useState, useEffect)
- Event handling
- Conditional rendering
- Lists and keys
- Forms
Projects I built:
- Movie search app
- E-commerce product catalog
- Blog with routing
Advanced React
// Custom hooks
function useLocalStorage(key, initialValue) {
const [value, setValue] = useState(() => {
const item = localStorage.getItem(key);
return item ? JSON.parse(item) : initialValue;
});
useEffect(() => {
localStorage.setItem(key, JSON.stringify(value));
}, [key, value]);
return [value, setValue];
}
// Context API
const ThemeContext = createContext();
function App() {
const [theme, setTheme] = useState('dark');
return (
<ThemeContext.Provider value={{ theme, setTheme }}>
<Dashboard />
</ThemeContext.Provider>
);
}
Advanced topics:
- Context API
- Custom hooks
- React Router
- Performance optimization (memo, useMemo, useCallback)
- Code splitting
Phase 3: Backend - Node.js & Express (2 months)
Time to build APIs.
Node.js Basics
// server.js
const express = require('express');
const app = express();
app.use(express.json());
app.get('/api/users', (req, res) => {
res.json({ users: [] });
});
app.listen(5000, () => {
console.log('Server running on port 5000');
});
What to learn:
- Node.js fundamentals
- Express.js framework
- RESTful API design
- Middleware
- Error handling
- Authentication (JWT)
Projects:
- User authentication API
- Blog API with CRUD operations
- File upload system
Phase 4: Database - MongoDB (1-2 months)
MongoDB with Mongoose
// User model
const userSchema = new mongoose.Schema({
name: String,
email: { type: String, unique: true },
password: String,
createdAt: { type: Date, default: Date.now }
});
const User = mongoose.model('User', userSchema);
// CRUD operations
const user = await User.create({ name, email, password });
const users = await User.find();
const user = await User.findById(id);
await User.findByIdAndUpdate(id, { name: 'New Name' });
await User.findByIdAndDelete(id);
Learn:
- MongoDB basics
- Mongoose ODM
- Schema design
- Relationships
- Aggregation
- Indexing
Phase 5: Full Stack Integration (1-2 months)
Connect everything together.
MERN Stack Architecture
Frontend (React)
↓
API Calls (Axios/Fetch)
↓
Backend (Express)
↓
Database (MongoDB)
Example: User Registration Flow
// Frontend (React)
const handleSubmit = async (e) => {
e.preventDefault();
const response = await fetch('http://localhost:5000/api/users', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ name, email, password })
});
const data = await response.json();
};
// Backend (Express)
app.post('/api/users', async (req, res) => {
const { name, email, password } = req.body;
const hashedPassword = await bcrypt.hash(password, 10);
const user = await User.create({ name, email, password: hashedPassword });
res.json({ user });
});
Projects to build:
- Todo App - Full CRUD with authentication
- Blog Platform - Posts, comments, likes
- E-commerce - Products, cart, checkout
Phase 6: Advanced Topics (Ongoing)
TypeScript
interface User {
id: string;
name: string;
email: string;
}
const getUser = async (id: string): Promise<User> => {
const response = await fetch(`/api/users/${id}`);
return response.json();
};
Next.js
- Server-side rendering
- Static site generation
- API routes
- File-based routing
Testing
// Jest test
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
// React Testing Library
render(<Button onClick={handleClick}>Click me</Button>);
fireEvent.click(screen.getByText('Click me'));
expect(handleClick).toHaveBeenCalled();
My Tech Stack Today
Frontend:
- React.js / Next.js
- TypeScript
- Tailwind CSS
- React Query
Backend:
- Node.js / Express.js
- MongoDB / Mongoose
- JWT Authentication
- RESTful APIs
Tools:
- Git & GitHub
- VS Code
- Postman
- Vercel / Netlify
Real Projects I Built
- E-Commerce Platform - Full MERN stack with cart, payments
- Blog Website - Next.js with TypeScript
- Crypto Tracker - Real-time data with Chart.js
- Appointment System - React with calendar integration
Check them out: github.com/Borifan02
Learning Resources That Helped Me
Free:
- freeCodeCamp
- The Odin Project
- MDN Web Docs
- YouTube (Traversy Media, Net Ninja)
Paid:
- Udacity (Programming Fundamentals)
- Educative (Fullstack Developer)
Tips from My Journey
- Build projects, not tutorials - I learned more from one real project than 10 tutorials
- Don't get stuck in tutorial hell - Watch, code along, then build something different
- Git from day one - Commit everything
- Deploy early - Use Vercel, Netlify, Heroku
- Read documentation - It's your best friend
- Join communities - Twitter, Discord, Reddit
- Don't compare - Everyone's journey is different
- Consistency > Intensity - Code every day, even 30 minutes
Common Mistakes I Made
- Skipping fundamentals - Went to React too fast
- Not using Git properly - Lost code multiple times
- Ignoring responsive design - Had to rebuild projects
- Not testing - Bugs in production
- Overcomplicating - Simple solutions work best
Timeline Reality Check
My actual timeline:
- Month 1-3: HTML, CSS, JavaScript
- Month 4-6: React.js
- Month 7-8: Node.js, Express
- Month 9-10: MongoDB, Full Stack projects
- Month 11-12: TypeScript, Next.js
- Ongoing: Learning and building
Your timeline might be different. That's okay.
What's Next for Me?
- GraphQL
- Docker & Kubernetes
- AWS/Cloud services
- System design
- Contributing to open source
My Advice to Beginners
Start today. Not tomorrow. Not next week. Today.
Pick one resource, follow it completely, build projects, and deploy them. That's it.
You don't need to know everything. You need to know enough to build something, then learn as you go.
Let's Connect
I'm always happy to help fellow developers:
- GitHub: @Borifan02
- LinkedIn: Borifan Dabasa
- Email: dabasaborifan@gmail.com
Questions? Drop a comment or reach out directly!
Remember: Every expert was once a beginner. The only difference is they didn't give up.
Top comments (0)