Έχεις την ιδέα, αντί να την καταστρέψεις, κάντην πράξη!

 

Ζούμε στην εποχή της τεχνολογίας και των εξελίξεων. Λίγο πολύ όλοι μας έχουμε ακούσει διάφορες ιδέες που έγιναν επιτυχημένες επιχειρήσεις ξεκινώντας απο το απόλυτο μηδέν. Η διαδικασία φαντάζει απλή. Σκέφτεσαι μια καλή ιδέα, πληρώνεις 1-2 ή και 3 προγραμματιστές, τους κλείνεις σε ένα δωμάτιο και σε συγκεκριμένο χρονικό διάστημα έχεις έτοιμο το προϊόν. Δυστυχώς όμως δεν είναι έτσι τα πράγματα. Η πραγματικότητα είναι ιδιαίτερα σκληρή και το λέω αυτό με πλήρη επιείκεια αλλά και γνώση.

Έχει τύχει αρκετές φορές να ακούσω ιστορίες επαγγελματιών οι οποίοι χωρίς να έχουν καμία επαφή με την ανάπτυξη λογισμικού, κατασπατάλησαν χρήματα για να δημιουργήσουν μια εφαρμογή. Αναρωτιόντουσαν και ακόμα αναρωτιούνται τί ήταν αυτό που τους οδήγησε στην αποτυχία. Παρακάτω θα σας παραθέσω ορισμένους απο τους πιο συχνούς παράγοντες της αποτυχίας όσον αφορά την ανάπτυξη του λογισμικού και οχι ως προς το marketing. Σκοπός μου δεν είναι να αποθαρρύνω τον κόσμο ως προς την εμπλοκή τους με τον κόσμο της ανάπτυξης λογισμικού, αλλά να βοηθήσω ώστε να ελαχιστοποιηθούν οι πιθανότητες αποτυχίας.

Η ομάδα

Το κυριότερο συστατικό της επιτυχίας είναι μια καλά καταρτισμένη ομάδα αποτελούμενη απο συνεργάσιμους ανθρώπους. Αυτό απο μόνο του αποτελεί τροχοπέδη καθώς στην αγορά εργασίας οι καταρτισμένοι προγραμματιστές είναι περιζήτητοι. Πράγμα που σημαίνει οτι υπάρχουν δύο επιλογές. Είτε θα απασχοληθούν προγραμματιστές καταρτισμένοι που αν βρεθούν, θα  χρυσοπληρωθούν, είτε θα απασχολήθούν νέοι προγραμματιστές. Στην πρώτη περίπτωση το μπάτζετ σας θα εκτοξευτεί στα ύψη, ενώ στην δεύτερη το αποτέλεσμα θα είναι αμφιβόλλου ποιότητος. Με το “αμφιβόλλου ποιότητος” θα δούμε παρακάτω τί εννοώ.

Το κυριότερο ερώτημα όμως στη συγκεκριμένη περίπτωση, είναι εαν ο επίδοξος επιχειρηματίας μπορεί να εκτιμήσει το επίπεδο των γνώσεων των προγραμματιστών που θα απασχολήσει. Η συντρηπτική πλειοψηφία θεωρεί πως οι φτηνοί προγραμματιστές συμφέρουν περισσότερο, συνεπώς το πρώτο μεγάλο λάθος ήδη έχει γίνει.

Πάμε τώρα στο επόμενο βήμα, άντε και στήθηκε η ομάδα, θα είναι ικανή να συνεργαστεί αποτελεσματικά; Ποιός θα ορίζει τα τεχνικά χαρακτηριστικά και τα standards που θα πρέπει να ισχύουν κατά την ανάπτυξη του λογισμικού; Τα ερωτήματα που προκύπτουν είναι πολλά. Το στήσιμο της ομάδας είναι ο σημαντικότερος παράγοντας της επιτυχίας, αλλά όμως είναι και ένας πολύ σημαντικός πονοκέφαλος μέχρι να αρχίσει να λειτουργεί.

 

One man show

Υπάρχει μια μερίδα επιχειρηματιών που θεωρούν οτι με έναν προγραμματιστή (ως συνήθως φτηνό ή πιτσιρικά) μπορεί να γίνει το όνειρό τους πραγματικότητα. Οι συγκεκριμένοι ήδη αγγίζουν τα όρια της επιστημονικής φαντασίας. Οι λόγοι της αποτυχίας ποικίλουν, όπως για παράδειγμα κακό time management, τεχνική ανεπάρκεια, ελλειπής εμπειρία ανάπτυξης μεγάλων projects, ελλειπούς ή ανύπαρκτης επίβλεψης και πολλά άλλα. Το αποτέλεσμα είναι τα projects στη συντρηπτική τους πλειοψηφία να οδηγούνται εκτός χρόνοδιαγράμματος (εαν υπάρχει!) και εκτός μπάτζετ. Στη συνέχεια η ιστορία είναι γνωστή: Ο προγραμματιστής ζητάει περισσότερα χρήματα για να συνεχίσει, ενώ ο επίδοξος επιχειρηματίας βρίσκεται στο δείλημμα, να τα δώσει τα χρήματα ή να το παρατήσει το project. Ως συνήθως τα δίνουν για να μην πάνε χαμένα τα χρήματα που ήδη έχουν δωθεί. Εαν όλα πάνε καλά, η παράδωση του έργου πάει στην καλύτερη περίπτωση επί 3 ως προς τον χρόνο υλοποίησης αλλά και ως προς το μπάτζετ. Εαν π.χ. συμφωνήθηκε το project να παραδωθεί σε 6 μήνες για 5000 ευρώ, στην πραγματικότητα θα παραδωθεί σε 1,5 χρόνο για 15.000 ευρώ. Μιλάμε για απόκλιση οχι αστεία και δυστυχώς αυτό δεν είναι η εξαίρεση, αλλά ο κανόνας.

Η επόμενη συνήθης σκέψη του επίδοξου επιχειρηματία, είναι να το δώσει το project να το συνεχίσει άλλος προγραμματιστής. Εδώ γίνονται οι μεγαλύτερες παρανοήσεις γιατί πολύ απλά δεν υπάρχει περίπτωση ένα μεγάλο έργο να συνεχιστεί απο άλλον προγραμματιστή. Οι λόγοι είναι πολλοί και κυρίως τεχνικοί. Δηλαδή, αυτός που θα το συνεχίσει θα βρίσκεται σε καλύτερο επίπεδο γνώσεων ή σε χειρότερο; Εαν είναι σε καλύτερο, τότε δεν θα δεχθεί να ασχοληθεί με κώδικα κακογραμμένο. Εαν απο την άλλη είναι σε χειρότερο επίπεδο, τότε δύσκολα θα βγάλει άκρη με τον κώδικα του προκατόχου του. Ένας άλλος λόγος έχει να κάνει με τη δομή του κώδικα (εαν υπάρχει!), ή εαν επικρατεί το χάος. Εαν επικρατεί το χάος, τότε είναι πιο συμφέρον να ξανα γραφτεί το project απο την αρχή, παρά να γίνουν μπαλώματα που στο τέλος θα οδηγηθεί το όλο εγχείρημα σε αδιέξοδο.

Συνεπώς, στην περίπτωση του one man show, τον προγραμματιστή σας τον παντρεύεστε. Δεν πρέπει σε καμιά περίπτωση να σας φύγει ή να πάθει κάτι. Γιατί αν τον χάσετε, πολύ απλά χάνετε και το project σας.

 

Ο κύκλος ανάπτυξης

Όταν μιλάμε για ανάπτυξη μεγάλων projects, το ιδανικότερο θα ήταν να εμπλακούν εξειδικευμένοι επαγγελματίες (προγραμματιστές, σχεδιαστές, μηχανικοί, QA κλπ.). Εξειδικευμένοι επαγγελματίες σημαίνει οτι ήδη μιλάμε για πολύ μεγάλα μπάτζετς. Αυτό το σενάριο παίζει συνήθως σε μεγάλες εταιρείες πληροφορικής που διαθέτουν το ανθρώπινο δυναμικό αλλά και το απαραίτητο μπάτζετ. Ακόμα και κάτω απο αυτές τις συνθήκες, δεν σημαίνει οτι το project θα έχει αίσιο τέλος, αλλά τουλάχιστον ελαχιστοποιούνται οι πιθανότητες αποτυχίας.

Η ανάπτυξη λογισμικού προϋποθέτει συγκεκριμένα standards τόσο ως προς την συνεργασία των προγραμματιστών, όσο και κατά την ανάπτυξη του λόγισμικού. Αυτό βοηθά στην καλύτερη διαχείριση του χρόνου υλοποίησης, των οικονομικών πόρων, αλλά και την ποιότητα του λογισμικού. Ποιοτικό λογισμικό είναι το σωστά δομημένο ως προς την αρχιτεκτονική του, αλλά και τεχνικά ως προς τον υλοποιημένο κώδικα.

Απο εκεί και πέρα η ομάδα πρέπει να συντονίζεται με τέτοιο τρόπο ώστε να προχωράει η υλοποίηση βάσει συγκεκριμένων χρονοδιαγραμμάτων. Στη συνέχεια το λογισμικό που αναπτύσσεται θα πρέπει να περνάει απο τεστ ώστε να εξασφαλίζεται η συνοχή και η αξιοπιστία του υπό ανάπτυξη λογισμικού. Αυτή η διαδικασία είναι επαναλαμβανόμενη καθώς ανά πάσα στιγμή αλλάζοντας ένα κομμάτι κώδικα, μπορεί να έχει αντίκτυπο σε άλλα σημεία που δεν είχαμε προνοήσει οτι θα επηρεάζονταν. Συνεπώς, λογισμικό που αναπτύσσεται και δεν τεστάρεται συνεχώς, τότε υπάρχει σοβαρό πρόβλημα.

Εαν το λογισμικό αναπτύσσεται απο έναν προγραμματιστή, τότε όλα αφήνονται στη δική του κρίση. Το κακό στη συγκεκριμένη περίπτωση είναι οτι δεν μπορείτε να γνωρίζετε κατά πόσο το λογισμικό που πληρώνετε, αναπτύσσεται με συγκεκριμένα standards.

 

Συντήρηση

Το λογισμικό είναι ένας ζωντανός οργανισμός. Χρειάζεται τακτική συντήρηση και συνεχή βελτίωση ώστε να λειτουργεί σωστά. Όταν ένα λογισμικό δεν συντηρείται, τότε αρχίζουν και εμφανίζονται τα πρώτα προβλήματα. Για παράδειγμα προβλήματα ασυμβατότητας. Όταν αναβαθμίζουμε το Λειτουργικό Σύστημα, ή τα υποσυστήματα που ενδεχομένως να χρησιμοποιεί το λογισμικό μας με την πάροδο του χρόνου πραγματοποιούνται αλλαγές σε αυτά. Σε ένα ασυντήρητο λογισμικό αυτές οι αλλαγές δεν θα γίνουν ποτέ με αποτέλεσμα το λογισμικό μας να αρχίσει να υπολειτουργεί.Σε αυτή την περίπτωση το παιχνίδι έχει χαθεί καθώς για να βρεις τον προγραμματιστή που ανέπτυξε το συγκεκριμένο λογισμικό και να ξανά ασχοληθεί με αυτό μετά απο κάποια χρόνια είναι δύσκολο. Είναι δύσκολο γιατί θα πρέπει να ξανά θυμηθεί τον τρόπο που το ανέπτυξε. Συνεπώς αυτό μεταφράζεται σε χάσιμο χρόνου. Ακόμα όμως και αν δεχθεί, τότε το χάσιμο χρόνου που θα έχει για να ξανα θυμηθεί τον κώδικά του θα πρέπει να τον πληρωθεί. Συνεπώς, οι πιθανότητες να αναβαθμιστεί το λογισμικό σχεδόν εκμηδενίζονται. Δεν αναφέρομαι στην περίπτωση να αναλάβει άλλος προγραμματιστής να συνεχίσει το project για τους λόγους που ήδη προανέφερα.

Ένας ακόμα σοβαρός παράγοντας  για την τακτική συντήρηση του λογισμικού είναι η ασφάλεια. Χρειάζεται διαρκής παρακολούθηση και βελτίωση του κώδικα ώστε να ελαχιστοποιούμε τις πιθανότητες έκθεσης του λογισμικού μας σε κενά ασφαλείας. Ένα ενδεχόμενο πρόβλημα ασφαλείας θα ήταν καταστροφικό για την πορεία του project.

 

Διαρκής ανάπτυξη

Πολλοί πιστεύουν οτι το λογισμικό μετά την ολοκλήρωσή του σταματάει η ανάπτυξή του, πληρώνονται οι προγραμματιστές και ο καθένας τραβάει το δρόμο του. Δυστυχώς και εδώ τα πράγματα δεν είναι έτσι. Το λογισμικό όπως ήδη ανέφερα, είναι ένας ζωντανός οργανισμός ο οποίος πρέπει να εξελίσσεται αλλά και να βελτιώνεται στα σημεία που εντοπίζονται προβλήματα. Συνεχόμενη ανάπτυξη σημαίνει προσθήκη περισσότερων λειτουργιών, τεχνική βελτίωση, καλύτερη ασφάλεια, με αποτέλεσμα να έχετε ένα ανταγωνιστικό προϊόν.

Επίσης, με την διαρκή ανάπτυξη πετυχαίνουμε τη συνοχή της ομάδας, αλλά το σημαντικότερο είναι οτι εξασφαλίζουμε τη συνέχεια του project. Εαν κάποιο μέλλος της ομάδας αποχωρήσει, τότε μπορεί να αντικατασταθεί απο νεότερο μέλλος τον οποίο θα τον βοηθήσουνε οι υπόλοιποι να εγκλιματιστεί. Σε αντίθετη περίπτωση, εαν σταματήσει η ανάπτυξη του project, τότε χάνεται η ομάδα και πολύ δύσκολα θα επανέλθει για τα μερεμέτια. Ακόμα δυσκολότερα θα είναι η σύσταση νέας ομάδας η οποία θα αναλάμβανε να συνεχίσει το project απο το σημείο που το άφησε η προηγούμενη ομάδα.

 

Υπάρχει λύση στον ορίζοντα;

Πάντα κάτι υπάρχει. Ας δούμε τις λύσεις ανά περίπτωση. Έστω οτι υπάρχει επιχειρηματίας που θέλει μια συγκεκριμένη λύση ανάπτυξης λογισμικού για την επιχείρησή του ή τη δημιουργία ενός project με συγκεκριμένες προδιαγραφές με σκοπό να το πουλήσει. Σε αυτή την περίπτωση υπάρχει το λεγόμενο outsourcing. Το outsourcing είναι μια υπηρεσία η οποία παρέχεται απο εταιρείες ανάπτυξης λογισμικού οι οποίοι γράφουν κώδικα για εσάς. Εσείς δεν πρόκειται να αγχωθείτε ούτε για την σύσταση της ομάδας, ούτε για τη συνέχιση του project, καθώς αποκλειστικά υπεύθυνη για αυτό είναι η εταιρεία που παρέχει το outsourcing. Κοινώς, χρησιμοποιείτε τους προγραμματιστές, αναλυτές, σχεδιαστές, μηχανικούς κλπ. της εταιρείας outsourcing για το project σας, και αυτοί σας παραδίδουν μια συμπαγής και επαγγελματική λύση. Σαφώς το κόστος είναι υψηλό σε σύγκριση με κάποιον πιτσιρικά προγραμματιστή ή κάποιον που “κατέχει”.  Αλλά σίγουρα το προϊόν που θα λάβετε θα είναι ποιοτικό. Εαν θέλετε να επενδύσετε σε μια καλή ιδέα που έχετε, τότε προχωρήστε στην λύση του outsourcing. Διαφορετικά εαν προσανατολιστείτε σε φθηνές λύσεις, τότε κατά 99.9% θα πετάξετε τα χρήματά σας.

Πολλοί θεωρούν οτι εαν προχωρήσουν στην λύση του outsourcing, δεν θα έχουν τον έλεγχο και πως θα εξαρτιώνται απο την εταιρία του outsourcing. Αυτό είναι μέγα λάθος. Στη συμφωνία μπορείτε να επισημάνετε οτι επιθυμείτε αναλυτικό documentation κατά την ανάπτυξη ώστε μελλοντικά να αναλάβετε εσείς in-house τη συνέχιση του project σας.

Οι εταιρείες outsourcing αναπτύσσουν το λογισμικό με συγκεκριμένα standards τα οποία μπορούν να σας διευκολύνουν σημαντικά στη συνέχιση του project από δικούς σας υπαλλήλους στην εταιρεία σας.

 

Ανάπτυξη λογισμικού = Ακριβό Σπορ

Εαν έχετε μια ιδέα και θέλετε να την υλοποιήσετε, τότε να είστε έτοιμοι να την υποστηρίξετε οικονομικά. Στην ανάπτυξη λογισμικού δεν χωράνε τσιγγουνιές! Το λέω αυτό γιατί η τσιγγουνιά θα σας στοιχίσει πολύ περισσότερο απο την περίπτωση που θα πληρώνατε αρχικά. Εαν το project δεν στηθεί ΣΩΣΤΑ απο την ΑΡΧΗ απο έμπειρους επαγγελματίες, τότε στο μέλλον θα παρουσιάζονται προβλήματα τα οποία θα απαιτούν χρόνο και φυσικά χρήμα για να διορθωθούν. Αυτά τα προβλήματα δεν θα “σκάνε” μόνο κατά την περίοδο ανάπτυξης του project, αλλά ακόμα χειρότερα όταν θα το έχετε διοχετεύσει στην αγορά. Αυτό συνεπάγεται δυσαρεστημένους πελάτες οι οποίοι θα αρχίσουν να αναζητούν παρόμοια λύση αλλού. Έτσι, άθελά σας θα έχετε δώσει σημαντικό περιθώριο στον ανταγωνισμό να αναπτυχθεί εναντίον σας.

Εαν κάπου δεν σας κάλυψα, μπορείτε να επικοινωνήσετε μαζί μου ελεύθερα χωρίς δισταγμούς ή να αφήσετε κάποιο σχόλιο.