How we here at Bytecraft see the software development, our craft - Part 1.
Delivering working and robust software is non-trivial in a typical software project setting. To better understand why, we need to look at the bigger picture.
There are various different
- activities: requirements, design, testing, etc;
- paradigms: OO, FP, etc;
- models: agile, waterfall, etc;
- frameworks: Scrum, Kanban, etc;
- methodologies: DevOps, XP, etc;
- disciplines: documentation, project management, UX, etc;
- practices: CI, DDD, TDD, etc;
- tools: compilers, IDEs, modeling, etc;
related to software development . All are projected over software development life cycle with varying emphasis. Understanding what's effective or not in any given situation requires a vast amount of expertise and experience and are highly context-sensitive.
Every software has a life cycle: beginning and end. What happens between can vary a lot.
DevOps provides a nice way to capture various phases and aspects in typical modern software project. One way to describe devops is Emily Freeman's model  which has roles and cross-cutting "-ilities" for quality attributes.
This neatly captures the complexity and amount of variables in modern projects. How one decision in one area might impact others? And how those decisions will affect the project after several years? Again, it requires expertise and experience to make decisions that maximize the value and minimize the cost.
Fifty-thousand foot view
If you look everything mentioned earlier, you should be able to grasp the comprehensiveness of software development.
We, as developers, have critical role in each and every of those aspects. Not that we need to be experts on each, but yet we have tremendous power affecting all of them. Inconsequential or not.
This is not to say one needs to be "jack of all trades, master of none" but rather give a glimpse of what one should be aware of.
Modern software projects are complex, requiring wisdom and skills to keep constantly delivering software that is valuable, robust and easily modifiable.
In the next part, we'll focus on essential crafter skills.