Software Engineering
11 Aug 2007There are many ways how to create a really complex and sophisticated system.
You may be a genius that can see all the consequences of all the design decision. You may be able to draw a diagram of the working system on the day one. You may be able to explain to each and every developer what he needs to do and he can immediately understand. You may be able to design and build a system that will work right away when turned on.
I have never met such a person. I have never heard about one. I really doubt that someone like that exists.
Or you may be an agilist. You do not need any plans, any design. You will just start right away with implementation. If your implementation will not fit, you will refactor. You may be efficient enough to not waste too much time on dead-ends of development trails. You may be agile enough to adapt to any new situation immediately so the project plans will not be affected.
I have never met such a person. I have heard lots of people claiming that, but none of them could actually live up to their promises.
I think that software engineering is not such a disruptive profession as some of "innovators" claim. I think that most of the methods and processes that we try to use in software engineering is already invented and used on most of other engineering categories. We are not that special. We have to hell a lot of learn from other engineers - especially mechanical and civil engineers.
A proper design, prototyping, reflecting prototype results back to the design, design validation, planning, phased implementation, relevant testing, deployment, maintenance ... the basics of engineering work. All of that can be learned from older engineering categories. And it is quite surprising how many young adepts of software engineering have no idea of anything of that - maybe except a small portion of the "implementation" task.