April 18th, 2010 by Moti Karmona | מוטי קרמונה · No Comments
“The further a project progressed, the more accurate the estimates for the remaining effort and time became”
(Barry Boehm, “Software Engineering Economics“, 1981)
NASA also came to the same conclusion that in the beginning of the project life cycle (i.e. before gathering of requirements) estimations have in general an uncertainty of factor 4. This means that the actual duration can be 4 times or 1/4th of the first estimations…
I felt very free to add my own interpretation of the different point-of-views with cool pastel colors as a sneak-peak cool-beta-preview of my next post.
December 12th, 2009 by Moti Karmona | מוטי קרמונה · 2 Comments
This is my recommended check-list for high level design review.
*********************************************************************** *** keep it simple and make sure it answers all the requirements ***
***********************************************************************
Reverify your Requirements
Functional specification, use cases and requirements are clear and publicly documented
August 10th, 2009 by Moti Karmona | מוטי קרמונה · No Comments
Recently, I have encountered an interesting paper (2006) about Chubby – Google’s (Paxos based) distributed lock service.
I was especially amazed by the observations made on the Google engineering capabilities and mindset inside a “formal” research publication.
Although one can easily get into a cynical state of mind reading this paper… I feel that this “pragmatic view” which combines a deep architectural and algorithmic know-how with keen understanding of the social factor in software development is exactly the key to create legendary software.
Anyway, very well written – highly recommended reading…
“Our developers sometimes do not plan for high availability in the way one would wish. Often their systems start as prototypes with little load and loose availability guarantees; invariably the code has not been specially structured for use with a consensus protocol. As the service matures and gains clients, availability becomes more important; replication and primary election are then added to an existing design.”
“Developers are often unable to predict how their services will be used in the future, and how use will grow. A module written by one team may be reused a year later by another team with disastrous results … Other developers may be less aware of the cost of an RPC.”
“Despite attempts at education, our developers regularly write loops that retry indefinitely when a file is not present, or poll a file by opening it and closing it repeatedly when one might expect they would open the file just once.”
“Developers rarely consider availability. We find that our developers rarely think about failure probabilities.“
“Developers also fail to appreciate the difference between a service being up, and that service being available to their applications.“
“Unfortunately, many developers chose to crash their applications on receiving [a failover] event, thus decreasing the availability of their systems substantially”
November 21st, 2008 by Moti Karmona | מוטי קרמונה · 4 Comments
“You can always start a weekend experiment but you can never know how it will end” (Moti Karmona, 2008 ;)
I was very curios and wanted to take the GAE for a quick test drive but the Google documentation have few inaccuracies and isn’t sufficient if it is your first Python encounter so I lost three hours of precious beauty sleep and compiled this blog-post-capsule for future generations.
Help –> Software Updates –> Available Software –> Add the http://pydev.sourceforge.net/updates site –> Install it –> Restart Eclipse
Configure Eclipse to use the Python interpreter by navigating to Window –> Preferences –> PyDev –> Interpreter –> Python –> New and select the location of python.exe on your system
Create your first project
File –> New –> PyDev project and click next –> Name your project and make sure Python 2.5 is selected.
Add necessary App Engine libraries to your project | Right click your Project folder –> Properties –> PyDev – PythonPath (see image below)
Open a command prompt and navigate to your application directory.
Type appcfg.py –email=yourgmailaccount@gmail.com update src\
To publish code within Eclipse, open Run –> Run configurations and make a copy of your previous run configuration. Change the Main Module to appcfg.py, and change the argument tab to –email=yourgmailaccount@gmail.com update ”${project_loc}/src”
Your code is now live! Test it by going to http://yourapp.appspot.com
November 2nd, 2008 by Moti Karmona | מוטי קרמונה · 2 Comments
Last weekend I was wasting time on my Blog performance and all I got is 10 sec. and this lousy post.
Quick profiling with FireBug and YSlow FireFox extensions have done great wonders with my amazingly slow, not-really-that-interesting, hosted (webhost4life) WordPress blog.
October 28th, 2008 by Moti Karmona | מוטי קרמונה · 1 Comment
Yahoo have released the Y!OS (Yahoo Open Strategy) 1.0 platform.
This is a cool set of simple APIs that can give you access to everything you ever wanted in Y! but was afraid to ask for…
Yahoo! Social Platform (YSP) // The Yahoo Social Platform is a set of RESTful APIs for Profiles, Connections, Updates, Contacts and Status.
Yahoo! Query Language (YQL) // The Yahoo Query Language is a web service that functions much like SQL (see example below)
OAuth Authentication // OAuth is the authentication and authorization standard Yahoo has decided to use when giving third parties access to Yahoo user data.
Yahoo! Applications Platform (YAP) // Currently very limited and in a restricted sandbox.
________________________________
Example: How to use YQL APIs to access MyBlogLog profiles?
Simply ask for all the community members of MyBlogLog community with this YQL:
select * from mybloglog.members.find where community_id in (select id from mybloglog.community.find where name=”Karmona Pragmatic Blog”)
And once you have the IDs you can ask for my personal profile by:
select * from mybloglog.member where member_id =”2008070609482910″
Well… together with the existing BOSS API, this set of APIs is a powerful enablers to the Y! development network and I am sure some cool stuff are going to emerge from this innovative move…
Amazing!!!
________________________________
* You can have more YQL experiments using the YQL Console
** Boss Hack Day is coming to Tel-Aviv | November 6, 2008 @ Feature (!!!)
October 4th, 2008 by Moti Karmona | מוטי קרמונה · 2 Comments
When “The Moscow Cats Theater” came to New York, the Russian clown Yuri Kuklachev was interviewed: “the secret of training them is realizing that you can’t force cats to do anything [...] If the cat likes to sit you can’t force her to do anything else [...] Each cat likes to do her own trick [...] Maruska is the only one who does the handstand. I find the cat and see what they like to do and use that in the show [...] I have a cat now that loves to be in the water…”
When you go out of your way to hire the best people around than soon enough you will find yourself herding a superior, class A, hyper-developed mutant Ligers* who are much more knowledgeable than the herder (a.k.a. you)
In this environment you have to learn to simply trust your people (although this is not simple at all :), mark the vision, let them loose and only help to get rid of the stones in their way (this concept was best described as the Open Kimono** policy in Peopleware)
Well…. Managing the Delver Engineers is like Herding Legendary Ligers and you need to make a superior effort to see what these ligers “likes to do” and run fast enough to set the Vision and move the rocks out of the way.
__________________________________________
* The Liger, is a (huge) hybrid cross between a male lion and a female tiger
** Open Kimono Attitude: You take no steps to defend yourself from the people you have put in positions of trust.
By the way, The best answer I found on the origin of the term “Herding Cats” was in Google Answers
February 22nd, 2008 by Moti Karmona | מוטי קרמונה · No Comments
1st Warning: Chaotic post below
Software project are chaotic system and are highly sensitive to their initial conditions (a.k.a. the butterfly effect) and dynamics (e.g. wrong design, vague requirements, team professionalism etc.).
To master (/control) a software project you must be able to breathe (/smoke ;-) the project – inhale the chaotic butterfly movements around you and exhale with the needed adjustments or you will be crushed on the nearest project failure shore with zillions of butterfly excuses.
2nd Warning: Smoking software project is bad for you health
After a decade of software projects smoking I find myself easily doing a background-surfing on the chaotic edges of my projects like I drive my car in the same daily well known route back from work but since I am part of the same chaotic system I am trying to control, I know that my background-surfing is like forgetting my own butterfly wings.
Software project smoking isn’t a social event and can’t be easily shared but it is also one of the key factors in projects surfing – If you will not be able to share your surf experience with your team, your own butterfly wings will bring the next tsunami.
3rd Warning: Don’t practice management if you don’t like the butterflies