![]() |
| SAS Special Forces WWII (Africa) |
Let me tell you what price I paid for my way of life.
![]() |
| SAS Special Forces WWII (Africa) |
The eternal truth to software development is its inability to produce any meaningful systems without a coordinated effort from a diverse team of individuals, lots of disparate activities ranging from design to development and quality assurance and finally with the same effort applied to the maintenance and operations of a running system. From the deployment of patches and extensions, to the cleanup and data hygiene of databases to the scaling of the system and hardware and software maintenance efforts.
As much time and effort is spent in the art of software development, often not much effort is spent during the operations phase of a software project.
A rule I’ve often observed in many many projects I’ve been part off is the linear degradation in the effort of maintaining all the scaffolding and activities which are not directly related to coding of a software project. Thus enabled entropy degrades the product and seeps into its operations lifecycle resulting in emotional and business drawbacks for both the organization and the stakeholders included in the project.
Should we accept this? Should we accept a system of development with diminishing software engineering efforts , should we accept the fallibility of people to care and work at top quartile engineering capacity?
I’ve seen that any significant software system, shop and development environment needs guardians in the form of an engineering educated project manager and a strong cadre of technical leaders which have the authority and will to enact and drive and force a strong commitment to all software engineering scaffolding practices which combat the intrinsic entropy found in all human endeavors, especially software development with its heavy intellectual burden, high abstract concepts and emotional stresses.
A common image of software developers is of introverted emotionally challenged people. Truth be told I’ve worked with quite a few of them in my time. Thus a surprising aspect of our live is the emotional toll software development takes from each of us which is directly linked to the quality of work we do and the state of the system.
Human emotions, feelings and states directly transfer to the work we do. The pain of working with highly abstract concepts, what in truth software development is, is the primary source of all the bad decisions, all the accumulated technical depts., all unsolved problems and defects a system has.
In order to ensure a proper functioning of a system and a team special need needs to be put in and placed under constant guardianship in order to focus on emotional and mental health of the team working under such adverse, but normal conditions.
As software engineers our life are subject to forces which are not entirely in our control. The chief are health, family and politics. I will start from the latter and go the former, discussing how a software engineer can mitigate some of their ill effects on her life and career.
Politics is the art of the achievable, of getting things done. I’ve listened to an audio book version of the ‘Prince"’ by my namesake Nicollo Machiavelli. While some may disagree with its context or rebuff it in its entirety on moral grounds alone, I generally find its context true and suitable to any endeavor where you have a hierarchy of people working in environment with limited resources, or any environment where you can find humans. The truth is that in the base of the human nature lies the instinct of self preservation, which is often achieved and perceived to originate from ones advancement above her station in respect to the domination and control her peers. When working in any organization there will always be personal goals, issues, treats originating from people working around you, above you and bellow you.
‘I just want to do my work, and be done”, some may say. And you are obviously right in that life philosophy, but given the fact that out there are people who will benefit by inflicting or just by you incurring a loss of some kind. Thus a wise person should strive to position him self in a prepared state, watchful about what is going on around him, about the goals and positions of the people in his circle. He should align him self with the people who have ambitions in alignment with his own, make useful and not a threat to people above his station and respected and not an obvious impediment to people bellow his station. A wise person would also be aware that each state is only temporary and thus not permanent and that person will always need to be on the lookout for the next situation and have always a backup plan when all things start to fall apart.
In short going to work nine to five and forgetting about work afterward is not a really good strategy any more.
The second ill which may befall a software engineer is family. I’m a family man, my family is my sanctuary, my church and holy ground. I short my family is my life. But often the work we do puts us across the needs and wants of our family members. Our spouses, our fathers and mothers, out girlfriends. This is the truth.
If you read any book about people, or software processes or any topic related the the culture of software engineering you are going to pass by references to “Death march “ projects, long hours and weekends spent working, broken projects and divorces which resulted from those activities. The pressures and the time, of the time, we spend working maniacally in order to reach our deadlines reflect negatively on the needs and goals of those around us. No amount of money or bonuses is going to mitigate that. Maybe you live on a farm and regardless of your work you must spend time working on the family estate (new a guy who had a problem like that) or your wife is fed up being all alone with the children while you do whatever you do. And then meeting your business commitments and your family commitments is going to get really though, and your morale and your performance is going to drop and your private life is going, well down under.
What can a savvy engineer do than? First, you can’t please everybody. You have a limited resource, your time, and two opposing forces. What I’ve found out is that you need to be open at the beginning to both parties about what you can do and what you can’t do. And then be prepared to take blows. Or marry a wife who will not mind you being around so much. Or find a nine to five job.
The third and most important is your health. Your mental and physical health is the most important assent you are having in your career as a software developer. In order to achieve the level of performance and excellence you are able and required to produce you must be mentally and physically fit. Thus you must always leave room for physical exercise and strive to conserve a positive outlook to every situation and prospect. I can’t remember how many time those two thins helped me, and I can remember oh so well how many time one or the other failed me.
Experience is never taught, only learned by doing. Thus read and watch what others have done and experienced. A good documentary I watched five years go showed a year of frenzied development of a team of engineers at Netscape developing the first version the Firefox open source browser. That is a good example of what kind of life we lead.
But all is not dark, and all is not done, for we are human and we make mistake but to be human is to be able to learn and change, to adapt and improve thus we will make our lives better trough knowledge, spiritual advancement and physical toil.
In the begging there was the command line, and it was good. Then came the user interface, the mouse and expediency of ease of use. The word was “Don’t let me think” and thus the web was begotten.
And the cometh forth a beast of many heads, or many releases which swarmed into one version, and Google Chrome rose into the world and brought the command line back into the fold.
At first it was the ease of search, ease of address typing, moving and blurring the difference of an url and a query. Now, it was the turn of the information and the knowledge Google brought about your needs, your work, your life. And thus the time of search cometh to the world and the word was good and the masses were fed by the wine of information and food of quick results.
And the devil of engineering said “It shall not be enough, what was before shall come again, the circle of technology and innovation will turn again bringing what was before into the new and bright” and developers brought search to their applications and then it was not enough to have search but commands typed after the url came as orders of the divine and users could use the shell as the address bar and the web page as the console.
Thus in the end there was the command line. And is it was cometh again. Technology turns, what was old becomes anew, rediscovered, dreamed again.
I' am student of technology, servant of engineering and topologist of software. During my travels trough countless projects, books, presentations, frameworks, languages, databases spanning decades now I remember things which once were during the first books I’ve read at the end of the eighties and the nineties and the stuff I read and do now, and often I see old ideas and technologies rediscovered and re-implemented in new spaces.
I’ve read a book about the basics of computer and operating system architectures, how hardware and memory functions and how thing communicate and stood amazed how the same solutions and patterns are copied trough the architectures I’ve done and those I’ve dreamed.
I came to see this as truth about our loved profession. Everything which once was will come again, thus making the study of old systems, old patterns crucial for the future of our advancement. The critical thing which needs to be adopted as practice in our companies and universities and training grounds, and which is known to all old hands who survived several decades of shifting technologies and trend is that regardless that a technology is not used and more, or is redundant that there are core lessons and practices which will prove useful in the problem spaces of now and tomorrow.
![]() |
| The group |
As I wait for my one hundred twenty projects long solution to load I pray the Lord for my soul to keep.
As I dream of complex code, loops, functions and classes, patterns and database I reach for Hermes the god Alchemist and inventors in my hour of need.
I no longer can reach the dream of perfect machinery
I no longer can feel the systems beat
It is one long chain of stack overflow, exceptions and performance pits
No tests to speak of, not builds to rely on
Just one long, long evening of darkness and despair of enterprise code ready to be released
It is time for me to step down, to reach my bottommost level and open my snail farm on a far away island
Is it is not that the future that awaits us all?
Hermes doesn't respond
My soul is mine to keep
The solution is loaded , all one hundred and twenty projects long
The code is green and blue and yellow and red
I start pounding my keyboard
I start building my code
It takes a moment for the grid to pop up
For the exception to raise I fix the problem
Release my code I go home happy, ready for tomorrow to do it all again.
In software development as a culture there are multiple personal and organizational styles of development, process and project management.
What happens when a person , an engineer, switches from an organization which favors one style to an organization which favors another?
Usually there are two very negative responses which just popup continuously:
In my experience you can expect them from senior engineers who recently switched from one culture to the next. I’ve always waited with apprehension a new hire to see if she is going to throw a ruckus and put everything up and down or is she going to integrate into the process and contribute normally to its advancement.
I’ve seen people shockingly negating the new mindset and creating grief to everybody around them until they either accept the new state or leave. Of course I’ve seen people who continued to push their style onto others until it infiltrated certain parts of the project (have you ever heard bout this : “Hey why is this code in a different style then the rest of the application, don’t you guys have an architecture?” and the response “Yeah, that was Ivan he is a bit strong headed about some things, can’t do nothing about that.) and created a mess which just increased the maintenance cost of the project. That is not really good.
I’m a long time listener of the Manager and Career Tools podcast. One of the podcast I’ve listened to in the last few months is about your first six months in new job. The core idea was “do not make waves in the first six months”.
We are all engineers here, we want to improve things make them better. Something's in the new project, new organization are wrong or not optimal and can be corrected. But some aren’t. How can somebody figure out the difference?
So many times I’ve participated or seen arguments of a technical solution which just boiled down to individual preferences. Both solutions fitted the problem well. And then escalated into flame wars.
What I’ve learned is to pause and think: “is this a real problem, or just not my preference”.
Usually people are more receptive to solutions how to solve a problem then they are to changes to their preferred style. People do not want needless change, we all want our peace and quiet. We don’t want to pick a new style, we want them to use our style for better and worse.
A funny cartoon I've created about the problem:
Space coders - the enum battle by Nikola Stjelja on GoAnimateWhat is a technical lead?
In my opinion a technical lead is a person who is senior enough and has the required set of skills that can manage the technical aspect of implementing a complete software product or just a part by managing the technical aspect of its development for a small team of up to five people.
The principal focus of a technical lead is the correct technical implementation of a set of requirements by her and her team.
How do I become a technical lead?
In my experience technical leads (or whatever name they have) share the following characteristics:
In short you need to have all those skills and experience to make it to a technical lead level. But that is not enough. To be successful as a Technical lead you need implicit backing from the organizational management structure. A Technical lead is responsible for the technical aspect of the product being developer and without a proper and implicit organization backing he cannot achieve her goal because technical excellence and soft skills are not enough to technically lead people.
On aspect of the technical lead job is to be the arbiter of any technical decision. In short words if there is any doubt what technical solution is proper for a given problem the duty of the technical lead is to accept upon himself the responsibility of the final decision.
What does a technical lead do?
A technical lead has several areas of responsibility. He is is both an engineer and a operational level manager and thus his work covers both spectrums:
OF the entire list the following two areas of responsibility are important:
The technical lead must accept and develop the most important and critical part of any project. And he also must manage the implementation of all technical tasks related to the product being build.