Definicja prac B+R w projektach informatycznych została szerzej przedstawiona w podręczniku Frascati (2015, OECD), stanowiącym ogólnoświatowy standard w zakresie prac badawczych. Zgodnie z nim, projekty informatyczne, mogą zostać zakwalifikowane jako projekty B+R, pod warunkiem dokonania postępu naukowego lub technicznego, a jego celem musi być wyeliminowanie elementu naukowej lub technicznej niepewności w sposób metodyczny.
W tym wpisie staramy się podpowiedzieć jak opisać zadania realizowane w projekcie informatycznym, tak aby można było je podzielić na prace badawcze i rozwojowe.
Tworzenie oprogramowania jest działaniem planowym, realizowanym często zgodnie z metodologiami zwinnymi takimi jak Kanban, SCRUM, programowanie ekstremalne, Lean, czy też feature-driven. W szczególnych przypadkach mogą to być metodologie typu waterfall, czy też iteracyjne oraz ewolucyjne. Natomiast w istniejących systemach będzie to ciągłe wdrażanie lub Site Reliability Engineering (SRE). W przypadku realizacji prac B+R podczas tworzenia oprogramowania ważny jest sposób realizacji prac oraz ich efekty, a mniej ważna, z punktu widzenia oceny wniosku, jest metodologia wytwarzania oprogramowania. Istotne różnice występują również pomiędzy tworzeniem końcowego produktu lub usługi jako oprogramowanie, a pracami B+R prowadzącymi do opracowania tego oprogramowania.
Zrozumienie tych różnic pozwoli zaprojektować prace w taki sposób, aby zostały pozytywnie ocenione we wniosku SMART.
Poruszymy następujące zagadnienia:
1. Postęp naukowy lub techniczny.
2. Metodyczne działanie.
3. Elementy prac badawczych.
4. Elementy prac rozwojowych.
5. Przykłady prac B+R w IT.
6. Prace rutynowe.
7. Przykłady rutynowych czynności.
1. Postęp naukowy lub techniczny
Wytwarzanie oprogramowania wiąże się z innowacją. Cyfryzacja procesów, optymalizacja przepływu informacji, przyspieszenie wymiany danych, przetwarzanie danych przy użyciu inteligentnych algorytmów mogą, lecz nie muszą zostać wykonane z użyciem innowacji. Dzięki przyspieszaniu i ułatwieniu przetwarzania danych, a także wykonywaniu pewnych czynności automatycznie, oprogramowanie najczęściej oszczędza czas, a co za tym idzie, również pieniądze użytkownika.
Wymienione tutaj elementy, które nowe oprogramowanie wprowadza, nie są jednoznaczne z dokonaniem postępu naukowego lub technicznego, a tylko pod tym warunkiem możemy przypisać zadania, prowadzące do wytworzenia oprogramowania, do prac B+R. Jeśli wykorzystujemy gotowe algorytmy, SDK, API, znane metody przetwarzania danych, łączymy nasze oprogramowanie z zewnętrznymi usługami, bibliotekami pozyskanymi jako open source, płatnymi lub nawet wytworzonymi przez nas wcześniej, to nie jest to praca prowadząca do osiągnięcia mierzalnego postępu naukowego lub technicznego. Wynik pracy może być innowacyjny, a pomimo to, prace prowadzące do tego wyniku nie będą pracami badawczo-rozwojowymi.
W pracach B+R musimy pójść krok dalej.
Wynikiem takich prac musi być postęp naukowy lub techniczny. Oznacza to, że wchodzimy w dziedzinę nauki lub techniki oraz opracowujemy nową metodę przetwarzania danych, algorytm, technikę szyfrowania, system operacyjny, metodę rozwiązywania konfliktów sprzętowych lub programowych.
Z punktu widzenia programisty oznacza to, że pracujemy na kodzie źródłowym takiego procesu, algortymu lub systemu, tak aby go ulepszyć.
Kluczowe jest inkrementalne ulepszenie. Prace nad oprogramowaniem najczęściej przynoszą ulepszenia dodawane sukcesywnie więc komisja oceniająca nie będzie oczekiwać wytworzenia nowych algorytmów, które będą od nas odkupywać korporacje z całego świata.
Jednak musimy udowodnić, że obecny stan techniki w zakresie proponowanej innowacji nie jest wystarczający dla celów projektu i jesteśmy w stanie go poprawić w ramach prac B+R.
2. Metodyczne działanie
Prace badawczo-rozwojowe powinny być realizowane w sposób metodyczny. Oznacza to, że prace badawcze poprzedzają prace rozwojowe, a także realizowane są zgodnie z planem badań. Prace badawcze mają jasno określone cele, które są sparametryzowane. We wniosku staramy się pokazać, że wiemy jaki jest stan techniki w zakresie wybranych przez nas metod i algorytmów. W odniesieniu do tego stanu proponujemy kroki, które należy przeprowadzić, aby podnieść efektywność działania algorytmu, metody, procesu lub zmniejszyć czas ich działania przy jednoczesnym zachowaniu efektywności. Stawiamy hipotezę badawczą odnośnie problemu naukowo-technicznego, który chcemy rozwiązać.
Rozpisanie działań, poświęconych na poprawę efektywności, w ramach harmonogramu prac, przy jednoczesnym oznaczeniu parametrów efektywności metody lub algorytmu, które zostaną poprawione po wykonaniu prac pozwala ocenić recenzentom czy faktycznie, w ramach projektu, dokonujemy postępu w zakresie stanu techniki.
3. Elementy prac badawczych
Prace badawcze mają na celu dokonanie postępu naukowego lub technicznego, którego efekty zostaną wykorzystane podczas prac rozwojowych przy wytwarzaniu oprogramowania. Na tym etapie mamy do czynienia z badaniami przemysłowymi, a nie naukowymi. Po zdefiniowaniu luki w wiedzy czyli nieistniejących na daną chwilę właściwości algorytmów lub metod przetwarzania danych, potrzebnych nam do realizacji innowacji, definiujemy hipotezę.
Hipoteza powinna otwierać możliwości pokonania bariery techonologicznej i wypełnienia zdefiniowanej przez nas luki. W tym celu proponujemy algorytmy, metody, procesy, które będziemy chcieli wytworzyć lub dopracować podczas wykonywania prac badawczych. Nasz problem do pokonania powinien być mierzalny i weryfikowalny. Dlatego powinniśmy również zaproponować miary osiągniętych efektów oraz sposób weryfikacji hipotezy za pomocą tych miar. Potrzebujemy do tego algorytmu lub metody referencyjnej, do których będziemy porównywać wytworzone w pracach badawczych rozwiązanie, za pomocą zaproponowanych miar.
W praktyce kamienie milowe mogą być powiązane z osiągnięciem celów badawczych poprzez weryfikację hipotez, a parametry kamieni milowych z miarami efektywności proponowanych algorytmów, metod lub procesów.
W przypadku, gdy prace badawcze polegają na tworzeniu nowych języków, wyszukiwarek czy rozwiązywaniu konfliktów w ramach sprzętu lub oprogramowania, należy również wykazać, że parametry efektywności względem rozwiązań referencyjnych zostały poprawione.
4. Elementy prac rozwojowych
Wyniki prac badawczych, czyli potwierdzone hipotezy, unowocześnione algorytmy, metody lub procesy służą jako wkład do prac rozwojowych. Dzięki nim możemy tworzyć wydajne implementacje, które zapewniają nam postęp naukowo-techniczny do wytworzenia innowacji w oprogramowaniu. Działania nad implementacją przebadanych algorytmów lub metod, architektur logicznych, bezpieczeństwa czy danych są właśnie takimi pracami. Ich celem nie jest poprawienie efektywności, a wytworzenie przykładowego projektu, który wykorzystuje wyniki prac badawczych. Do prac rozwojowych zaliczamy wytworzenie architektury logicznej oprogramowania, architektury danych, API, SDK, modułów realizujących właściwości oprogramowania, które niemożliwe były do zrealizowania bez implementacji wyników prac badawczych, protokołów komunikacji, także interfejsy użytkownika wraz z testami UX.
Do prac tych zaliczymy również integrację wytworzonych bibliotek z backendem, optymalizację konfiguracji, obsługę błędów. Wszędzie tam, gdzie wyniki badań są wdrażane mamy do czynienia z pracami rozwojowymi.
Do tego rodzaju zadań zaliczymy również skalowanie algorytmów i metod, refaktoryzację lub zrównoleglanie kodu. W zakresie optymalizacji, urządzeń lub systemów, load balancing, profilowanie, skalowanie, tuning architektury i konfiguracji.
W zakresie analizy jakościowej danych przez użytkowników będzie to wizualizacja danych, monitoring jakości, walidacja danych, metody zabezpieczeń danych.
5. Przykłady prac B+R w IT
1. Wytwarzanie nowego oprogramowania wraz z algorytmem przetwarzania danych
Pracami badawczymi będzie modyfikacja lub opracowanie kodu algorytmu, który nie jest dostępny do pobrania jako element gotowej biblioteki open-source lub płatnego SDK czy API. Dodatkowo, przetestowanie algorytmu, względem algorytmu refencyjnego i wykazanie, że nastąpiło polepszenie wartości miar testowych. Pracami rozwojowymi dla tego algorytmu mogą być prace nad serwerem backend realizującym algorytm, frontend do komunikacji, aplikacja desktopowa.
2. Automatyzacja procesów wymagających wiedzy eksperckiej
Przykładowy algorytm to poszukiwanie zmian w obrazach medycznych poprzez wskazywanie ROI oraz wstępną klasyfikację zmian. Prace badawcze mogą polegać na wytworzeniu i zbadaniu algorytmu do wyszukiwania ROI i ocenie efektywności klasyfikacji. Prace rozwojowe mogą obejmować wytworzenie interfejsu oprogramowania, lub biblioteki z algorytmami w formie binarnej dll, SDK, lub API.
3. Cyrfyzacja procesów
Prace badawcze będą polegać na zaproponowaniu metod lub algorytmów do akwizycji i przetwarzania danych wytworzonych w procesach podlegających cyfryzacji. Przykładem może być dodanie przetworników analogowo-cyfrowych i modułów komunikacji, przy czym samo wytworzenie oprogramowania do zbierania danych nie należy do prac badawczych. Dopiero algorytm, który przekształca dane, odszumia, koryguje błędy, dokonuje obróbki danych, będzie przedmiotem prac. Prace nad kompresją lub szyfrowaniem danych przy użyciu nowych metod będą pracami badawczymi. Algorytmy powinny być wytworzone lub zaadoptowane, poprzez pracę na kodzie źródłowym. Prace rozwojowe będą tutaj również polegały na zbudowaniu prototypu oprogramowania, przygotowaniu jego interfejsu, przetestowaniu użyteczności oraz wytworzeniu metod komunikacji urządzeń z oprogramowaniem.
6. Prace rutynowe
Zadania realizowane jako prace badawczo-rozwojowe nie mogą być czynnościami rutynowymi. Czynności rutynowe związane z tworzeniem oprogramowania, to takie, które nie pociągają za sobą postępu naukowego lub technicznego i nie prowadzą do zwiększenia zakresu wiedzy, pokonywania barier naukowych lub technicznych czy też nie prowadzą do wytworzenia oprogramowania typu proof-of-concept. W szczególności są to prace nad systemem lub programem, który był dostępny publicznie przed rozpoczęciem prac B+R. Naprawa problemów technicznych rozwiązanych w poprzednich projektach dla tych samych systemów operacyjnych lub architektur, serwisowanie oraz utrzymywanie oprogramowania, dodawanie nowych cech, które nie wymagają prac badawczych, pozostają pracami rutynowymi czyli nie mogą zostać zaliczone do prac B+R.
7. Przykłady rutynowych czynności
- Prace nad zmianami związanymi z konkretnym systemem lub programem, który był publicznie dostępny przed rozpoczęciem prac.
- Rutynowa konserwacja komputerów i oprogramowania.
- Rozwiązywanie problemów technicznych, które rozwiązano w poprzednich projektach dotyczących tych samych systemów operacyjnych i architektury komputerowej.
- Tworzenie aplikacji biznesowych i systemów informatycznych na podstawie znanych metod i istniejących narzędzi informatycznych.
- Dodawanie funkcjonalności dla użytkownika w istniejących programach użytkowych.
- Tworzenie stron internetowych lub oprogramowania z użyciem istniejących narzędzi.
- Użycie standardowych metod kodowania, weryfikacji bezpieczeństwa i testowania integralności danych.
- Dostosowywanie produktów do określonych zastosowań, o ile w ramach tego procesu nie jest uwzględniana wiedza, która przyczynia się do znaczącego ulepszenia wyjściowego oprogramowania.
- Rutynowe usuwanie błędów z systemów i programów (debugging), o ile nie jest wykonywane jeszcze przed zakończeniem eksperymentalnych prac rozwojowych.
Właściwa identyfikacja prac B+R w projektach informatycznych otwiera przed przedsiębiorstwami szerokie możliwości pozyskania zewnętrznego wsparcia. Ubiegając się o dofinansowanie ze środków unijnych, kluczowe jest więc rozróżnienie pomiędzy badaniami przemysłowymi i pracami rozwojowymi, a regularnymi czynnościami, które posiadają nieinnowacyjny charakter. Podczas prac nad projektem B+R zwracajmy szczególną uwagę, aby w poszczególnych zadaniach nie ujmować czynności rutynowych.
W Lech Consulting od wielu lat skutecznie pozyskujemy dotacje m.in. na innowacyjne projekty informatyczne. Zgłoś się do nas to przedyskutujemy Twój pomysł, doradzimy i jeśli zdecydujesz się na współprace z nami to oferujemy:
- Pomoc w budowie i tworzeniu projektu B+R dla branży informatycznej. Zaczynamy od pomysłu do stworzenia założeń, budżetu i prac, który kwalifikuje się do wsparcia unijnego.
- Kompleksowe przygotowania wniosku o dofinansowanie wraz z niezbędnym doradztwem co powinien zawierać aby mieć realne szanse na dotację.
- Prowadzenie projektu oraz rozliczenie dotacji.
Michał Joachimiak
joachimiak@LC.net.pl