Indivi­du­elle Softwareentwicklung

Kunden­spe­zi­fi­sche Lösungen für die Industrie

Mit der hohen Entwick­lungs­ge­schwin­dig­keit auf allen techno­lo­gi­schen Ebenen ändern sich die Anfor­de­rungen in der Indus­trie, aber auch die Bedürf­nisse der Kunden steigen ständig. Daraus ergeben sich komplexe Aufgaben, die mit Standard­soft­ware selten ausrei­chend gelöst werden können. Daher muss Software meist indivi­duell für den jewei­ligen Anwen­dungs­fall entwi­ckelt werden. Nur so können Unter­nehmen alle Poten­ziale zum strate­gi­schen Vorteil nutzen, die sich durch die neuen Möglich­keiten bieten. Wir unter­stützen Sie dabei mit unseren Kompe­tenzen in der indivi­du­ellen  Softwareentwicklung.

Bild von Wolfram Schäfer

Vor zwanzig Jahren habe ich unser Unter­nehmen gegründet, um anspruchs­volle, indivi­du­elle Software und durch­dachte Archi­tek­turen für komplexe, varian­ten­reiche Maschinen und Anlagen zu entwi­ckeln. Das ist auch heute noch unser Spezi­al­ge­biet. Und jetzt stehen uns phantas­ti­sche Techno­lo­gien zur Umset­zung noch intel­li­gen­terer Lösungen zur Verfügung.

Edge- und Cloud Compu­ting, Machine Learning und Künst­liche Intel­li­genz, Simula­tion und Augmented Reality. Damit können wir nicht nur die Effizienz Ihrer Anlagen und Systeme nachhaltig steigern, sondern in Ihrem Business die Grund­lagen für völlig neue Geschäfts­mo­delle erschaffen.

Mit den wachsenden Möglich­keiten werden natür­lich auch die Anfor­de­rungen an Software­ent­wick­lung immer unüber­sicht­li­cher und heraus­for­dernder. Außerdem gewinnen alle Aspekte des Life-Cycle-Manage­ments und die Beherr­schung der Varian­ten­viel­falt auch für Software an zentraler Bedeutung.

Deshalb ist das profes­sio­nelle metho­di­sche Vorgehen noch wichtiger: flexible Software­ar­chi­tek­turen, nicht-funktio­nale Quali­täts­kri­te­rien, Clean Code, Design Thinking und DevOps sind nur einige Stich­punkte. Wir nutzen modernste Software­ent­wick­lungs­werk­zeuge und wenden effizi­ente Methoden an, mit dem Ziel, für unsere Kunden die intel­li­gen­testen und nachhal­tigsten Software­lö­sungen zu entwickeln.

Ganz gleich aus welcher Branche Sie kommen, welche Aufga­ben­stel­lung Sie haben oder wie flexibel die Zusam­men­ar­beit mit Ihrem eigenen Entwick­lungs­be­reich gestaltet sein soll: Wir entwi­ckeln indivi­du­elle, anspruchs­volle Software­lö­sungen für innova­tive Unternehmen.

Die Zukunft wird program­miert und mit Software zur Realität.

Mehr lesen  Weniger lesen 

Wolfram Schäfer

Geschäfts­führer IT Enginee­ring Software Innovations

Die Digita­li­sie­rung im indus­tri­ellen Umfeld ist nicht aufzuhalten

Digitale Techno­lo­gien sind Enabler der digitalen Trans­for­ma­tion der Indus­trie hin zu einer Produktion im Sinne von Indus­trie 4.0. Diese eröffnet Poten­ziale für weitere Effizi­enz­stei­ge­rungen, intel­li­gen­tere Prozesse und neue Geschäfts­mo­delle. Kennzeich­nend für den digitalen Wandel ist die rasante Weiter­ent­wick­lung und grenzen­lose Verfüg­bar­keit neuer innova­tiver Technologien.

Techno­lo­gien als Enabler für die digitale Transformation

Beispiele einige der maßgeb­li­chen Techno­lo­gien, welche die Vernet­zung und Digita­li­sie­rung für Indus­trie 4.0 ermöglichen:

Edge-/ Cloud Computing

Mobiles Internet

Künst­liche Intelligenz/ Machine Learning

IIoT – Indus­trial Internet of Things

Digitaler Zwilling

Simula­ti­ons­mo­delle

Virtual/ Augmented Reality

Lösungen für Interoperabilität

Software ist von zentraler Bedeu­tung für die
Zukunfts­fä­hig­keit der Investitionsgüterindustrie

Der Schlüssel, um den techno­lo­gi­schen Wandel im indus­tri­ellen Umfeld zu meistern und aktiv zu gestalten, liegt in der indivi­du­ellen Software­ent­wick­lung. Nur durch den Einsatz intel­li­genter Software­lö­sungen gelingen die notwen­digen (Produkt-)Innovationen, um weiterhin wettbe­werbs­fähig zu bleiben und Vorteile durch Diffe­ren­zie­rung zu erzielen. 

Unser Verständnis von Softwareentwicklung

Wir sind davon überzeugt, dass die digitale Trans­for­ma­tion der Indus­trie der Schlüssel zu neuen Poten­zialen und die Voraus­set­zung für weiteren Erfolg in der Zukunft ist. Das bedeutet für uns:

  • tiefe Überzeu­gung, dass Software­ent­wick­lung eine sehr verant­wor­tungs­volle Aufgabe ist
  • das Ergebnis muss am Nutzen und Mehrwert orien­tiert sein und beein­flusst den unter­neh­me­ri­schen Erfolg nachhaltig
  • Offen­heit für neueste Trends, Techno­lo­gien und Methoden und dauer­hafte Lernbereitschaft
  • agile Arbeits­weise in inter­dis­zi­pli­nären und flexi­blen Kompetenz-Teams
  • Arbeiten mit tool-gestützten Methoden und dem Fokus auf Time-to-Market
  • Erfah­rung und Praxis­nähe mit Verständnis für die Branchen unserer Kunden und deren Anfor­de­rungen sind entschei­dende Erfolgsfaktoren
  • Der Blick über Grenzen hinweg und die Weitsicht für Anfor­de­rungen eröffnet Chancen für die Zukunft
  • die enge Zusam­men­ar­beit mit Hochschulen, spezia­li­sierten Partnern, Innova­toren und Fachver­bänden ermög­licht uns die notwen­dige Flexi­bi­lität in unseren Lösungen

Verän­de­rungen der Anfor­de­rungen & Akzep­tanz von Software im Investitionsgüterbereich

Früher

Heute

Zukünftig

Software wird vor allem dort einge­setzt, wo unbedingt notwendig

Bei Produkten wird Software als zentrale Kompo­nente zur Funkti­ons­er­fül­lung eingesetzt

In der Produktion dienen Software­lö­sungen zur Visua­li­sie­rung und Prozesssteuerung

Software wird als strate­gi­sches Schlüs­sel­ele­ment bei Produkten, Dienst­leis­tungen und Geschäfts­mo­dellen eingesetzt

Software bewirkt „echte“ Wertschöp­fung durch Techno­lo­gien wie Machine Learning & Künst­liche Intelligenz

Software­ent­wick­lung im indus­tri­ellen Umfeld wird eher „stief­müt­ter­lich“ betrieben

Unter­nehmen haben meist eigene Kompe­tenzen in der Softwareentwicklung

Unter­stüt­zung durch Dienst­leister mit breitem Kompe­tenz­spek­trum oder „Insel­ex­per­tise“

Unter­nehmen erkennen die Software(-kompetenz) als strate­gi­sches Schlüs­sel­ele­ment für den Unternehmenserfolg

Integrierte Zusam­men­ar­beit mit spezia­li­sierten Partnern

Entwick­lung orien­tiert sich an den vorhan­denen Kompetenzen

Heraus­for­de­rung, mit den Entwick­lungen Schritt zu halten und den Überblick zu bewahren

Eigene Kompe­tenzen werden nach den Bedarfen der Anwen­dung geschult/ gesucht

Heraus­for­de­rung, interne & externe Teams in einer agilen & vertrau­li­chen Zusam­men­ar­beit zu führen

Techno­lo­gien & Kompe­tenzen sind Innova­ti­ons­treiber für Produkte, Dienst­leis­tungen und Geschäfts­mo­delle vom Unter­nehmen bis zum Kunden, über den gesamten Produkt­le­bens­zy­klus und der Kundenbeziehung

Früher

alter PC als Symbol für frühere Softwareentwicklung

Software wird vor allem dort einge­setzt, wo unbedingt notwendig

Software­ent­wick­lung im indus­tri­ellen Umfeld wird eher „stief­müt­ter­lich“ betrieben

Entwick­lung orien­tiert sich an den vorhan­denen Kompetenzen

Heute

zwei PCs und Maschine als Symbol für heutige Softwareentwicklung

Bei Produkten wird Software als zentrale Kompo­nente zur Funkti­ons­er­fül­lung eingesetzt

In der Produktion dienen Software­lö­sungen zur Visua­li­sie­rung und Prozesssteuerung

Unter­nehmen haben meist eigene Kompe­tenzen in der Softwareentwicklung

Unter­stüt­zung durch Dienst­leister mit breitem Kompe­tenz­spek­trum oder „Insel­ex­per­tise“

Heraus­for­de­rung, mit den Entwick­lungen Schritt zu halten und den Überblick zu bewahren

Eigene Kompe­tenzen werden nach den Bedarfen der Anwen­dung geschult/ gesucht

Zukünftig

 

vernetzte PCs, Fabrik und Cloud als Symbol für zukünftige Softwareentwicklung

Software wird als strate­gi­ches Schlüs­sel­ele­ment bei Produkten, Dienst­leis­tungen und Geschäfts­mo­dellen eingesetzt

Software bewirkt echte Wertschöp­fung durch Techno­lo­gien wie Machine Learning und Künst­liche Intelligenz

Unter­nehmen erkennen die Software(-kompetenz) als strate­gi­sches Schlüs­sel­ele­ment für den Unternehmenserfolg

Integrierte Zusam­men­ar­beit mit spezia­li­sierten Partnern

Heraus­for­de­rung, interne & externe Teams in einer agilen & vertrau­li­chen Zusam­men­ar­beit zu führen

Techno­lo­gien & Kompe­tenzen sind Innova­ti­ons­treiber für Produkte, Dienst­leis­tungen und Geschäfts­mo­delle vom Unter­nehmen bis zum Kunden, über den gesamten Produkt­le­bens­zy­klus und der Kundenbeziehung

Heraus­for­de­rungen für indivi­du­elle Software­ent­wick­lung in der Investitionsgüterindustrie

Hohe Varianz von Maschinen, Anlagen & Produkten

Aufgrund sich immer schneller ändernden Anfor­de­rungen in der produ­zie­renden Indus­trie existieren meist mehrere Varianten bzw. Genera­tionen verschie­dener Baureihen „neben­ein­ander“. Dementspre­chend müssen parallel ältere und bereits weiter­ent­wi­ckelte Maschinen mit prinzi­piell den gleichen Funktionen (Software­ap­pli­ka­tionen) betrieben werden.

Software­lö­sungen und Updates müssen diesen Spagat der Modula­rität und Aufwärts-/ Abwärts­kom­pa­ti­bi­lität bewältigen!

Lange Produktlebenszyklen

Maschinen, Anlagen und Kompo­nenten haben i. d. R. eine sehr hohe Lebens­dauer. Sie werden zudem im Laufe der Zeit erwei­tert, umgebaut und moder­ni­siert. Das muss eine „gute“ Software im Zusam­men­spiel der verschie­denen Elemente zulassen bzw. ausrei­chend anpas­sungs­fähig sein.

Die Software­lö­sungen müssen updatefähig und über viele Releases kompa­tibel sein und bleiben!

Vergleichsweise geringe Anzahl an Nutzern

In der Inves­ti­ti­ons­gü­ter­in­dus­trie ist die Nutzer­zahl im Vergleich zu anderen Indus­trien eher gering. Deshalb gilt hier die beson­dere Maßgabe der Wirtschaft­lich­keit für die Software­ent­wick­lung bei gleich­zeitig sehr hohem Qualitätsanspruch.

Die Software­ar­chi­tektur und die Methodik in der Entwick­lung müssen den Ansprü­chen an Effizienz, Nachhal­tig­keit und Güte gerecht werden!

Parallelbetrieb verschiedener Konfigurationen & Generationen

Infolge der hohen Varianz und Produkt­le­bens­dauer sind zeitgleich Maschinen, Anlagen und Kompo­nenten mit unter­schied­li­chem Funkti­ons­um­fang und Versio­nie­rung in Betrieb. Das ist eine Heraus­for­de­rung für Hersteller und Betreiber. Für Software-
lösungen resul­tiert dadurch immer ein gewisser Pflegeaufwand.

Bei der Software­ent­wick­lung (Wartbar­keit & Verfüg­bar­keit der einge­setzten Techno­logie) und in der Entwick­lungs­or­ga­ni­sa­tion (Kapazität & Know-How) muss das bedacht werden!

Möchten Sie weitere Infor­ma­tionen oder Beratung zur indivi­du­ellen Software­ent­wick­lung für Ihre Anfor­de­rungen? Wir helfen gerne weiter.

Bild von Wolfram Schäfer

Wolfram Schäfer

Geschäfts­führer IT Enginee­ring Software Innovations

Steigende Anfor­de­rungen an die Softwareentwicklung

  • Usabi­lity: Gewähr­leis­tung einer einfa­chen und fehler­freien Bedie­nung, unter Beach­tung der Nutzungs­si­tua­tion und stets orien­tiert am Anwender
  • User Experi­ence: Schaf­fung eines positiven Benut­zer­erleb­nisses (Stich­wort „Gamifi­ca­tion“)
  • einfa­ches Deploy­ment auf unter­schied­liche Zielsysteme
  • konti­nu­ier­liche Erwei­te­rung bei laufendem Betrieb der Software
  • Platt­form­un­ab­hän­gig­keit
  • Nutzung auf unter­schied­li­chen Endge­räten, wie z. B. Laptop, Tablet und Smart­phone (Stich­wort „Respon­sive Design“)
  • ortsun­ab­hän­gige Nutzung der Software
  • Geschwin­dig­keit bei der Entwicklung
  • Berück­sich­ti­gung funktio­naler Qualitätsaspekte
  • Berück­sich­ti­gung nicht-funktio­naler Quali­täts­aspekte (Wartbar­keit, Erwei­ter­bar­keit, Wiederverwendbarkeit)

Erfül­lung nicht-funktio­naler Quali­täts­an­for­de­rungen bei der Softwareentwicklung

Bei indivi­du­eller Software­ent­wick­lung ist die Erfül­lung funktio­naler Quali­täts­kri­te­rien und Anfor­de­rungen wichtig, aber in jedem Fall selbst­ver­ständ­lich. Der Fokus muss darüber hinaus auf der Erfül­lung nicht-funktio­naler Quali­täts­an­for­de­rungen liegen.

Werden diese Krite­rien bei der Konzep­tion und Program­mie­rung beachtet, schafft man nachhal­tige Software­lö­sungen, die auf lange Produkt­le­bens­zy­klen ausge­legt sind. Dies ist insbe­son­dere im Inves­ti­ti­ons­gü­ter­be­reich bei Laufzeiten von 15–20 Jahren ein wichtiger Faktor.

Wartbar­keit

Software kann einfach an geänderte Spezi­fi­ka­tionen angepasst und modifi­ziert werden. Änderungen (z. B. Fehler­be­he­bungen) sind ohne großen Aufwand und Risiko möglich.

Erwei­ter­bar­keit

Erwei­ter­bare Software kann leicht um weitere Funktio­na­li­täten ergänzt und einfach an neue Anfor­de­rungen angepasst werden. Der Aufwand der Skalie­rung ist gering.

Wieder­ver­wend­bar­keit

Ganz oder teilweise Verwen­dung von Softwarebau­steinen für neue Produkte, Baureihen oder Anlagen bzw. Einsatz bei Projekten, für die sie ursprüng­lich nicht entwi­ckelt wurden.

Unsere Erfolgs­fak­toren

Um den hohen Ansprü­chen und Trends gerecht zu werden, flexibel für die Nutzung neuer Chancen zu bleiben und aus unserer über 20-jährigen Erfah­rung sind dies aus unserer Sicht die entschei­denden Erfolgs­fak­toren bei indivi­du­eller Softwareentwicklung:

  • offene & zukunfts­fä­hige Softwaretools
  • struk­tu­riertes & toolge­stütztes Vorgehen
  • agile Methoden
  • flexible Software­ar­chi­te­kuren
  • weitere quali­tät­sichernde Maßnahmen

Verwen­dung offener & zukunfts­fä­higer Softwareentwicklungswerkzeuge

Wir verfolgen immer die Strategie, für die jewei­lige Problem­stel­lung das richtige Lösungs­kon­zept aus Software­ar­chi­tektur, Program­mier­spra­chen und dem Zusam­men­spiel von Tools zu erarbeiten. Wir arbeiten platt­form­un­ab­hängig und sind offen für alle Programmiersprachen.

Deshalb legen wir großen Wert auf die stetige Weiter­ent­wick­lung unserer eigenen Experten. Dabei ziehen wir bei Projekten z.B. auch in Betracht, ob im Einzel­fall auch Software­ent­wickler mit den entspre­chenden Fähig­keiten und Kompe­tenzen verfügbar sind.

Struk­tu­riertes und tool-gestütztes Vorgehen

In einem profes­sio­nellen Entwick­lungs­pro­zess werden bestehende Funktio­na­li­täten bzw. Module bereits während der Program­mie­rung mittels automa­ti­siert durch­ge­führter Tests, wie Unit- oder Regres­si­ons­tets,  abgesi­chert. So wird über den gesamten Prozess eine hohe Qualität sichergestellt.

Hierfür setzen wir entspre­chende Systeme ein und imple­men­tieren sie in unseren Entwick­lungs­pro­zess des Conti­nuous Develo­p­ment, der aus drei Phasen besteht.

Diese Vorteile ergeben sich aus der Verwen­dung der drei Konzepte: 

  • Ständige Verfüg­bar­keit eines ausführ­baren Systems
  • Frühzei­tiges Erkennen von Problemen bei der Integration
  • Steige­rung der Effizienz bei der Softwareentwicklung
  • Änderungs­wün­sche können flexi­bler berück­sich­tigt werden
  • höhere Kunden­ori­en­tie­rung

Conti­nuous Integra­tion (CI)

Automa­ti­sierter Prozess des fortlau­fenden Zusam­men­fü­gens von Kompo­nenten zu einer Anwen­dung. Das Ziel der konti­nu­ier­li­chen Integra­tion ist die Steige­rung der Softwarequalität. 

Conti­nuous Delivery (CD)

Techniken, Prozessen und Tools, die den Software­aus­lie­fe­rungs­pro­zess verbes­sern. So kann in Kombi­na­tion mit agilen Methoden quali­tativ hochwer­tige Software entwi­ckelt werden.

Conti­nuous Deploy­ment (CD)

Release­pro­zess, bei dem Änderungen am Code automa­ti­siert und sofort an Endnutzer ausge­lie­fert werden; Fehler können aufgrund kleiner Entwick­lungs-
schritte schnell identi­fi­ziert werden.

Agile Software­ent­wick­lung mit Methodik

Metho­di­sches Vorgehen ist eine Schlüs­sel­kom­pe­tenz in der agilen Entwick­lung von Software für indivi­du­elle Systeme. Wir wenden effizi­ente und erprobte Methoden generell in allen Software­ent­wick­lungs­pro­jekten an, sowohl im Hochspra­chen­be­reich, als auch im Bereich der SPS-Software­ent­wick­lung. Mit Kanban, Scrum, DevOps und Design Thinking machen wir sehr gute Erfah­rungen. Folgende Tools unter­stützen unsere agile Arbeitsweise:

Design Thinking

Beim Ansatz des Design Thinking wird das Ziel verfolgt, Innova­tionen zu entwi­ckeln, die sich am Nutzer und dessen Bedürf­nissen orien­tieren. Dabei stehen weniger die „harten“ techni­schen Anfor­de­rungen im Vorder­grund, sondern vor allem die  Wünsche aus Sicht der Anwender. Während der Entwick­lung wird stets versucht, mit möglichst geringem Aufwand einen ersten Lösungs­an­satz darzu­stellen („Minimum Viable Product“, MVP) und dieses abzustimmen.

Grafik beschreibt Scrum Prozess bei individueller Softwareentwicklung

Scrum

Die Anwen­dung des agilen Vorge­hens­mo­dells Scrum bietet zahlreiche Vorteile:

  • sehr effizi­ente Arbeits­weise im inter­dis­zi­pli­nären Team
  • regel­mäßig funkti­ons­fä­hige Softwarestände
  • termin­ge­rechte Umsetzung
  • verbes­serte Motiva­tion und Einbin­dung der Mitarbeiter
  • schnel­lere Reaktion auf geänderte Anforderungen

Kanban

Kanban ist ein nützli­ches Frame­work in der agilen Software­ent­wick­lung. Kapazi­täten werden in Echtzeit kommu­ni­ziert und alle Aufgaben völlig trans­pa­rent aufge­zeigt. Die einzelnen Aufga­ben­ele­mente werden auf einem Kanban Board visuell darge­stellt, sodass sich die Teammit­glieder jeder­zeit einen Überblick über den Status der Arbeits­schritte verschaffen können.

  • kürzere Durch­lauf­zeiten
  • weniger Engpässe
  • termin­ge­rechte Umsetzung
  • visuelle Darstel­lung von Softwaremetriken
  • Conti­nuous Delivery
Grafik beschreibt Kanban Prozess bei individueller Softwareentwicklung
Grafik beschreibt DevOps Prozess bei individueller Softwareentwicklung

DevOps

Der Begriff setzt sich aus „Dev“ (Develo­p­ment, Entwick­lung) und „Ops“ (Opera­tions, Vorgänge) zusammen. Dabei werden die eigent­lich grund­ver­schie­denen Bereiche Software­ent­wick­lung und  IT-Betrieb zusammengeführt.

  • Verbes­se­rung der Zusam­men­ar­beit von Teams
  • Steige­rung der Produktivität
  • Erhöhung der Entwicklungsgeschwindigkeit
  • Verbes­se­rung der Software

Flexible Software­ar­chi­tek­turen

Getreu dem Motto „Form follows Function“ ist auch die Software­ar­chi­tektur auf die jewei­ligen Anfor­de­rungen der erfor­der­li­chen Lösung anzupassen. Skalier­bar­keit bzgl. Anzahl der Nutzer und des damit verbun­denen Daten­vo­lu­mens, Zugriff von unter­schied­li­chen Stand­orten aus, der Vendor Log-In und die Anfor­de­rungen an konti­nu­ier­li­ches Deploy­ment sind nur einige der zur berück­sich­ti­genden Aspekte bei der Entschei­dung für den geeig­neten Lösungsansatz.

On-Premise Lösungen

Bei einer On-Premise Lösung wird die Software auf einem Server im Netzwerk des eigenen Unter­neh­mens instal­liert und betrieben.

Vorteile:

    • maximale Kontrolle über die Daten (Daten­schutz)
    • unein­ge­schränkter Zugriff und hohe Verfügbarkeit

Nachteile:

    • schlechte Skalier­bar­keit
    • meist kein konti­nu­ier­li­ches Deploy­ment möglicht
    • höhere Inves­ti­ti­ons­kosten für Hardware

Cloud-Lösungen

Bei Cloud-Lösungen kann zwischen Infra­st­ruc­ture as a Service (Iaas), Platt­form as a Service (Paas) oder Software as a Service (Saas) unter­schieden werden. Entspre­chend wird die Software bei einem „Provider im Internet“ ausgeführt
 

Vorteile

    • maximale Skalier­bar­keit
    • keine Inves­ti­tion in eigene Hardware
    • Zugriff von jedem Ort
    • Einfa­ches und kosten­güns­tiges Software-Deployment

Nachteile:

    • Ggf. einge­schränkte Bandbreite bzgl. der Kommunikation
    • hohe Latenz bei Datenaustausch
    • je nach Service-Level höherer Vendor-Login

Hybrid-Ansätze

Für – insbe­son­dere daten­ge­trie­bene – Lösungen im indus­tri­ellen Umfeld haben sich auch hybride Archi­tek­turen etabliert. Rohdaten aus dem Unter­neh­mens­um­feld werden lokal – On premise – vorver­ar­beitet und nur verdich­tete Infor­ma­tionen werden an den Service in der Cloud kommu­ni­ziert. Damit lassen sich Gesamt­ap­pli­ka­tionen so schneiden, dass Vorteile maximiert und entspre­chende Nachteile minimiert werden können. In diesem Zusam­men­hang werden oft auch „Cloud Native“ Lösungen realisiert.

Weitere quali­täts­si­chernde Maßnahmen

Code-Review ist die effizi­en­teste Methode, um die Software­qua­lität nachhaltig zu steigern. Die ständige Analyse des Source-Codes ermög­licht dem Entwickler eine itera­tive Optimie­rung.Gitlab ist z.B. eine Sammlung von Web-Appli­ka­tionen, welche die Entwickler dabei unter­stützt über den Source-Code und dessen Änderungen zu kommu­ni­zieren.Review des Source-Codes nach dem „Vier-Augen-Prinzip“ durch andere Entwickler 
  • Berück­sich­ti­gung und Steige­rung nicht-funktio­naler Qualitätsmerkmale
  • Effizi­ente Möglich­keit zur Einbin­dung von Kompe­tenzen anderer Entwickler
  • Erzie­lung einer wartbaren und erwei­ter­baren Software
Effek­tive Unter­stüt­zung einer verteilten, dezen­tralen Arbeitsweise 
  • Unabhän­giges Arbeiten an gleicher Software-Version möglich
  • Software­ent­wick­lung und ‑anpas­sung auch an externen Stand­orten (z. B. vor Ort beim Kunden)
  • Spätere Versio­nie­rung der Änderungen und tool-gestützte Zusam­men­füh­rung im zentralen Repository
Konti­nu­ier­liche Überar­bei­tung einer Software (meist) unter Beibe­hal­tung des Funkti­ons­um­fangs, mit dem Ziel der Verbes­se­rung der Archi­tektur, Optimie­rung des Codes und Besei­ti­gung von Code-Smells (z. B. Code-Dupli­kate)Refac­to­ring:  Struk­tur­ver­bes­se­rung von Quell­texten unter Beibe­hal­tung des bishe­rigen Programm­ver­hal­tensRestruk­tu­rie­rung:  Anpas­sung der Software bzw. von Modulen an neue Technologien 
    • Steige­rung der Perfor­mance einer Software
    • Erleich­te­rung der Weiter­ent­wick­lung einer Software

Dieses Prinzip besagt, dass eine Funktion entweder eine Aktion durch­führt (Command) oder Werte abfragt, also Daten an den Aufrufer zurück­gibt und niemals beides in einer Funktion tun sollte. Dadurch entsteht „sauberer“ Quell­code, der intuitiv verständ­lich ist.

Erleich­te­rung der Weiter­ent­wick­lung einer Software

    • Stabi­lere und effizient wartba­rere Programme
    • Kürzere Entwick­lungs­zeiten bei Funkti­ons­er­wei­te­rung und Fehlerbehebungen
Automa­ti­sierte Software­tests lohnen sich insbe­son­dere bei agilen Projekten, da so einfach und regel­mäßig Integra­tions- und Regres­si­ons­tests durch­ge­führt werden können. Dafür müssen bereits am Beginn der Entwick­lung die entspre­chenden Voraus­set­zungen geschaffen und während der Entwick­lungs­phase berück­sich­tigt werden: 
    • Testbar­keit ermöglichen
    • Testar­chi­tektur für Kompo­nenten- oder Unittests festlegen
    • Konven­tionen und Standards für fremden Source­code definieren
    • aussa­ge­kräf­tige Reportings etablieren

Verän­de­rungen eröffnen neue Potenziale

Dadurch, dass gute Indivi­du­al­soft­ware allen beschrie­benen Krite­rien gerecht werden soll, bietet sich stets die Chance, den Verän­de­rungs­druck strate­gisch für Neues zu nutzen. Zusammen mit der laufenden Weiter­ent­wick­lung innova­tiver Techno­lo­gien, können z. B. neue, lukra­tive Geschäfts­mo­delle entwi­ckelt und angeboten werden.

Laufzeit-/ nutzungsabhängige Vergütungsmodelle

    • nach Nutzungs­dauer von Maschinen (Zeit, „Pay-per-Use“)
    • nach produ­zierten Stück­zahlen (Ergebnis, „Perfor­mance-based Contracting“)
    • nach verwen­deter Belas­tung (Leistung)
    • nach Anzahl der Nutzung (Lizenz­mo­delle)
    • Freischal­tung spezi­eller Funktionen, evtl. kosten­loser Testzeit­raum („Rent instead of Buy“)

Weiterentwicklung der Software

    • während des Betriebs können Software­funk­tio­na­li­täten weiter- oder neu entwi­ckelt werden („After­sales“)
    • für bereits ausge­lie­ferte Maschinen oder Anlagen können neue Funktio­na­li­täten bzw. Features angeboten werden („Upgrade“)

Es gibt keine Patentrezepte!

Die Anfor­de­rungen für unter­schied­liche Appli­ka­tionen in verschie­denen Branchen sind sehr vielfältig und indivi­duell. Deshalb gibt es meist keine passenden Standard­lö­sungen bzw. ist Indivi­du­al­soft­ware meist ungeeignet. Als Strategie gilt, dass für die jewei­lige Problem­stel­lung das richtige Lösungs­kon­zept aus Software­ar­chi­tektur, Program­mier­spra­chen und dem Zusam­men­spiel von Tools erarbeitet werden muss. Dabei gilt es die verschie­densten Erfor­der­nisse, die manchmal gegen­sätz­liche Ansätze erfor­dern können, gegen­ein­ander abzuwägen, um eine für alle Belange optimale Lösung zu finden.

Beratung und Coaching

Ein nicht zu unter­schät­zender Faktor ist dabei auch die Verfüg­bar­keit an Software­ent­wick­lern mit den erfor­der­li­chen Fähig­keiten und Kompe­tenzen, heute und in der Zukunft. Deshalb legen wir großen Wert auf die stetige Weiter­ent­wick­lung unserer eigenen Experten. Unter diesem Aspekt berück­sich­tigen wir bei der Projekt­pla­nung auch stets die internen Möglich­keiten bei unserem Kunden, falls Systeme später hausin­tern gepflegt werden sollen.

Wir verfolgen immer das Ziel, für Sie flexible und zukunfts­fä­hige Software­lö­sungen zu entwi­ckeln, an denen Sie funktio­nell und wirtschaft­lich lange Freude haben.

Mehr lesen  Weniger lesen 

Unser Angebot

Unsere Kernkom­pe­tenz als Dienst­leister liegt in der Entwick­lung anspruchs­voller, indivi­du­eller Software­lö­sungen im indus­tri­ellen Umfeld. Wir erstellen für Sie neue, maßge­schnei­derte Anwen­dungen oder nehmen notwen­dige Anpas­sungen an Ihrer bestehenden Infra­struktur vor. Dafür bieten wir Ihnen Know-How, Kapazität und Erfah­rungen aus unter­schied­lichsten Projekten und Branchen.

Wir verstehen uns als verläss­li­cher Entwick­lungs­partner und Impuls­geber: Von der Beratung und Konzep­tion, über Program­mie­rung, Imple­men­tie­rung und Quali­täts­tests bis zur konti­nu­ier­li­chen Weiter­ent­wick­lung der Software, deckt unser Leistungs­spek­trum alle Phasen von indivi­du­ellen Software­pro­jekten ab.