2014. március 1., szombat

Primary objectives

LinkedIn
Software Architects and Enterprise Architects Group
How would you describe a well-architected system?



@Edward - thank you for the details. I was quite sure that behind the emphasis on ROI, you have a serious technical background which is essential to properly estimate it. I am also sure that your insights and objective analysis do help in making the long postponed hard decisions, and you can sell them to the management.

I never got close to big business like you. I am an obsessed programmer and analyst, and I have weird ideas about programming, life, money, etc. - that always stopped me in selling myself. My favorite task is (and they find me all the time) understanding new areas, refactor existing solutions, and/or build complex systems from unclear requirements. I know how huge difference can be between two systems doing the same thing: one that answers all current questions and another with open structure that allows asking and efficiently answering new ones.

I spent all my time searching for the absolute minimum code to solve the same task, at various areas (from data mining, telco, to government data management systems, etc.), in different languages. I also spend 1.5 years "at home", refining my concepts about programming. Today I am able to forget about the actual task and focus on the structure instead; I can feel when I must stop before writing codes that I will throw away in months.

I always have to face with the situation that somebody important does not like what I do - but I am open to discussions and do my best to explain my reasons. I am not a manager, I don't make business decisions and I work for the money they give me. My job is to design and present the best architecture I can, and fight for it as long as I can - and then accept their decision that also includes the business limitations.

This is why I work today for a big company as internal developer: they have more patience for a Don Quixote like me. My motto is: "I know that this is not what you asked. This is what you need, but thought it is not possible." :-)
I do my best to prove it.

@Lorand - you can do a lot things but first you need to have sponsors that belief you can help them, and profitability was the thing I used. As a result I had my sponsors and I got to do a lot of fun system initiating things; most don't get that opportunity. 

I also was the CEO of 2 unfunded startups, each lasting about a year. We merged in a AI productivity focused tool that could generate the same rules in 4 different programming languages (a friend developed it) and were able to create foundation insurance (1st) and security (2nd) products in an amazingly short time. We had a lot of participants but no money to sell the products, When the effort of keeping the company going (in the government eyes) got be too much, we quit the self funding route. But I did learn a lot about AI/Expert Systems or whatever you call them.

@Edward - or accept that no one shares your faith in a single project that lasts for 20 years (literally), because that much time is required to do all the mistakes, learn all the things that are essential to make it work. So you become your own sponsor: work for lower amount of money (or just nothing, if you can afford it for a while), in an environment where you can make time for yourself to go ahead. And shamelessly fail on several projects, only for the experience. Not a ROI-friendly approach, nor a dream for wealth improvement, but what else can you do in a system where personal experience gain is simply not represented (not translated to money)?
[ My only objection to your ROI-first approach here is that we have to go this depth to reveal that you do have exceptional technical/management experience for building your ROI analysis! (sorry, I have not checked the whole conversation) This is true to you, but according to my experience, almost none of your readers, including me. ]

Then, at certain point of time, you step out and say: "you gave me a task, and I am in delay with it - but I see your whole environment, and I spent 90% of my time on solving the root cause that initiated the original request." At this point the key factor is: what can you put on the table? In my case, this is my Holy Grail, consciously tailored to the current environment's needs and resources. I hope it will be enough :-)

To the case you mentioned: source code is merely a serialized form of your concepts; if you can design the concept properly, the language is just another text template (I had a short experiment with a framework that generated half of its codebase). You must be absolutely sure what kind of code you should generate, and exactly why that part?

My favorite example are the click-and-drag GUI builders that generate code for different GUI frameworks, and they are proud of it!!! OMG...
They don't even realize that they build an object structure, then serialize it to source code, then run that source to build up the same data structure again runtime. Yeah, you can edit the code - but then how to separate the generated part from your logic? Complex questions, hard work again - on a fundamentally wrong question. They seem to forget why XUL / XAML / GWT UIBinder / .rc files in the golden ages / etc were created, and what that means. Epic failure.